4

さまざまなサイトをトラバースしてデータマイニングするスパイダーを構築しています。

各ページを個別に取得する必要があるため、これには非常に長い時間がかかる可能性があります(おそらく100ページ)。set_time_limitを1ページあたり2分に設定しましたが、apacheは5分後にスクリプトを強制終了するようです。

これは、この時間制限のないcronまたは同様のものから実行されるため、通常は問題になりません。ただし、管理者がHTTPインターフェイスを介して手動でフェッチを開始できるようにすることも必要です。

apacheが完全に存続することは重要ではありません。私は、AJAXを使用してフェッチをトリガーし、AJAXで時々チェックバックします。

私の問題は、PHPスクリプトを呼び出すスクリプトが終了したときにフェッチを終了せずに、PHPスクリプト内からフェッチを開始する方法です。

たぶん私はsystem('script.php&')を使うことができますが、それがうまくいくかどうかはわかりません。他のアイデアはありますか?

4

2 に答える 2

6
    $cmd = "php myscript.php $params > /dev/null 2>/dev/null &";

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response
    shell_exec($cmd);

これにより、すべてのSTDOUTとSTDERRが/ dev / nullに送信され、スクリプトが実行され続けます。'親'スクリプトがmyscript.phpの前に終了した場合でも、myscript.phpは実行を終了します。

于 2010-03-13T21:16:05.683 に答える
1

execを使用したくない場合は、php組み込み関数を使用できます。

ignore_user_abort(true);

これにより、ブラウザとサーバー間の接続が切断された場合でも、スクリプトを再開するように指示されます;)

于 2010-11-15T07:54:25.940 に答える