系统调用不计入 PHP 运行时间等几乎没有max_execution_time
影响set_time_limit
。如果您从网络服务器调用脚本,您必须知道网络服务器(不是 PHP)可能会断开 HTTP 连接。
例如:
阿帕奇默认配置:
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 180
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15
每 15 秒发送一次保持活动,在 HTTP 请求开始和连接关闭之间重复 100 次 = 1515 秒。这大约是25分钟,差不多半个小时。即使这是关于 Webserver <> Client 协商而不是 Webserver <> PHP,webserver(和客户端!)仍然可能会在一段时间后简单地断开连接。
耗时超过几分钟的脚本应始终从控制台运行。HTTP 服务器不会让单个请求保持数小时的活动状态。
从控制台(linux)使用 PHP 脚本:
#!/usr/bin/php
<?php
/* code */
结合set_time_limit
PHP 垃圾收集器和更多内存设置,这些脚本可以运行很长时间。
附录:
set_time_limit() 函数和配置指令 max_execution_time 只影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括在脚本执行之外发生的任何活动所花费的时间,例如使用 system() 的系统调用、流操作、数据库查询等。在测量时间是真实的 Windows 上,情况并非如此。
http://php.net/manual/en/function.set-time-limit.php