我有一个PHP脚本,将由应用程序管理员的请求执行。它做了很多东西,至少需要20分钟(取决于数据库大小)
Apache TimeOut
指令设置为300(5分钟),如果执行的时间较长,则在PHP脚本完成后关闭连接并返回500状态代码
为此脚本长时间设置PHP ini max_execution_time
是没用的。
<?php
// long script
ini_set("max_execution_time", 3600);// 1 hour
// Apache still responses with the same "Connection: close" header and 500 status code
而且我不想仅为这几个脚本更改整个Apache TimeOut
指令,因为如果我这样做,任何请求都可能需要很长时间才能成为DDOS的范围漏洞,这是对的吗?
有没有办法让这个脚本只在Apache级别运行更长时间?
答案 0 :(得分:2)
您是否尝试过PHP的set_time_limit()方法?
https://www.php.net/manual/en/function.set-time-limit.php
除了设置初始执行时间外,手册还说调用它会将调用时花费的时间重置为零,然后将计数器重新启动到提供的限制。
因此,如果您希望确定的话,可以在整个脚本中定期调用set_time_limit(0)(0 ==无限制),以确保您从未遇到限制(即使您设置了输入0即可获得无限的限制。