如何在加载时使页面停止响应? (PHP)

时间:2010-07-03 11:45:07

标签: php

是否有可能从PHP内部结束PHP进程,从客户角度而不是从技术角度来看,它在客户端看来它停止响应。

这是解决方案:

<?php
die();
?>

这个想法是有一个正在下载的文件,我不希望它完成。可能的解决方案:

<?php
sleep(1000000000000000); //Or any really large number
?>

缺点是这个过程将在服务器端保持活跃,你可能不希望这种情况发生。

6 个答案:

答案 0 :(得分:6)

简短回答否。

我发现测试系统处理断开连接的最佳方法是从插座中物理拔出网线。

答案 1 :(得分:1)

问题“是否有可能从PHP中结束PHP进程,使其在客户端看起来它停止响应”答案是否定的。您将无法在PHP中执行此操作,我也无法看到您如何从PHP外部执行此操作。

答案 2 :(得分:0)

也许exit();

答案 3 :(得分:0)

除了击落评论中所述的运行过程(这太可怕了!),我想到的另一个想法 - 我假设这是出于测试目的并且您可以完全控制服务器 - 是执行shell用于激活防火墙,关闭网络适配器或执行其他操作以立即停止网络活动的脚本。

答案 4 :(得分:0)

如果您有权访问它并且您在* nix系统上并且具有足够的权限,则可以尝试使用对tcpkill的系统调用来终止连接。获取用户的IP地址和端口(传入的请求将在端口80上,但用户将位于唯一可识别的端口上)然后终止连接。像这样:

<?php

$remotehost = $_SERVER['REMOTE_ADDR'];
$remoteport = $_SERVER['REMOTE_PORT'];

$result = system("tcpkill host $remotehost port $remoteport");

echo($result ? "tcpkill worked" : "tcpkill didn't work");

?>

你可以用iptables做同样的事情,但我真的很担心这样做。没有比破坏防火墙更好的软管方式了。

答案 5 :(得分:0)

我不知道客户端会等多久但这会挂起很长一段时间。它不断发送内容供浏览器解析,但浏览器没有任何东西可以呈现。

<?php
    set_time_limit(0);

    while(true)
    {
        echo '<div></div>';
        flush();
    }
?>

正如您的问题所述,缺点是服务器将无限期地运行脚本。我认为,只要您的脚本停止发送数据,浏览器就不会等待。