2010-12-14 14 views
0

PHPを使用して大きなgzファイルを処理しています(gzからmysqlにデータを転送しています)。 .gzファイルあたり約10分かかります。 処理する.gzファイルがたくさんあります。ジョブ終了時にPHPスクリプトをスケジュールする方法

PHPが1つのファイルで終了した後、PHPスクリプトを手動で変更して別の.gzファイルを選択し、手動でスクリプトを再度実行する必要があります。

次のファイルを処理するために自動的に次のジョブを実行します。以来、

for ($i = 1 ; $i >= 5; $i++) 
{ 
    $file = gzfile($i.'.gz') 
    ...gz content processing... 
} 

しかし: - GZファイルが1、2、3、4、5 ... として命名され、私は単純に、この(5プロセスファイル1)のようなものであることをループを作ることができますgzファイルが本当に大きい場合、私はそれを行うことはできません。なぜなら、このループを使用すると、PHPは単一のスクリプトジョブとして複数の大きなgzファイルを実行するからです。 (メモリが大量にかかる)

私がしたいのは、PHPが1つのジョブで終了した後で、次のファイルを処理する新しいジョブが必要なことです。

多分そのはこのようなものになるだろう:

$file = gzfile($_GET['filename'].'.gz') 
    ...gz content processing... 

は、あなたが何をすべき

答えて

3

をクリア取得するためにキューを室温

  • 待ちます。このように:

    <?php 
    foreach (glob(...) as $filename) { 
        // your script code here 
        unset($thisVar, $thatVar, ...); 
    } 
    ?> 
    
  • +0

    ありがとうございます、方法は@ ern0メソッドに似ています。私はあなたからglob()関数を学びました。それは私の役に立つことができます。おかげで – bbnn

    0

    • スケジュールx分ごと
    • あなたのPHPスクリプトを実行するcronジョブですありがとうございました
    • スクリプトが実行されたら、ロックファイルが存在していない場合はそれを作成し、次の未処理のgzファイルの処理を開始しますあなたがunset()を使用して処理し、空きの後にすべてのメモリをクリーンアップする場合は、あなたは、単にforeach (glob(...) as $filename)ループ内で、スクリプト全体を包むことができ
    +0

    cronのプログラムを書くことはできますか?私はcronが時間間隔を使ってジョブをスケジュールするだけだと思った。どのようにスクリプトを書くことができますか? – bbnn

    +0

    シングルサイクルのセマフォー*で代わりにcronジョブを設定するのは、非常に奇妙で効果がありません。 – ern0

    +0

    @ ern0:あなたの声明に精通してください。 –

    0

    シェルスクリプトから引数を指定してPHPスクリプトを呼び出す必要があります。ここで、PHPでコマンドラインパラメータを使用する方法を教えてくださいhttp://php.net/manual/en/features.commandline.php

    または、今は試すことはできませんが、gzipの処理後に設定を解除する($ファイル)可能性があります。

    for ($i = 1 ; $i >= 5; $i++) 
    { 
        $file = gzfile($i.'.gz') 
        ...gz content processing... 
        unset($file); 
    } 
    
    +0

    私は現在の処理が完了したらこれを試してみます – bbnn

    関連する問題