我在带有 Apache 的 Ubuntu 上运行 PHP。我有一个简单的脚本,它简单地执行一个查询以从数据库中提取一堆纬度、经度对,将它们存储到一个数组中,然后回显 JSON。
该数组大约有 40,000 个元素。数组中的条目如下所示
{"lat":"41.951234015","lng":"-87.5317308"}.
查询是通过使用链接服务器的 MSSQL DB 到 MySQL DB,如果这完全相关的话。
如果我这样做, PHP 会耗尽内存ini_set('memory_limit', '512M')
,但如果我这样做,就会成功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()));