在程序中当前文件夹下文件路径可以表示为3种:1)绝对路径,2)相对路径,3)直接文件名
例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php
在PHP中包含一个文件路径也可以有以上3中方法,但效率是依次递减的。原因可以通过strace来追踪。
首先写一个test.php:
1
<?php
2
include
(
'a.php'
);
//为了看到文件包含顺序,这个a.php是不存在的
然后strace追踪test.php的执行
root@Cyrec-desktop:/var/www# strace -e file php test.php
可以看到如下:
lstat64("/var/www/./c.php", 0xbfe389f4) = -1 ENOENT (No such file or directory)
lstat64("/opt/php5/lib/php/c.php", 0xbfe389f4) = -1 ENOENT (No such file or directory)
lstat64("/var/www/c.php", 0xbfe389f4) = -1 ENOENT (No such file or directory)
可以看到包含文件的查找过程是 首先在当前目录中查找,没找到(-1)然后到PHP配置的include_path中查找,又没
找到,最后到执行脚本的目录查找,也没找到。
然后将test.php中的a.php路径改为./a.php然后再用strace查看:
lstat64("/var/www/./c.php", 0xbfd2c8d4) = -1 ENOENT (No such file or directory)
只有这一条查找记录,但系统还是要将/var/www/./c.php转换成/var/www/c.php这样的绝对路径。
如果include中使用绝对路径/var/www/a.php,结果如下:
lstat64("/var/www/c.php", 0xbf92a3d4) = -1 ENOENT (No such file or directory)
这是最快的方法,所以在PHP程序中可以在配置文件中设置当前文件夹路径常量,包含的时候组成绝对路径,提高
效率,又不影响程序的修改。