作为cron作业运行时访问PHP包括上述webroot


Accessing PHP includes above webroot when running as cron job

我试图使用一个PHP脚本的敏感信息,所以我使用包含托管密码上面的webroot。

这个脚本可以很好地通过浏览器运行,但是当我把它作为一个crob作业运行时,它会生成关于include的错误消息。

open_basedir设置是:/var/www/vhosts/xxx/:/tmp/——想知道这是否相关?

感谢任何关于如何解决这个问题或变通方法的建议。

PHP Warning:  include(../includes.php): failed to open stream: No such file or directory in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 6
PHP Warning:  include(../includes.php): failed to open stream: No such file or directory in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 6
PHP Warning:  include(): Failed opening '../includes.php' for inclusion (include_path='.:') in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 6
PHP Notice:  Use of undefined constant API_KEY - assumed 'API_KEY' in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 88
PHP Notice:  Use of undefined constant SCOPE - assumed 'SCOPE' in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 89
PHP Notice:  Use of undefined constant REDIRECT_URI - assumed 'REDIRECT_URI' in /var/www/vhosts/xxx.com/httpdocs/linkedin_status.php on line 91

这对我来说总是有效的…

require_once("/full/path/to/your/file/includes.php");

您可能遇到的情况是,Cronjob使用了不同的php.ini,因此使用了不同的设置。为了确认这一点,您可以创建一个php脚本,将phpinfo();结果写入一个文件。在输出中,您将看到正在使用哪个php.ini。

你可以这样做:

  • 在执行cronjob时指定要使用哪个php.ini。
  • 通过wget命令运行cronjob,该命令通过web服务器(如浏览器)实际执行脚本。Wget是一个命令提示符工具(不是PHP!),它从互联网调用url并将其写入屏幕或文件。