PHP require在Linux下的路径

今天用到了Linux的定时执行任务(crontab),发现始终无法正确进行发送邮件,最后发现问题出在require的路径上。


错误:

require('../includes/common.php');(在windows系统下似乎是可以正确执行的,但是定时执行Linux不认,故更好的应对应该使用绝对路径如下)



正确的应该是:

require(dirname(__FILE__).'/../includes/common.php');



以下有朋友遇到的相同的问题,较为详细:

有时,会遇到这样的包含文件的方法:
 


复制代码 代码示例:
require_once('../../lib/some_class.php');
这种写法的缺点:
它首先查找指定的php包含路径,然后查找当前目录。
因此会检查过多路径。
如果该脚本被另一目录的脚本包含,它的基本目录变成了另一脚本所在的目录。


另外一个问题就是:当定时任务运行该脚本,它的上级目录可能就不是工作目录了。


因此,最佳选择是使用绝对路径,例如:
 


复制代码 代码示例:
define('ROOT' , '/var/www/project/');
require_once(ROOT . '../../lib/some_class.php');

以上代码定义了一个绝对路径, 值被写死了。


下面,加以改进,路径 /var/www/project 也可能会改变, 那么每次都要改变它吗? 不是的,可以使用__FILE__常量,例如:
 


复制代码 代码示例:
define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));
require_once(ROOT . '../../lib/some_class.php');

 
现在,无论移到哪个目录,如移到一个外网的服务器上,代码无须更改便可正确运行。
也就是用到了pathinfo__FILE__常量,实现了可移植的代码。


转载自:http://www.jbxue.com/article/12927.html


你可能感兴趣的:(PHP)