PHP Curl 'Ölümcül hata: İzin bellek boyutu' büyük veri kümeleri için

0 Cevap php

Ben dahili bellek ayarlamak için seçenek hakkında bilmek

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

Ama verilerini sorgulamak için daha iyi bir yaklaşım olup olmadığını bilmek istedi?

I have a WHILE LOOP that checks to see if I need to query for another 1000 records. using the offset as the starting record number and the limit as the returned records, I search for all records matching my data request. I hit about 100K in records before I get the error.

Error: Şimdi test sırasında ben 'İzin bellek boyutu ... Ölümcül hata' almak bulundu. Ben bellekte artış sağlamak için yukarıdaki ini_set () tarafından okudum ama ben sadece daha iyi kod olabilir olmadığını bilmek istedi?

Ben while döngüsü aşağıdaki kodu çalıştırmak her zaman, bellek kullanımı çok büyük büyür. Ben unset bile ($ kıvırın). Ben bir sonraki cURL önce sorgu sonuçlarını çözümlenen sonra ben $ sonuç unset $ ve değişkenleri kıvrılacağınız eğer azaltılabilir olabileceğini düşünüyorum.

function getRequest($url,$user,$pwd) {

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_VERBOSE, 1);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERPWD, "$user:$pwd");
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($curl, CURLOPT_ENCODING, '');
    curl_setopt($curl, CURLOPT_URL, $url);

    $result = curl_exec($curl);

    $httpResponseCode = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);

    switch ($httpResponseCode) {
        case 500:
            // Send problem email
            break;
        case 200:
            // GET was good
            break;
        default:
            // Send problem email
            break;
    }    
    curl_close($curl);
    return $result;
} 

WHILE LOOP (Slim versiyon)

while($queryFlag) { // $queryFlag is TRUE

        // Check if we have more records to query, if not set $queryFlag to FALSE

        // Build cURL URL

        echo "Before Call Memory Usage: ".memory_get_usage()."\n";
        $resultXML  = getRequest($query,$user,$pass);
        echo "After Call Memory Usage: ".memory_get_usage()."\n";

        $results        = new ParseXMLConfig((string)$resultXML); // This is basically a class for $this->xml = simplexml_load_string($xml);

        // Loop through results and keep what  I'm looking for
        foreach($results as $resultsKey => $resultsData) {
            if(preg_match('|^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$|i', $resultsData)) {
                $resultsArr["$resultsData"] = $resultsData;
            }
        }

    }

Bazı bellek numaralar

  • 1819736: Çağrı Bellek Kullanımı önce
  • 2285344: Çağrı Bellek Kullanımı Sonrası
  • Ben ihtiyacım verileri tutmak
  • Ben gerekmez veri dökümü
  • Sonraki döngü tekrarında
  • 2084128: Çağrı Bellek Kullanımı önce
  • 2574952: Çağrı Bellek Kullanımı Sonrası

0 Cevap