【发布时间】:2017-03-26 04:20:22
【问题描述】:
我有一个从浏览器运行的备份脚本没有问题。它从数据库中提取数据并将其写入一个小于 2MB 的 ZIP 文件。
它大部分从服务器运行,但在遇到特定行时会失败(静默):
require ('/absolute-path/filename'); // pseudo filespec
这是几个这样的陈述之一。这些是库文件,除了“将东西放入内存”之外什么都不做。 我已经完全消除了路径问题的任何可能性。我正在使用条件is_readable() 测试文件,输出它,然后给自己发送电子邮件。
$fs = '/absolute-path/filename'; // pseudo filespec
if (is_readable ($fs) ) {
mail('myaddress','cron','before require'); // this works reliably
require ($fs); // can be an empty file ie. <?php ?>
mail('myaddress','cron','after require'); // this never works.
}
当我注释掉 require($fs) 时,脚本会继续(大部分情况见下文)。
我检查了行尾(不可见的字符)。不是在每个include-ed 文件上,但肯定正在运行的文件具有换行符 (NL) 结尾(Linux 风格),而不是换行符 + 回车符 (NL CR)(Windows 风格)。
我尝试要求一个空文件(只是<?php ?>)来查看脚本是否会超过那个点。它没有。
我已经尝试调用mail(); 从包含的脚本。我收到邮件。再说一次,我知道这条路是对的。它正在执行,但它永远不会返回,而且我没有收到任何错误,至少在 PHP 日志中没有。 CRON 作业终止...
这是一个新服务器。我刚刚将应用程序从 PHP 5.3.10 迁移到 PHP7。其他一切都有效。
我不认为我的内存不足。在脚本的这一点上,我什至还没有从数据库中获取数据,但这似乎是某种累积错误,因为当我注释掉有问题的行时,错误会转移到另一个同样令人费解的沉默在代码中进一步失败。
我还应该查看其他有用的测试、日志或环境条件吗?有什么可以问网络主机的吗?
【问题讨论】: