1

ID を指定してデータをフェッチするコードがあります。たとえば、ID 1230 を指定すると、Web サイト (外部) から ID 1230 の記事データを取得して DB に挿入します。

問題は、ID 00001 から 99999 までのすべての記事を取得する必要があることです。「for」ループを実行すると、60 秒後に PHP の内部時間制限によってループが停止します。ある種のheader("Location: code.php?id=00001")orheader("Location: code.php?id=".$ID)を使用して $ID++ を増やしてから同じページにリダイレクトすると、無限ループまたはリダイレクトの問題のためにブラウザーが停止します。

助けてください!

4

3 に答える 3

1

サーバーが許可している場合、これがおそらく最善の解決策です。このスクリプトの時間制限を削除するだけです。

set_time_limit(0);
于 2010-05-29T23:48:53.057 に答える
0

これを行うにはいくつかの方法があります。

これを行う最善の方法は、X 分ごとにスクレイパーを実行するように cron を設定することです。

これが sed であるため、現在の ID を追跡する必要があります。

したがって、ファイルに書き込む関数を設定すると、次の方法で実行できます

--

ファイルを開く (現在の ID を取得する) その ID でパーサーを 60 回開始する データを挿入する ファイルを開いて新しい ID で更新する ファイルを閉じて終了する。

これは、数時間または時間がかかるスペースで実行されます。

  1. これを手動で実行し、そこに座ってスクリプトが終了するたびに更新する場合は、IDをファイルに書き込む代わりにセッションを使用できます

    `session_start();
    $id = (isset($_SESSION['position']) ? $_SESSION['position'] : 0);
    for($i=$id;$<=9999;$i++)
    {
       //FetchItem($id); //Or whatever function it is you use!
       //Update the id for next run.
       $_SESSION['position'] = $id;
    }`
    
  2. サーバーのリソースをオーバーライドしたい場合は、set_time_limit(120) を 120 秒または任意に使用して 60 秒を延長できます。

于 2010-05-29T23:55:56.257 に答える
0

サーバーがスクリプトの時間制限を変更できない場合は、スクリプトで、シーケンスの最後に挿入された記事をデータベースでチェックし、そこから開始するようにします。

別のアプローチ: ヘッダーの代わりに Javascript "window.location = " を使用してリダイレクトします。

于 2010-05-29T23:56:50.863 に答える