我有PHP在Apache上運行的PHP。我有一個簡單的腳本,簡單地做一個查詢,從數據庫中拉出一堆緯度,經度對,將它們存儲到一個數組中,然後echo出JSON。只處理幾MB的陣列時使用超過512MB的PHP腳本
該陣列出來約有40,000個元素。在陣列中的一個條目看起來像這樣
{"lat":"41.951234015","lng":"-87.5317308"}.
查詢是通過一個MSSQL數據庫MySQL的數據庫使用鏈接的服務器,如果是相關的。
如果我做ini_set('memory_limit', '512M')
PHP耗盡內存,但如果我做ini_set('memory_limit', '1024M')
成功。
爲什麼這個腳本佔用了太多內存?一個40,000個元素的數組,每個元素不超過20個字符,應該只佔用幾MB的內存。我沒有做陣列上的任何處理。
編輯:這裏是我的代碼
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()));
我們不能在你的代碼中查找內存泄漏代碼 – user20232359723568423357842364
發佈你的代碼... –
@ user20232359723568423357842364你爲什麼不改變你的用戶名LOL。 Scott W:你能發佈你的代碼嗎?你可能有一個循環卡在某個地方..該大小的4萬個元素只有2MB。 –