来自CLI

时间:2016-02-05 15:06:42

标签: php cron command-line-interface

我正在使用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 ...

1 个答案:

答案 0 :(得分:1)

如果您需要cron在来自网络的完全相同的环境中执行此脚本,只需从网络中调用它:

  • 设置虚拟主机(仅限本地,例如在端口4242上,使用iptables锁定)
  • 将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)