0

xmlファイルを処理し、データベースに応じていくつかのデータを挿入する必要があります。XMLファイルには10000行近くが含まれており、データベースに挿入する行が数千行になる可能性があるため、スクリプトがを超えるのではないかと心配していますmax execution time

これを防ぐために、プロセス全体を小さなステップに分割し、スクリプトが数秒ごとにページを更新し、実行中の処理を続行するスクリプトを見てきました。

私はそれがどのように行われるのだろうか?

4

3 に答える 3

1

バッファを使用する別の解決策は次のとおりです。

set_time_limit(0);
header('Content-type: text/html; charset=utf-8');

echo 'Starting... <br />';
for ($i = 0; $i < 10; $i++) {   
    echo $i . '<br />';

    ob_flush(); 
    flush(); 

    sleep(1);
}
echo 'Finished. <br />';

念のためにset_time_limit(0)(タイムアウトを「無限」に設定)しました。これheader('Content-type: text/html; charset=utf-8')が機能するために必要です。これはFirefoxとChromeで機能しましたが、IEでは機能しませんでした。IEで動作するようになったら更新します。

更新1:コマンドライン(CLI)からスクリプトを呼び出すこともできます。

  • Windows(cmd.exe):php.exe -f \path\to\file.php
  • Unix(ターミナル):php -f /path/to/file.php

このような場合、バッファは必要ありません(ブラウザがない場合はエラーがスローされます)。どちらの場合も、PHPを介してプロセスを開始できexecますが、ブラウザに出力されないため、ログをファイルに書き込む必要があります。

于 2012-11-20T13:32:32.623 に答える
0

以前、インデックス変数を継続してphpページを再呼び出しすることでこれに成功しました。

手順は次のとおりです。

1. start the script with no querystring. it will insert 1000 rows for this time. 
   (insert_bulk.php)
2. recall the script with data start index 1001.
   (insert_bulk.php?start=1001)
3. when the data finishes, stop recalling the script. 

これにより、最大実行時間のオーバーフローが防止され、現在処理中の部分がわかります。

于 2012-11-20T13:12:22.713 に答える
-2

スクリプトで sleep() を試すことができます。実行時間としてカウントされないようです(Linuxサーバーのみ

于 2012-11-20T13:07:31.077 に答える