4.4 PEAR::Text_Highlighter高亮度显示代码
写过技术文章,经常上技术网站的朋友,肯定有这方面的经验。当讲解一段代码时,需要将其中关键的地方用特殊的颜色或大小显示出来。本节将会介绍一个对给定代码,实现自动高亮度显示关键地方的应用。
本例要点
PHP中已提供了高亮度显示代码的函数——highlight_file与highlight_string函数,但是有“只能对应PHP脚本”,以及“限定于自己设定的外观”等限制应用条件。
本节将应用高级库PEAR::Text_Highlighter来实现。PEAR::Text_Highlighter能根据设置参数的不同对应各种程序代码(见表4-4),而且能自由地决定颜色、样式和CSS样式单,使用非常灵活。
表4-4 PEAR::Text_Highlighter对应的程序代码种类
目录结构
本例代码
这里,事先以数组的形式设置将要被解析的代码文件名。运行时,根据传入的序号来取得对应的代码文件名,例如当指定的序号为1时,在数组中对应的值为“excel.php”,然后在其后附上“.dat”以及完整的路径,就可以取得对应的代码文件了。
大家可能会想,为什么不将整个完全的文件名传过来呢?如果这样就容易产生前面章节中介绍的路径映射脆弱性的问题,原则上应该避免。如果不得已必须要直接传入完整文件名,那么在使用前必须进行有效性的检查。
合成的路径如果不存在时,中断处理。
准备高亮度显示用的画面输出引擎(render)。初始化函数的参数里,以联想数组的形式定义了画面输出时要用到的参数。
这里是最低限度的必要参数,numbers(行序号的输出形式)与tabsize(tab的宽度)。numbers中除了指定为HL_NUMBERS_TABLE(以表的形式整理)、HL_NUMBERS_LI(以单列的形式整理)、FALSE(不显示行序号)。
生成代码解析,高亮度处理用的Text_Highlighter对象,在factory方法的参数中指定代码的语言种类。setRenderer中设置输出用的输出引擎(render)。
导入高亮度显示用的样式表单。
实际的高亮度显示时,使用highlight方法。应用file_get_contents函数,读入指定路径的代码文件后,将内容传入到highlight方法。
定义代码显示用的样式。
补充
本例注意事项
本节中使用的PEAR::Text_Highlighter库,是PEAR提供的库之一,使用前必须进行库的安装。具体的步骤如下。
PEAR::Text_Highlighter库主要的输出引擎
PEAR::Text_Highlighter库不仅能根据设置参数的不同,处理不同的语言代码,而且能够通过改变render(输出引擎),输出各种不同形式的高亮度显示结果。
浏览器上经常使用的是HTML输出引擎,本节中就使用HTML输出引擎。
PEAR::Text_Highlighter库主要的输出引擎如表4-5所示。
表4-5 PEAR::Text_Highlighter库主要的输出引擎
HTMLTags是只能使用些简单的<B><l><U>等对的便携式终端设备上的输出形式。
样式单中可以设定的主要样式
例子中已经介绍过了,HTML输出引擎中能以CSS的形式定义代码显示用的样式。表4-6所示的就是能被HTML输出引擎设定的主要样式类。
表4-6 能被HTML输出引擎设定的主要样式类
知识专栏:轻量级数据库引擎SQLite
从PHP5开始标准绑定了数据库引擎SQLite。SQLite不用像MySQL与PostgreSQL一样进行重新安装与环境配置了。只要导入了PHP5后,就可以立即使用。今后,随着PHP5的普及,使用到SQLite的机会将越来越多了。
这个SQLite拥有与本来的数据库服务器一些不同的特征,使用时要注意。
是一个文件一个数据库类型的“文件型数据库”
SQLite与MySQL,PostgreSQL那样的数据库服务器不同,不以服务的形式常驻内存。通过PHP应用程序来进行操作,最多也是以“从文件中读取”(这种形式与Microsoft Access相似)的形式来进行。通过文件的拷贝就能进行数据库的备份。
不进行根据数据类型的检查
SQLite中没有数据类型。在定义表时,也不在CREATE TABLE中明确定义数据类型(但是,除了设定INTEGER型主键的情况以外)。严格地说,可以含有数据类型的定义,但是请注意,进行数据登录/更新时,并不确认数据类型。
没有用户的概念
SQLite中,不能进行以表/视图为单位的访问控制。为了不让数据库文件被外部的用户随意访问到,必须在操作系统上进行必要的权限控制。
共有条评论 网友评论