我刚刚面对代码
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中使用绝对路径,相对路径在大多数情况下都会很好。