在PHP中包含文件的最佳做法是什么


What is the best practice to include files in PHP?

我刚刚面对代码

include('../wp-load.php');

只在从web浏览器调用脚本时工作(等于"从Apache")。如果我从cron或命令行运行相同的脚本,我会收到错误

Warning: include(): Failed opening '../wp-load.php' for inclusion (include_path='.:/usr/local/php54/pear') in /home/myfolder/public_html/exe/myscript.php on line 6

然而,如果我以以下方式修改include,它就起作用了:

include(__DIR__.'/../wp-load.php');

它既可以从命令行工作,也可以从浏览器工作。

与此同时,我开始害怕使用脚本所在目录中的includes。因此,如果tools.php放在同一目录中,使用是否安全:

include('tools.php');

或者添加__DIR__会更好?

include(__DIR__.'/tools.php');

在脚本的顶部,或始终包含在开头的文件中,定义作为目录根路径的常量或变量。您应该定义两个路径:一个来自您的机器,例如:

define('SERVER_PATH', '/var/www/');

这将用于在php脚本中包含php脚本文件

您只需在代码中的任何位置像include(SERVER_PATH.'tools.php')一样使用它。如果您有PHP>=5.3.0 ,您也可以使用__DIR__

第二个url路径:

define('URL_PATH', 'http://www.xxxxxx.com/');

这将用于页面的http请求,如图像、javascript文件、css文件等。

Cron有自己的工作目录,但您可以使用cd:更改它

cd /var/www/vhosts/domain.com/httpdocs

您还需要知道您可以在cron作业中执行多个命令,如下所示:

command1 && command2

所以command1可以是cd,command2可以是php。

然后,您不必添加__DIR__,cron作业将像普通PHP一样工作。

我知道这并不能真正回答你的问题,但它确实解决了让你提出问题的问题。就我个人而言,我不认为有充分的理由总是在include中使用绝对路径,相对路径在大多数情况下都会很好。