我正在使用CRON调用php脚本。
该脚本使用了很多error_log函数:
error_log('My error');
好像它没有从CLI工作。
我可以通过使用更多参数来使其工作:
error_log('My error', 3, '/fullpath/to/my/log');
但我想避免修改所有内容(我的脚本包含很多其他脚本)。
据我了解,从命令行调用时,PHP使用的是另一个php.ini。
有没有办法强迫它使用普通的php.ini?
我需要我的cron在与Web完全相同的环境中执行此脚本。
我应该注意哪些问题?其他差异可能会破坏我的代码?
修改:
我找到了一种告诉php使用哪个php.ini文件的方法(-c):
/path/to/php5 -c /path/to/php.ini /path/to/script.php
但它没有用。
在我的脚本shell_exec('php --ini')
中仍然显示cli / php.ini ...
答案 0 :(得分:1)
如果您需要cron在来自网络的完全相同的环境中执行此脚本,只需从网络中调用它:
curl http://localhost:4242/script.php
它将使用所有环境变量,配置和日志作为Web服务器用户运行脚本。
要解决日志记录的确切问题,只需将stderr
重定向到文件:
/path/to/php5 /path/to/script.php 2> /fullpath/to/my/log
第一部分:shell_exec('php --ini')
显示默认的cli / php.ini,因为您使用默认配置启动新进程。要显示自定义配置,请在命令行中指定它
shell_exec('php --ini -c /path/to/php.ini')
或显示当前流程的信息:
phpinfo(INFO_GENERAL)