我有以下非常简单的测试
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解决方案,它将使用更少的内存.
原文地址:https://www.jb51.cc/php/136668.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。