我有你的帮助:
function send(){
$.get("/site/send.php", function(data){
alert(data);
}
}
在site / send.php中我有:
for($=0;$i++;$i<1000)
sleep(1);
}
echo "OK";
接下来我在我的js文件中:
send();
$("#click").click(function(){
window.stop(); // this cancel XHR
$.get("/site/reset.php", function(data){
alert(data);
}
})
并在reset.php中:
echo "RESET";
window.stop();取消我的XHR,但这仍然无法正常工作。我取消了XHR,但仍然必须等待函数send()中的 sleep(1000)。这不会返回任何内容,但仍会继续执行。只有当睡眠> 1000然后 /site/reset.php 开始执行。
我在这个例子中如何取消PHP函数?
是否可以检查PHP文件检查是否仍然存在XHR?
答案 0 :(得分:2)
以下任何一种情况都可行:
ignore_user_abort(false);
for ($=0;$i++;$i<1000) {
if (connection_aborted()) break;
for ($=0;$i++;$i<1000) {
if (connection_status() != CONNECTION_NORMAL) break;
答案 1 :(得分:1)
如果你在php服务器上有root权限,如果你在linux上,你可以使用`:
执行一些bash命令echo `ps -A`;
获取机器上所有正在运行的进程的列表,然后如果您知道用户apache用于执行脚本,那么您可以
echo ps -u user
;
确定正确的PID后,您可以使用以下命令将其终止:
echo `kill PID`;
离
echo `kill 1023`;
或
//我不知道这是否正常
eval('echo kill '.$_GET['PID'].'
;');
所有这些都是在不同的php脚本中执行的,完全是为了在命令中杀死其他脚本。
您可以使用AJAX从上述脚本中请求此类作业。
另外你可以让php文件写入客户端它自己的PID(google用于写入功能,它看起来非常像c),然后javascript可以直接将该PID发送到该杀手脚本以命令执行停止对于某些剧本。
编辑1:
您可以使用此功能获取正在运行的脚本PID:
getmypid();
您可以将其保存在文件中,或者更好地保存在会话变量中
$_SESSION[__FILE__] = getmypid();
要阻止文件运行,你可以像这样调用一个页面(killer.php):
<?php
// security verifications, etc
/*
*/
session_start();
$f = $_SESSION[$_GET['file']];
echo `kill $f`;
?>
虽然很危险。
我不知道要执行的确切命令,或者您是否拥有这种控件,或者即使您使用的是Linux系统。如果你愿意,我可以稍微研究一下。
致以最诚挚的问候,
答案 2 :(得分:0)
$("#click").click(function(){ //window.stop(); return false;