我有以下非常简单的测试
PHP代码,它提取数据并将其放入JSON格式的文本中.
我收到以下错误..
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1979603 bytes) in /var/www/test.PHP on line 33
其中第33行是json_encode()行.
有没有办法让这个更有效率? PHP.ini已经设置为最大32M,因此从8M标准大小!
<?PHP require('../../admin/db_login.PHP'); $db=MysqL_connect($host,$username,$password) or die('Could not connect'); MysqL_select_db($db_name,$db) or die(''); $result = MysqL_query("SELECT * from listinfo") or die('Could not query'); $json = array(); if(MysqL_num_rows($result)){ $row=MysqL_fetch_assoc($result); while($row=MysqL_fetch_row($result)){ // cast results to specific data types $test_data[]=$row; } $json['testData']=$test_data; } MysqL_close($db); echo json_encode($json); ?>
您可能正在编码一个非常大的数据集.您可以一次编码每一行,而不是在一个大操作中对其进行编码.
<?PHP require('../../admin/db_login.PHP'); $db=MysqL_connect($host,$password) or die('Could not connect'); MysqL_select_db($db_name,$db) or die(''); $result = MysqL_query("SELECT * from listinfo") or die('Could not query'); if(MysqL_num_rows($result)){ echo '{"testData":['; $first = true; $row=MysqL_fetch_assoc($result); while($row=MysqL_fetch_row($result)){ // cast results to specific data types if($first) { $first = false; } else { echo ','; } echo json_encode($row); } echo ']}'; } else { echo '[]'; } MysqL_close($db);
这样,每次调用json_encode()只会编码一个小数组而不是一个大数组.最终结果是一样的.这是IMO解决方案,它将使用更少的内存.