【问题标题】:calling PHP from shell fires repeatedly从 shell 调用 PHP 反复触发
【发布时间】:2015-06-20 05:29:02
【问题描述】:

我在运行 CPANEL/WHM 的 VPS 上遇到问题,通过shell_exec() 调用 PHP 脚本会导致它反复重新加载目标,直到服务器崩溃。我通过创建一个显示行为的非常简单的示例(涉及两个脚本)消除了它在目标脚本中的可能性:

从网络调用的脚本

# script: test.php
echo shell_exec('php target.php');

目标脚本

 # script: target.php
 echo "Its a small world after all \n";

从命令行运行test.php 会产生您期望的输出(“毕竟这是一个小世界”),但通过Web 浏览器调用test.php 会尝试重复启动target.php,直到服务器崩溃。

我应该注意这不会发生在非 php 目标上;例如 shell_exec('ls') 的工作方式完全符合预期。

这不会发生在我当地的 vagrant box 或数字海洋上的 VPS 上。我只是在 CPanel 服务器上得到这个结果(它最终必须存在的地方)。

虽然可能有变通办法,但需要解决根本原因,因为在少数情况下这种类型的模式对应用程序有帮助。

尝试的修复/探索(基于 cmets)

  • Web 浏览器不会根据 Chrome 中的网络标签信息多次重新加载页面
  • 与浏览器无关:在详细模式下通过 CURL 调用。单次调用,挂起直到网络服务器崩溃

【问题讨论】:

  • target.php 是做什么的?
  • @frank - target.php 的全部内容都在上面。它输出“毕竟它是一个小世界”
  • 你为什么要从 php 在 shell 中执行另一个脚本?您可以只包含该文件,它就会运行。
  • 使用 httpfox 或 firebug 的 net tab 之类的东西,看看你的浏览器在做什么。可能您的服务器发出重定向或元刷新导致页面不断被重新点击。
  • @MarcB 很好的建议,但不幸的是不是这样。

标签: php shell


【解决方案1】:

可能 CPanel 正在使用自定义 php.ini 配置运行,该配置可能正在通过自动前置或附加文件做一些时髦的事情。因此,当它加载target.php 时,它会自动包含test.php,并陷入无限循环。由于其他环境没有使用该配置,因此它们没有相同的问题。

使用-n 运行命令,因此它不包含 php.ini 配置。即

shell_exec('php -n target.php');

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多