PHP set_time_limit 没有效果

发布于 2024-11-10 10:55:41 字数 389 浏览 0 评论 0原文

我有一个非常痛苦的缓慢脚本,它从 MySQL 获取大量数据并从中创建一个大型报告,最后作为应用程序/强制下载提供给用户。

长话短说,在生产服务器上,它会在大约 30 秒后终止(非常一致),并吐出一个空文件。在开发服务器上它运行良好,但执行时间确实要长得多 - 大约 90 秒。为了“安全”,我将 php.ini 文件设置为 max_execution_time = 2000 并在脚本开头运行 set_time_limit(4000) (数字远远超过预计完成时间,但只是为了确定;))。

是什么导致我的 Web 服务器忽略我设置的时间限制并在 30 秒后退出?

编辑:我确定的一件事是,MySQL 部分代码需要 8-9 秒才能完成,并且每次都成功地超过了该时间点。

I have a very painful slow script that gets lots of data from MySQL and creates a large report out of it that it serves to the user at the end as application/force-download.

Long story short, on production server it keeps terminating after about 30 seconds (quite consistently) and spitting out an empty file instead. On development server it works fine, but it does take significantly longer to execute - about 90 seconds. Just to be 'safe', I set my php.ini file to max_execution_time = 2000 and also run set_time_limit(4000) in the beginning of my script (numbers way over the expected completion time, but just to be sure ;)).

What could be causing my web server to ignore the time limits I set and quit on me after only 30 seconds?

Edit: one thing I know for sure is that it takes MySQL portion of the code 8-9 seconds to complete, and it successfully gets past that point every time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷心人i 2024-11-17 10:55:41

也许是 PHP 的安全模式。

尝试

die(ini_get('max_execution_time'))

在调用 set_time_limit(0); 后读取该值,看看它是否真的被覆盖。

如果它被覆盖为 0 并且你的脚本仍然死掉,那么原因可能是代码中的其他地方

Maybe the PHP safe_mode.

Try to do a

die(ini_get('max_execution_time'))

to read the value after you have called the set_time_limit(0); to see if actually it get overwrited.

If it gets overwrited to 0 and your script still dies then the cause could be somewhere else in your code

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文