【问题标题】:When does a script end without showing the reason?脚本什么时候结束而不显示原因?
【发布时间】:2011-03-09 00:14:45
【问题描述】:

我正在使用带有 set_time_limit(60*60*24) 的脚本来处理大量图像。但是在 1k 左右的图像(1 或 2 分钟)之后,脚本会停止,而不会在命令行中显示任何错误。

我还使用了一个记录器,它在关闭时(通过使用 register_shutdown_function)将脚本抛出的任何错误写入文件。但是当这个脚本停止时,什么都没有写(它应该写一些东西,即使没有抛出错误。它与任何其他脚本完美配合,在我遇到的任何其他情况下)。

Apache error_log 也不显示任何内容。

有什么想法吗?

编辑:我的环境是 Centos 5.5,带有 php 5.3。

【问题讨论】:

  • 请注意,您可以使用set_time_limit(-1); 确保脚本可以无限期运行。
  • 通过控制台直接在 PHP 上运行您的脚本。这将确保 http 隧道不会在此期间死亡,一些浏览器会在一段时间内没有收到任何内容后将其杀死。
  • @tomcatexodus:更好的是使用 0 - 这意味着没有时间限制。 -1 只是 MAX_INT。虽然很大,但仍然是一个限制。
  • @Jason 我正在使用控制台
  • @Marc B; Neato!我一直使用并认为它是-1。

标签: php shutdown


【解决方案1】:

它可能内存不足。

ini_set('memory_limit', '1024M');

如果你能分配这么多,可能会让你继续前进。

【讨论】:

    【解决方案2】:

    请确保您没有在安全模式下运行:

    http://php.net/manual/en/features.safe-mode.php

    【讨论】:

      【解决方案3】:

      请注意,register_shutdown_function 不保证关联的函数每次都会被执行。所以你不应该依赖它。

      http://php.net/register_shutdown_function

      要调试问题,请检查 PHP 错误日志。 (这不是 apache 错误日志,当您从控制台使用 PHP 时。检查您的 PHP.ini 或 ini_get('error_log') 以了解它在哪里。)

      一种解决方案可能是在 bash 中编写一个简单的包装脚本,该脚本执行脚本,然后在脚本末尾执行您想要执行的操作。

      另请注意,PHP 不计算在外部、非 PHP 活动(如网络调用、某些库函数、图像魔术等)上花费的时间。 因此,您设置的时间限制实际上可能比您预期的要长得多。

      【讨论】:

      • 另外,如果您在共享主机上,您的脚本可能已被主机提供商设置的一些自动检查杀死。
      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2015-04-24
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2014-04-07
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多