三、文件是我们的朋友 无论你在开发的网站规模的大小,都应该意识到代码重用的重要性,无论这些代码是HTML、还是PHP
代码。例如,你必须至少每年改变一次包含版权信息的页脚,如果你的网站含有1000个页面,每年修改一次也是个很烦人的事
儿。 在PHP中,至少有几个函数可以帮助你实现代码重用的目的,所使用的函数取决于你所重用的代码,主要的函数有:
* include() and include_once() * require() and require_once() include()函数包含并对给定的文件进行计算,
例如: include('/home/me/myfile'); 在include文件中的任何代码都在include()出现的代码范围内执行,你可以通过
联合使用include()和fopen()在自己的服务器上包含静态文件,在另一台服务器上包含目标文件。 include_once()的功能与
include()相同,二者之间的区别在于它会检查一个文件中的代码是否已经包含在现有的脚本中,如果代码已经存在,则不会再次
包含它。 require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进
行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与
include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。 为也
了解其内容,在版权信息、静态文字和其他不包含变量的元素或者依赖其他正在执行的脚本的元素中我更趋向于使用require函
数。例如: Something [a lot of content] 另一方面,我经常在文件的开始使用
include()来控制许多的函数: Something [a lot of content] 下一个问题就该是
“include和require文件在哪里?”,对这个问题简单的回答是,“系统中的任意地方。”如果你的代码中包含有带有用户名和
口令的数据库连接,你肯定不会将它们都放在文档根目录中向所有的人都开放。 included或required文件可以在系统上的任
何地方,只要PHP运行的系统上的用户可以访问这些文件即可,你可以使这些文件具有任何后缀,或者不使用后缀。 使用
include()和require()对在网站中的元素进行具体化是一种普遍的现象,并在需要对网站升级时,给你带来很大的方便。 四、
PHP和文件系统的维护 PHP中有许多与文件系统有关的函数,这些函数不仅可以打开文件,还可以显示目录中的内容、移动文
件和其他一些功能,许多人甚至用PHP开发基于互联网的文件资源管理器。 关于文件路径的解释:在Windows中,可以在路径
中使用/和\符号,而在其他的操作系统中只能使用/符号。出于一致性的缘故,我们统一使用/符号。 下面的脚本样例可以显
示一个目录清单,注释已经包含在代码中: ; /* 使用一个while语句,读取已经打开的目录中的所有元素,如果文件的
名字不是“.”或“..”,则显示列表中的名字*/ while ($file_name = readdir($dir)) { if (($file_name != .) &&
($file_name != ..)) { $file_list .= $file_name; } } $file_list .= ; /*关闭打开的目录,结束PHP
模块*/ closedir($dir); ?> Directory Listing Files in:
好了,我们已经得到了一个目录清单。需要注意的是,要读取一个文件(稍后我们将进行讲解)或目录的内容,PHP
运行的系统上的用户必须至少有读取文件的权限。 下面是一个如何拷贝文件的例子: 这个例子是一个文件备份系
统的原型。在这段脚本运行时,它把文件拷贝到一个不同的位置进行保存。稍微修改一下守护程序,就可以在一天中你指定的时
刻执行它,而无需用户的干预。 假定你在系统上安装了Lynx,可以创建一个守护程序的条目访问这个文件,访问这个文件会
运行这个脚本并建立一个拷贝文件,下面的例子将在上午5点钟运行这个脚本,然后关闭Lynx: 0 5 * * * [username] lynx
-dump http://localhost/copyfile.php 1>/dev/null 2>&1 如果运行的是CGI版本的PHP,可以跳过Lynx部分,而直接调用二
进制文件: 0 5 * * * [username] php /path/to/copyfile.php 1>/dev/null 2>&1 五、丰富的数组函数 PHP 4.0中新
添加了30个与组数有关的函数,其中一些常见的函数可以判断一个数组中是否包含某个元素,对一个数组中的元素进行计数,添
加或删除数组中的元素或者对数组中的元素进行排序。 如果有一个很大的数组,而你需要找出其中是否包含一个特定的元
素,就可以使用in_array()。下面的例子将显示“Not found in this array”,因为在一个名字为$namesArray的数组中查找
Albert,而在$namesArray数组中不存在这样一个元素。 如果把$lookingFor的值改为Mary,就会得到“You've found
it!”的信息,因为Mary是$namesArray数组中的一个元素。 如果要对一个数组中的元素个数进行计数,只要简单地使用
count()函数即可: 返回的$count的值为7。 可以在一个数组的开头或结尾处添加元素,还可以使用array_merge
()来建立一个包含二个或更多数组中元素的新数组,合并时,元素的顺序会按指定的顺序排列,如果原来的数组是被排过序的,
在合并后需要对它重新排序。 我们可以首先利用array_push()在数组的结尾处添加一个元素: ; } ?> 运
行上面的程序将得到下面的结果: 0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 :
grape 6 : pineapple 7 : tomato 如果需要在数组的开头添加元素,其代码与上面的代码差不多,唯一的不同之处
是需要用array_unshift()代替array_push()。 ; } ?> 运行上面的程序将得到下面的结果: 0 : grape
1 : pineapple 2 : tomato 3 : apple 4 : orange 5 : banana 6 : kiwi 7 : pear
array_merge()函数可以把二个或更多的数组合并为一个数组。 ; } ?> 运行上面的脚本将得到下面的结果:
0 : apple 1 : orange 2 : banana 3 : kiwi 4 : pear 5 : carrot 6 : green beans 7 :
asparagus 8 : artichoke 9 : corn 现在我们已经掌握了如何添加元素和合并数组,我们再来看看如何从一个数组
中删除元素。从一个数组的末尾删除一个元素可以使用array_pop()函数,使用array_shift()函数可以从一个数组的开头删除一
个元素。尽管使用array_pop()或 array_shift()从数组中删除了一个元素,你还可以把这个元素当作一个变量来使用。 使
用array_pop()从一个数组的末尾删除一个元素: ; } echo and finally, in $popped: $popped; ?> 运
行上面的脚本会得到下面的结果: 0 : apple 1 : orange 2 : banana 3 : kiwi and finally, in
$popped: pear 我们再来讨论一个从一个数组的末尾删除元素的例子: ; } echo and finally, in $shifted:
$shifted; ?> 运行上述脚本会得到如下的显示结果: 0 : orange 1 : banana 2 : kiwi 3 : pear
and finally, in $shifted: apple 另外还有几个函数可以对数组中的元素进行排序,但在这里我们将只简要介绍基本
的排序函数,说明排序的过程: ; } ?> 运行上述的脚本会得到如下的显示结果: 0 : apple 1 :
banana 2 : kiwi 3 : orange 4 : pear
转自: http://edu.chinaz.com |