PHP中文件包含的路径问题

时间:2023-09-19 17:21:29

在程序中当前文件夹下文件路径可以表示为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程序中可以在配置文件中设置当前文件夹路径常量,包含的时候组成绝对路径,提高

效率,又不影响程序的修改。