無制限の「魔法」を使用するには、何らかのループが必要です。
while (1==1) {
if ($flag){
break;
}
}
、ユーザーが$ _GETや$ _POSTでそのフラグを埋めてみましょう:ループの内部のように、旗を置きます。
PS:これらのループルーチンを避けることを強くお勧めします。スクリプトであるためPHPがうまく動作しません。ブラウザを過負荷で壊す危険があります。 Btw、ちょうどあなたがPHPに頼っている場合、いくつかの提出でページをリフレッシュするには、スクリプトの実行を中断する(ページがそれまでに壊れていない場合)。 Webへの連続的なルーチンを使用するにはjavascriptを使用します(何かを保存したり、何らかの情報を持ってAJAXを追加する必要がある場合)。
編集:あなたのルーチン/計算から各プロセスを検証するコールバック付きのAJAXを使用しています(好きなときは、最後の計算プロセスを保存できるため、キャッシュを使用して次の計算時間を改善します。このアルゴリズムはとても重いです)、またはいくつかのボタンまたはスタッフにユーザーがクリックするときだけのAJAX呼び出しを停止します。あなたのPHPファイルで
var strongcalcs = $.ajax({
type: 'POST',
url: 'magic.php',
success: function(result){}
});
:
:
<?php
// magic that takes time
?>
は、その後、あなたがリクエストを中止することができます
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main</title>
</head>
<body>
<button class="button">Cancel PHP execution</button>
</body>
</html>
<script>
$('button').on('click', function(){
strongcalcs.abort();
});
</script>
FINAL:
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main</title>
</head>
<body>
<button id="cancel" class="button">Cancel PHP execution</button>
<script language="javascript">
var strongcalcs = $.ajax({
type: 'POST',
url: 'execute.php',
success: function(result){
alert(result);
},
error: function() {
alert("ABORT!");
}
});
$('#cancel').click(function() {
strongcalcs.abort();
});
</script>
</body>
</html>
あなたがいない問題バッファをフラッシュすることができます。 @ Don'tPanic – KALALEX
真実、良い点。 –
'php.ini'で' ignore_user_abort'設定が有効になっていない限り、ユーザがウィンドウを閉じるとスクリプトは中止されます。私は、ボタン押しでそれを行う方法はないと思う。 – Barmar