v2.5.2
Giriş yap

Foreach İle XML Okumanın Parçalanması ve Timeout Hatası

mcfearcombat
265 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhabalar,

XML okuma yapıp veritabanına kayıt yaptığım bir kod dosyam mevcut.

Foreach döngüsü ile xml'deki tüm itemleri tek tek okumaktayım ve foreach döngüm şu şekilde;


foreach($xmlurl as $key => $xml){

// işlemler

}

bu şekilde tüm itemleri tek tek okuyup işlem yapıyorum ancak xml'deki item sayısı arttığından dolayı timeout hatası almaktayım. Test döngü sayısını alttaki gibi sınırladım.


foreach($xmlurl as $key => $xml){


    
    $counter++;

    
    if ($counter >= 1000) {
        break;
    }
    
    // işlemler 
    
    }
    

Burada tespitim şudur; 1000 item okumaya kadar sorun yaşamıyorum ama 1200-1300 e çıkardığımda timeout hatası alıyorum. Hosting firması max_execution_time 'ı 3000 'e çıakrdı ancak çözüm olmadı.

Çözüm olarak şunu yapmak istiyorum. Foreach döngüsü ilk 1000 item'i okuduktan sonra tekrar kalan 1000 itemi okumasını bu sayede timeout 'u atlatacağımı düşünüyorum.

Bunu nasıl yapabilirim ya da farklı çözüm önerileriniz var ise aydınlatabilir misiniz ?

Aldığım Hata :

Request Timeout
This request takes too long to process, it is timed out by the server. If it should not be timed out, please contact administrator of this web site to increase 'Connection Timeout'.

recepkaramanli61
334 gün önce

Çok verimli olmamakla beraber php flush() fonksiyonunu deneyebilirsin. https://www.php.net/manual/en/function.flush.php
Veya belirli bir item'i database aktardıktan sonra devam edeceği satırı url'e parametre olarak verip sayfayı yönlendirirsin, bu şekilde her seferinde sunucudaki 90 sn işlem limitini sıfırlamış olursun. aynı şekilde database de de işlem limitine takılırsan her döngüdeki işlem sayısını azaltarak devam edebilirsin.