я знаю про возможность установки внутренней памяти
ini_set("memory_limit","30M");
Но я хотел знать, есть ли лучший подход для запроса данных?
У меня есть WHILE LOOP, который проверяет, нужно ли мне запросить еще 1000 записей.
используя смещение в качестве номера начальной записи и ограничение в качестве возвращаемых записей, я ищу все записи, соответствующие моему запросу данных. Я получил около 100 КБ в записях, прежде чем я получил ошибку.
Теперь во время тестирования я обнаружил, что я получаю ошибку «Неустранимая ошибка: допустимый объем памяти ...». Я прочитал, установив вышеупомянутый ini_set (), чтобы учесть увеличение памяти, но я хотел знать, могу ли я просто лучше его кодировать?
Каждый раз, когда я выполняю приведенный ниже код в WHILE LOOP, использование памяти становится очень большим. Даже если я сбросил ($ curl). Я думаю, что его можно было бы уменьшить, если бы я мог сбросить переменные $ result и $ curl после того, как проанализировал результаты до следующего запроса cURL.
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 (Тонкая версия)
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;
}
}
}
Некоторые номера памяти
- До использования памяти вызовов: 1819736
- Использование памяти после вызова: 2285344
- сохраняйте нужные мне данные
- сбросить данные, которые мне не нужны
- Следующая итерация LOOP
- До использования памяти звонка: 2084128
- Использование памяти после вызова: 2574952