【问题标题】:PHP error_log from CLI来自 CLI 的 PHP 错误日志
【发布时间】:2016-05-15 14:48:09
【问题描述】:

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

【问题讨论】:

    标签: php cron command-line-interface


    【解决方案1】:

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

    • 设置虚拟主机(仅限本地,例如在端口 4242 上,使用 iptables 锁定)
    • curl http://localhost:4242/script.php 运行cron

    它将使用所有环境变量、配置和日志以网络服务器用户身份运行脚本。

    要解决确切的日志记录问题,只需将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)
    

    【讨论】:

    • 脚本位于根路径之外,以避免被用户调用。但如果我不能解决这个问题,我会听从你的建议。只需 php -c... 一切都应该没问题
    • 如果您放弃 stderr 重定向,请阅读答案中的要点如何正确设置它以避免被用户调用。
    • 哦,我现在可以看到我所做的事情的愚蠢了。 Cron 调用了良好的 php.ini,但其中的 shell exec 没有 -c 标志...花了我这么多时间才看到光明 ^^
    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-09-25
    • 2012-02-15
    • 1970-01-01
    • 2020-04-08
    • 2013-06-07
    • 2021-04-17
    相关资源
    最近更新 更多