代码之家  ›  专栏  ›  技术社区  ›  Tom Smykowski

如何在PHP中隔离服务器灾难脚本?

  •  3
  • Tom Smykowski  · 技术社区  · 15 年前

    我有一个自己编写的使用ffmpeg PHP的PHP脚本。而且ffmpeg php是个混蛋。对于某些输入,它可以正常工作,但对于某些输入,它会崩溃整个PHP,服务器抛出内部服务器错误500。我已经尝试过多次更新ffmpeg-php、ffmpeg本身等等,但是对于某些输入,它在0.6版本的0.5中工作时就不起作用了。我需要的是确保脚本的其余部分将被正确处理。现在没有了,因为当在电影帧上运行toGDImage()时,我有内部服务器错误500,没有任何来源的反馈。

    所以为了让我的用户安心,我决定我需要隔离这部分脚本,因为它会干扰ffmpeg php。我需要一种方法来保证,如果这一部分出了严重的问题,其他的都会继续下去。

    Try-catch不起作用,因为这不是警告,也不是致命错误,这是一个可怕的服务器灾难。你有什么建议?

    或者还有其他更简洁的方法来隔离PHP中的灾难脚本吗?

    请不要写我需要诊断或调试或找到错误的来源。我不是一个该死的初学者,我也不是一个ffmpeg开发人员来搅乱它的代码,我现在需要让我的用户安全,这是我现在关心的一切。

    3 回复  |  直到 15 年前
        1
  •  2
  •   mattbasta    15 年前

    如果出现500个错误,那是因为某种异常被抛出的级别低于PHP本身的级别。除非您的代码旋转成某种无限循环或达到递归限制(特别是因为它与0.5版一起工作),否则很有可能ffmpeg或ffmpeg php崩溃,并以启动它的php实例为例。

    最好的办法是,既然您已经有了访问服务器的权限,就可以使用Python这样的语言编写有问题的脚本。有大量的ffmpeg python插件,所以您完全不应该很难设置它。从PHP调用Python脚本并从文件中拉入输出。这样做的目的是将PHP与脚本失败隔离开来。它也会让你远离ffmpeg-php(至少在我看来,这是一个不道德的组合)。

    如果您已经完全开始使用PHP(我不建议您这么做),那么可以从面向外部的PHP脚本中使用PHP cli启动另一个PHP脚本,然后从那里开始工作(就像使用Python一样)。我再次强烈建议你避免这样做。

    希望这有帮助!

        2
  •  2
  •   Savageman    15 年前

    proc_open() 例如。

    http://php.net/proc_open

        3
  •  1
  •   bpeterson76    15 年前

    另一方面,您可以启动、重新启动并通常销毁单独的服务器,而对其余代码的影响很小。它还可能改进了备份的含义(隔离媒体和逻辑),因为走这条路,我们从来没有关闭过主应用服务器。

    推荐文章