【发布时间】:2018-04-30 17:19:16
【问题描述】:
我有一个必须从浏览器执行的 PHP 脚本。在该脚本中,我使用 exec() 函数,如下所示:
exec("sudo scriptname 2>&1", $out);
我希望 $out 保存该脚本返回的输出。我需要输出以进行进一步处理。该脚本大约需要 2 分钟才能运行。问题是当我在浏览器中运行 PHP 脚本时,它会继续运行一分钟然后停止。因此,PHP 脚本死掉了,我收到类似于“页面无响应”的错误。
在 chrome 上,屏幕显示如下错误:
ServerName.com unexpectedly closed the connection
ERR_INCOMPLETE_CHUNKED_ENCODING
在 Mozilla 上,屏幕变为空白(全白)。
在搜索 chrome 错误后,我相信 Web 服务器(我正在运行 Apache)由于客户端不活动而关闭了连接,因为 PHP 脚本除了等待 exec() 函数之外并没有真正做任何事情完成。
我尝试设置 max_execution_time、max_input_time、default_socket_timeout 并使用 set_time_limit(0) 希望这不会杀死 PHP 脚本,但它没有工作。
我不想使用 PTHREADS 生成两个线程,其中一个运行 exec() 函数,另一个监视它或以某种方式使服务器保持忙碌。
我相信 PHP 或 apache 中有一些设置为 60 秒,这会终止与服务器的连接。我只是不知道它是什么。
此外,当我将 exec() 中的脚本替换为另一个耗时不到一分钟的脚本时,PHP 脚本可以完美运行。
编辑: Apache 超时值设置为 120 秒。
【问题讨论】:
-
您正在尝试在浏览器上执行 PHP 代码?如果不可能,php 是服务器代码,您需要在浏览器中使用 javascript 来运行服务器代码并从服务器返回响应。
-
如果它在 Apache 中运行,请检查超时值。这个也将被触发。但是要意识到,如果一个网站让你等待 2 分钟,你会停下来,刷新浏览器,离开网站,......客户不会等待 2 分钟。
-
我检查了 httpd.conf 中的超时值。这是 120 秒。所以我想这不是问题。