【发布时间】: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 很好的建议,但不幸的是不是这样。