PHP: Infinity loop ve Zaman Sınırı!

3 Cevap php

Ben bunu bir kimlik vererek verileri getirir kodu bir parça var. Örneğin ben o 1230 bir kimlik verirseniz, kodu web sitesinde (harici) den 1.230 kimliği olan bir makale veri getirir ve bir DB takın.

Now, the problem is that I need to fetch all the articles, lets say from ID 00001 to 99999. If a do a 'for' loop, after 60 seconds the PHP internal time limit stops the loop. If a use some kind of header("Location: code.php?id=00001") or header("Location: code.php?id=".$ID) and increase $ID++ and then redirect to the same page the browser stops me because of the infinite loop or redirection problem.

Lütfen YARDIM!

3 Cevap

Sunucu size izin verirse, bu muhtemelen en iyi çözümdür: sadece bu komut dosyası için zaman sınırını kaldırın.

set_time_limit(0);

Peki bu yapabileceğiniz çeşitli yollar gidecekseniz.

Bunu yapmanın en iyi yolu, kazıyıcı, her X dakikada yürütmek için bir cron kurmaktır.

Bu ne id sizin şu anda takip etmek gerekir sed ediliyor.

Eğer bir dosyaya yazmak için bir işlev kurmak yüzden eğer şu şekilde yapabilirsiniz

-

Open file (get current id) Start Parser at the id for 60 times Insert the data Open the file and update it with the new id close files and exit.

Bu birkaç saat alan üzerinde çalışır veya ancak uzun sürer.

  1. Komut dosyası daha sonra yerine dosyaya id yazma oturumları kullanabilir bitirir senin elle yapıyor ve sizin her şey orada oturan ve ferahlatıcı olduğunu

    `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. 120 saniye veya tercih ettiğiniz için set_time_limit (120) kullanarak 60 saniye uzatabilirsiniz sunucuları kaynaklarını overide için senin senin istekli eğer.

Lütfen sunucu komut dosyası zaman sınırı değiştirmek izin vermez, sadece script sizin dizisi son eklenen yazı için veritabanı kontrol ve oradan başlamak zorunda.

Başka bir yaklaşım: Use Javascript "window.location =" yerine yönlendirmek için bir başlığı.