我有以下非常简单的测试PHP代码,它提取数据并将其放入JSON格式的文本中.
我收到以下错误..
致命错误:第33行/var/www/test.php中允许的内存大小为33554432字节(尝试分配1979603字节)
其中第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);
?>
Run Code Online (Sandbox Code Playgroud)
And*_*ore 18
您可能正在编码一个非常大的数据集.您可以对每行进行编码,一次编码一行,而不是在一次大操作中对其进行编码.
<?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');
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);
Run Code Online (Sandbox Code Playgroud)
这样,每次调用json_encode()只编码一个小数组而不是一个大数组.最终结果是一样的.这是IMO解决方案,它将使用更少的内存.
Mar*_*ker 10
停止复制您的数据数组
$json = array();
if(mysql_num_rows($result)){
$row=mysql_fetch_assoc($result);
while($row=mysql_fetch_row($result)){
// cast results to specific data types
$json['testData'][]=$row;
}
}
Run Code Online (Sandbox Code Playgroud)
这将有助于减少您的内存使用量
使用这个:
$result = mysql_query("SELECT * FROM listinfo");
$json = array();
$total_records = mysql_num_rows($result);
if($total_records > 0){
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$json[] = $row;
}
}
echo json_encode($json);
Run Code Online (Sandbox Code Playgroud)