2011-11-10 11 views
1

データベースからデータを選択し、結果をループし、結果の行ごとに別のスクリプトを実行する、毎日スクリプトを実行します。 2番目のスクリプトは、より多くのクエリを実行し、データからXMLファイルを作成します。時には、大量のデータが存在することがあります。Cronjobとスクリプトタイムアウト/メモリクエリを実行しているPHP

//RUN SCRIPT DAILY TO GET ALL CATEGORY AND PRODUCT XML FOR STORES 
set_time_limit(0);  
$select= "SELECT * FROM bookstores" ; 
$run = mysql_query($select); 
while($row = mysql_fetch_array($run)){ 
    //run 2nd script here but how? 
} 

は、I 2つの質問があります

1)whileループで第二スクリプトを実行するための最良の方法は何ですか? 2行目でスクリプトを再実行する前に、最初の行の2番目のスクリプトを完了する必要がありますか、それともすべて同じように実行しますか?

2)私は2番目のスクリプトを実行すると、あまりにも多くの結果がある場合を除き、それは、その場合には、私は以下のエラーを取得し、ほとんどの作品:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /var/www/web/classes/class.Products.inc.php on line 90

ウィル実行しているかから、この停止スクリプト1はそれを意志次の行に移動してスクリプトを再実行しますか?注意両方のスクリプトでset_time_limit()関数を使用しました。

クラッシュせずに最高の成果をあげるための助けとアドバイスについて、多くの方に感謝します。

+0

ちょっと考えましたが、おそらく2番目のスクリプトのコードを組み込むと、可能であれば、最適化を指摘して助けてくれるかもしれません。 –

答えて

1

メモリサイズのエラーが発生した場合は、次のコマンドを使用します。

ini_set("memory_limit","256M"); 

//サーバーのRAMサイズに基づいてメモリの上限を増やすことができます。

提案:

  1. 制限に選択クエリを使用してください。例えば1000または5000の制限ごとに、sleepコマンドを使用します。

私は願っていますので、上記のことをお勧めします。

+0

ありがとう、しかし私は本当にすべての結果を得る必要がありますが、メモリ制限を増やす以外の方法はありませんか? 500メガバイトでそのalreay。誰もが第一のポイントを助けることができますか?私はまだ2番目のスクリプトを正しく実行する方法がわかりません... – LeeTee

+0

メモリの容量を増やせない場合は、書店のレコードを取り出してCSV形式で保存してください。次に、CSVファイルを使用して2番目のスクリプトを実行します。 – Raja

+0

ありがとうございますが、まだ第1スクリプトから第2スクリプトを実行するにはどうすればよいですか?私はcURLなどを使用していますか? – LeeTee

関連する問題