2

データベースのバックアップを実行し、特定のhtml出力なしで圧縮するphpスクリプトがあります。このスクリプトには、db に保存された指定の遅延が発生する前に実行を回避するための時間チェックが含まれています。問題は、Web サーバーがサポートしていないため、サーバーの cronjob タスクを使用できないことです。

したがって、訪問ごとにphpスクリプトを呼び出すjavascript関数を作成します(はい、私の目的には十分です)が、プロセスを終了するのに約1分かかるため、ページにアクセスするユーザーを遅らせることはありません。応答を待たずにスクリプトを実行することはできますか? ユーザーセッションが終了してもphpスクリプトは実行し続けることができますか?

私は次のようなものだと思います: http://drupal.org/project/poormanscron

前もって感謝します

編集: 解決策 1 (php のみ): これを私の出力の前に置く:

public static function cronjob() {
        ignore_user_abort(true); // optional
        session_write_close();//close session file on server side to avoid blocking other requests
        header("Content-Encoding: none");//send header to avoid the browser side to take content as gzip format
        header("Content-Length: ".ob_get_length());//send length header
        header("Connection: close");//or redirect to some url: header('Location: http://www.google.com'); 
        ob_end_flush();flush();//really send content, can't change the order:1.ob buffer to normal buffer, 2.normal buffer to output
        //fastcgi_finish_request(); // important when using php-fpm!
        // Do processing here 
        sleep(5);
        require_once("./cron_job.php");
        exit();
}
        ob_start(); // will be closed in backup function
        register_shutdown_function('cronjob');

解決策 2 (javascript を使用):

1) cronjobs を含むファイルを作成します

2) この JavaScript コードを HTML に追加します。

<script type="text/javascript">
    // cron job
    $.get('./cron_job.php');
</script>

これらのメソッドは、ユーザーのリクエスト時間には影響しません;)

みんなありがとう

4

2 に答える 2

0

呼び出す PHP スクリプトで、接続の終了をシミュレートできます。つまり、ユーザーに任意の出力を送信してから、ユーザーの接続を強制的に閉じても、サーバー側で実行し続けることができます。

次の記事を参照してください: http://php.net/manual/en/features.connection-handling.php

コメントにいくつかの例があります。

于 2013-01-09T20:13:06.250 に答える
0

PHP 側では、Connection HTTP ヘッダーを使用して、さらなるデータを待たないようにブラウザーに指示できます。詳細については 、 https://www.zulius.com/how-to/close-browser-connection-continue-execution/を参照してください。

于 2013-01-09T20:15:44.943 に答える