2013-06-26 3 views
1

У меня есть PHP, работающий на Ubuntu с Apache. У меня есть простой скрипт, который просто выполняет запрос, чтобы вытащить кучу широт, пар долготы из базы данных, хранит их в массиве, а эхо - из JSON.PHP-скрипт с использованием более 512 МБ при обработке только нескольких массивов MB

Массивность составляет около 40 000 элементов. Запись в массив выглядит следующим образом

{"lat":"41.951234015","lng":"-87.5317308"}. 

Этот запрос к БД MySQL через MSSQL БД с помощью связанного сервера, если это имеет отношение вообще.

PHP заканчивается на память, если я делаю ini_set('memory_limit', '512M'), но удался, если я сделаю ini_set('memory_limit', '1024M').

Почему этот сценарий занимает столько памяти? Массив из 40 000 элементов, каждый из которых содержит не более 20 символов, должен занимать всего несколько МБ памяти. Я не делаю ЛЮБОЙ обработки массива.

EDIT: Вот мой код

mssql_query("SET ANSI_WARNINGS ON"); 
mssql_query("SET ANSI_NULLS ON"); 

ini_set('memory_limit', '1024M'); 
$cbsa='16980'; 
if(isset($_POST['cbsa'])){ 
    $cbsa = sanitize($_POST['cbsa']); 
} 

$zipstrings = get_zipstring($cbsa); //external function that returns two lists of about 500 zipcodes each 

$lat_lng = array(); 
foreach($zipstrings as $zipstring){ 
    $result = mssql_query("select * from openquery(database, 'SELECT lat, lng from coordinates 
    JOIN with other table...."); 
    while($row = mssql_fetch_array($result, MSSQL_ASSOC)){ 
     $lat_lng[] = array("lat"=>$row['lat'], "lng"=>$row['lng']); **CRASHES HERE** 
    } 
} 
echo json_encode(array("coords"=>$lat_lng, "error"=>mssql_get_last_message())); 
+0

Мы не можем искать утечки памяти в вашем коде кодом – user20232359723568423357842364

+0

... –

+0

@ user20232359723568423357842364 Почему бы вам не изменить свое имя пользователя LOL. Скотт W: Можете ли вы разместить свой код? У вас может быть петля, застрявшая где-то .. 40k элементов этого размера составляет всего 2 МБ. –

ответ

0

Сколько данных делает это возвращение запроса? У вас есть выбор * из opendata, если у него очень большие столбцы, и многие из них будут причиной. Ваш код выглядит нормально для меня

+0

Я выбираю только два столбца (lat, lng). Выбор * заключается в том, что я должен запросить базу данных MYSQL через MSSQL, поэтому запрос в основном говорит «select * from (select lat, lng)» –

+0

Почему абстракция? Почему бы не начать? – exussum

+0

Из-за разрешений и проблем безопасности из-под моего контроля я не могу напрямую обращаться к базе данных MySQL, но должен проходить через MSSQL и «связанный сервер». –

 Смежные вопросы

  • Нет связанных вопросов^_^