网站开发日志

2008年9月25日星期四

分享家:Addthis中国

PHP - 调用或者读取文件的方法

我们写程序时常常要调用已有的代码或者读取已经存在的文件,这样一来简化代码,二来挺高代码的复用率。在PHP中我们用 include 或者require来调用现有的代码。includerequire功能非常相似。唯一的区别是它们对运行错误的处理方式不同。两者都提供警告(warning),但是当出现错误时,比如说所需文件的路径不对,require将终止程序,这是PHP对致命错误(fetal error)的处理方法, 相比之下,include就宽容的多,它会跳过这个错误,让程序继续执行。另外我们还常常用到,include_oncerequire_once, once这里代表只调用一次的意思。因为如果一个文件(代码)在程序的同一个运行周期里被多次调用,有可能会造成变量重复分配,函数重复定义等问题,所以当程序由很多部分组成,我们在调用代码时采用include_oncerequire_once,这样即使同样的代码被调用了两次,在整个程序的实际运行中将只被调用一次。

includerequire 是PHP里的控制结构(Control Structures), 因此严格的讲它们不算是PHP的方法(function), 但是我们也可以用它们来读取文件,这就类似于使用PHP里其他一些方法(function), 比如file_get_contents, fpassthru, 等等。使用include、require 和其它读取文件的方法有什么不同呢?这主要表现在执行速度和内存使用上。下面是引自 SITE WITH THE LAMP 的几种方法对1M文件读取的对比表,可以看出fpassthru执行速度最快、readfile占用内存最小。相比之下,include, require 就的效率就很低。所以当我们只是对静态文件进行读取的时候,尽量不要用includerequire

Function Sample Usage Time (s) Memory (b)
file_get_contents echo file_get_contents($filename); 0.00564 1067856
fpassthru fpassthru($fp); 0.00184 20032
fgets
$fp = fopen($filename,"rb");
while(!feof($fp))
{
    echo fgets($fp);
}
0.07190 30768
file echo join("",file($filename)); 0.06464 2185624
require_once require_once($filename); 0.08065 2067696
include include($filename); 0.08202 2067696
readfile readfile($filename); 0.00191 19208

标签:

相关文章:

0 条评论:

发表评论

指向此帖子的链接: