什么时候脚本会结束而不显示原因?
我正在使用带有 set_time_limit(60*60*24) 的脚本来处理大量图像。但在 1k 图像左右(1 或 2 分钟)后,脚本停止,并且在命令行中不显示任何错误。
我还使用一个记录器,在关闭时将脚本抛出的任何错误写入文件(通过使用 register_shutdown_function )。但是当这个脚本停止时,什么也没有写(它应该写一些东西,即使没有抛出错误。它与任何其他脚本完美配合,在我遇到的任何其他情况下)。
Apache error_log 也不显示任何内容。
有什么想法吗?
编辑:我的环境是Centos 5.5,php 5.3。
I am using a script with set_time_limit(60*60*24) to process a big amount of images. But after 1k images or so (1 or 2 minutes), the script stops without showing any errors in the command line.
I'm also using a logger that writes to a file any error thrown by the script, on shutdown (by using register_shutdown_function). But when this script stops, nothing is written (it should write something, even if no errors are thrown. It works perfect with any other script, on any other situation I ever had).
Apache error_log doesn't show anything either.
Any ideas?
Edit: My enviroment is Centos 5.5, with php 5.3.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它可能内存不足。
如果你能分配那么多,可能会让你继续下去。
It is probably running out of memory.
May get you going if you can allocate that much.
请确保您没有在安全模式下运行:
http://php.net /manual/en/features.safe-mode.php
Please make sure you're not running in safe mode:
http://php.net/manual/en/features.safe-mode.php
请注意,register_shutdown_function 不保证每次都会执行关联的函数。因此您不应该依赖它。
请参阅 http://php.net/register_shutdown_function
要调试问题,请检查 PHP 错误日志。 (当您从控制台使用 PHP 时,这不是 apache 错误日志。检查您的 PHP.ini 或 ini_get('error_log') 以了解它在哪里。)
解决方案可能是编写bash 中的一个简单包装脚本,用于执行脚本,然后在脚本末尾执行您想要执行的操作。
另请注意,PHP 不计算在外部、非 PHP 活动(例如网络调用、某些库函数、图像魔法等)上花费的时间。
所以你设定的时间限制实际上可能比你预期的要长得多。
Please note that register_shutdown_function does NOT guaranties that the associated function will be executed everytime. So you should not rely on it.
see http://php.net/register_shutdown_function
To debug the issue check the PHP error log. (which is NOT the apache error log when you're using PHP from the console. check your PHP.ini or ini_get('error_log') to know where it is.)
A solution may be to write a simple wrapper script in bash that executes the script and then does what you want to be executed at the end of the script.
Also note that PHP doesn't count the time spent in external, non-php, activities, like network calls, some libraries functions, image magick, etc.
So the time limit you set may actually last much longer than you expect it to.