0

このコードを含むcall.phpというページがあります

    <script src="http://localhost/js/jquery.js"></script>   
    <script>
        $(document).ready(function()
        {
            $.post("exe.php",
            { 
                a: 'a'
            },
            function(data)
            {
                alert(data);
            });
        });
    </script>   
///close tabs after onload

そしてexe.phpにはこのコードがあります

<?php

    set_time_limit(60);
    ignore_user_abort(true);
    sleep(20);

    $file = fopen("test.txt","w");
?>

すぐにタブを閉じた後でもphpの実行を続ける必要がありますWAMPを使用してlocalhostで正常に動作しますが、私のホストでは動作せず、おそらくlocalhostで10〜14秒後に停止し、サーバーはignore_user_abort(true)がオフです質問は:これを回す機能ONで解決?そして、この機能がオフの場合でもlocalhostで機能する理由

私の実行には約 30 秒かかります。

編集

私はこのようなことを試しました

<?php
    ignore_user_abort(true);
function shutdown()
{
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/2.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/4.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/6.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/8.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/10.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/12.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/14.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/16.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/18.txt',"w");
    sleep(2);
    $file = fopen($_SERVER["DOCUMENT_ROOT"].'/logs/20.txt',"w");
}
//register_shutdown_function('shutdown');
shutdown();
?>

タブを開き、このコードを完全にロードした直後に閉じた場合、2.txt ... 10.txt が作成されたため、10 秒後にスクリプトをシャットダウンするオプションがあります。

4

3 に答える 3

1

Windows では、PHP は出力を特定のバイト数にバッファリングします (最後にテストしたときは 2048 だったと思います)。PHP がそのバッファをフラッシュしようとしない限り、閉じられた接続を検出しないため、スクリプトを中止しません。Linux では、バッファの動作が異なり、最も重要なことは無視されませんflush()

ignore_user_abort(true)あなたの電話が「機能しない」理由については(この種の文は適切なエラー レポートではなく、適切な回答が得られない可能性があります)、私にはおそらくわかりません。

  • ただし、register_shutdown_function代わりに使用することもできます。

  • ファイルを使用して最大実行時間を増やすこともでき.htaccessます。構文は非常に簡単です

    php_flag max_execution_time 120
    
  • Web サーバー自体にも、スクリプトを中止する可能性のある実行時間制限がある場合があります。たとえば、 TimeOutを参照してください。

于 2013-03-05T13:13:10.240 に答える
0

機能を使用したいignore_user_abort

意味:

クライアントの切断でスクリプトの実行を中止するかどうかを設定します

警告:これには注意してください。無限ループを強制終了する唯一の方法は、設定によっては Web サーバー/PHP を強制終了することです。

于 2013-03-05T12:53:03.327 に答える
0

を呼び出す前にignore_user_abort、およびを呼び出す必要があります。set_time_limitsleep

于 2013-03-05T12:55:23.320 に答える