【问题标题】:Delay php script without occupying connection延迟php脚本不占用连接
【发布时间】:2013-05-25 19:21:58
【问题描述】:

我想问是否有人知道一种方法可以延迟 php 脚本,而不会一直占用连接槽。我并不完全意识到这一点,但有人告诉我 apache 有一个连接限制或同时运行的脚本有一个限制,我记不清了,我的这个脚本需要运行大约 1 到 3 个小时,它它实际上并没有做任何繁重的事情,它实际上有 90% 的时间都在睡觉。

【问题讨论】:

  • 如果您使用 php 脚本更新内容,请在服务器端运行它(没有浏览器,只需命令行),或者告诉 php 脚本运行并退出(客户端显示空白屏幕并且可以关闭他们的浏览器)。 header('Connection: Close');.
  • 这正是我要找的东西!谢谢!
  • close a connection early的可能重复

标签: php apache timeout delay


【解决方案1】:

如果您正在运行脚本并且不期望任何响应,您可以在服务器计算机的终端中使用php "dir/to/php/script.php" 运行它。

如果脚本的初始化发生在远程,那么您可以让脚本退出,以便脚本继续运行但不会保持连接处于活动状态。 header('Connection: Close');

例子:

<?php

echo "The server is now doing some complex actions in the background..."; //even maybe a redirect instead
header('Connection: Close');
file_put_contents(file_get_contents("largest_file_in_the_world.txt"),"/tmp/test.txt");

?>

【讨论】:

  • 这正是我要找的东西!谢谢!我还有一个与此相关的问题。如果我决定我需要停止脚本,有没有办法可以在不重新启动 apache 的情况下做到这一点?
  • 我建议让script.php 调用在后台运行的 bash 文件。这样,您以后可以杀死 bash 文件而不是杀死 apache。示例:exec('nohup script.sh') --> php 'script.php'.
  • 谢谢!我将对 bash 文件做一些额外的研究^^
【解决方案2】:

此外,仅发送 connection: close 标头是不够的,以下是关闭连接的方式:

ignore_user_abort(true);
header("Connection: close", true);
header("Content-Length: 0", true);
ob_end_flush();
flush();
fastcgi_finish_request();

Source

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多