0

我有 Apache 2.2 PHP 5.3 MySQL 5.5 应用程序。page1.php 上的表单接受用户输入。使用 GET 将值传递给 page2.php。page2.php 上的 PHP 脚本运行 MySQL 查询并显示结果。根据用户输入参数查询可能会运行 3 到 900 秒。

在我的测试中,运行 < 300 秒的任何查询的结果都显示正常。更长的运行查询在服务器上可以正常完成(我看到 CPU 负载在 500 秒后从 90% 变为 0%),但浏览器没有显示结果并继续显示在状态栏中“从 my.host.org 传输数据。 ..”

此时,当我尝试在同一浏览器(Firefox)的新实例中打开我的应用程序的任何页面时,它会在选项卡标题上显示“正在连接...”,并在“等待 my.host.org ...”中显示状态栏。此时在其他浏览器(IE)中打开我的应用程序的任何页面都可以。

以下是我迄今为止更改/设置的设置,但它们没有帮助。任何想法都会有所帮助。谢谢你。

apache2.conf:
Timeout 300  -> 1800

php.ini:
user_ini.cache_ttl = 300  -> 1800
max_execution_time = 30  -> 1800
default_socket_timeout = 60  -> 1800
mysql.connect_timeout = 60 -> 1800

page2.php: 
ignore_user_abort(1);
4

1 回答 1

0

考虑到这是一个长时间运行的查询,您真的需要在浏览器窗口中运行它吗?

您应该考虑使用 Cron 作业并将输出重定向到电子邮件地址,默认情况下,在 CLI 中运行的 PHP 进程具有无限的执行时间。

作为我的最后一条帮助,如果您将 PHP 作为 (F)CGI 运行,您可能必须更改 CGI 设置以等待 PHP 进程的输出更长一点。

于 2012-08-12T23:17:18.590 回答