是否有可能从PHP内部结束PHP进程,从客户角度而不是从技术角度来看,它在客户端看来它停止响应。
这是不解决方案:
<?php
die();
?>
这个想法是有一个正在下载的文件,我不希望它完成。可能的解决方案:
<?php
sleep(1000000000000000); //Or any really large number
?>
缺点是这个过程将在服务器端保持活跃,你可能不希望这种情况发生。
答案 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();
}
?>
正如您的问题所述,缺点是服务器将无限期地运行脚本。我认为,只要您的脚本停止发送数据,浏览器就不会等待。