【发布时间】:2012-11-26 19:54:41
【问题描述】:
说,我在 Apache 上运行 PHP。当有人发出客户端请求时(不管如何),什么定义了客户端等待的时间量,脚本运行? 这个选项是 Apache 的、PHP 的还是客户自己定义的? 另外,如果通过 curl 调用脚本呢?
【问题讨论】:
-
只是为了让您了解其中的含义,允许客户端这样做就足以让黑客们梦寐以求。
说,我在 Apache 上运行 PHP。当有人发出客户端请求时(不管如何),什么定义了客户端等待的时间量,脚本运行? 这个选项是 Apache 的、PHP 的还是客户自己定义的? 另外,如果通过 curl 调用脚本呢?
【问题讨论】:
见 PHP set_time_limit()
设置允许脚本运行的秒数。如果达到此值,脚本将返回致命错误。默认限制为 30 秒,如果存在,则为 php.ini 中定义的 max_execution_time 值。
请注意:
当 PHP 在安全模式下运行时,此功能无效。除了关闭安全模式或更改 php.ini 中的时间限制之外,没有其他解决方法。
您可能还对 max_input_time(通过 php.ini 设置)感兴趣
这设置允许脚本解析输入数据(如 POST 和 GET)的最长时间(以秒为单位)。从接收到服务器上所有数据的那一刻到开始执行脚本的时间。
【讨论】:
在php.ini中定义,参数称为max_execution_time。
您可以直接使用set_time_limit、ini_set 或php.ini 进行更改。
但是,其实你问的是
客户端等待的时间,要运行的脚本
恕我直言,它是无限的。我从未见过这样的时刻,服务器正在运行脚本并且浏览器拒绝等待。主要是保持脚本在服务器上运行。
【讨论】:
max_execution_time 也影响 CURL。如果你想通过 CURL 从服务器 B 获取数据到服务器 A,如果服务器 B 运行脚本并且服务器 A 正在等待响应,那么必须在两边都设置 max_execution_time。如果 CURL 从服务器 B 获取的数据太大,但这次服务器 B 没有运行脚本,则仅更改服务器 A 上的限制会有所帮助。
max_execution_time 是服务器端限制,而不是用户端。如果脚本被调用,它将一直运行直到到达max_execution_time。
CURLOPT_TIMEOUT 选项。