PHP require()或include()停止脚本而没有错误

时间:2019-07-19 15:22:51

标签: php cron command-line-interface require

我有此代码:

echo "1 - is_readable: " . is_readable("/mnt/persist/www/docroot/wp-load.php") . "\r\n";
echo "2 - file_exists: " . file_exists("/mnt/persist/www/docroot/wp-load.php") . "\r\n";
echo "3 - before require\r\n";
require("/mnt/persist/www/docroot/wp-load.php");
echo "4 - after require\r\n";

但是输出很奇怪:

1 - is_readable: 1
2 - file_exists: 1
3 - before require
  

当我从CLI或CRON启动脚本时,会出现这种情况   直接在浏览器中启动它-一切都很好。

回声4没有显示是什么情况? 我也尝试过要求另一个文件,结果是一样的。

upd。 crontab中的任务:

*/1 * * * * root php -f /somepath/fetch_data.php >> /somepath/results.out.log 2>&1

2 个答案:

答案 0 :(得分:0)

如果您查看wp-load.php文件。它有下面的行

error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );

这基本上会禁用所需的所有错误报告。因此,编辑文件并对其进行注释并添加

error_reporting(E_ALL);

然后您将知道问题所在。同样,并非所有的php文件都与CLI兼容,因为它们使用的某些代码仅在网络环境下运行时才有效。

因此,如果您无法在CLI中修复错误,则可以运行curl调用进行迁移

*/1 * * * * root curl http://localhost/path/to/url

问题在于您将不会获得日志,而只会获得脚本提供的输出。同样,如果您的脚本运行时间过长,则需要添加set_time_limit(0)

https://www.php.net/manual/en/function.set-time-limit.php

答案 1 :(得分:0)

该脚本可能已包含在内,并且在第二个包含中产生了错误。尝试使用require_once()https://www.php.net/manual/en/function.require.php https://www.php.net/manual/en/function.require-once.php