2017-09-12 9 views
0

データベースからデータを取得してJSONファイルに格納しようとしています。 スクリプトは以下の罰金に動作しますが、大規模のDataTableが動作しません: 致命的なエラー:使い果たさ104857600バイトの許可メモリサイズデータを配列に格納する際にメモリサイズが発生する

# SELECT Data from Table 
$query = "SELECT `Row1`, 
       `Row2`, 
       `Row3` 
      FROM `Table`"; 
$result = $mysqli->query($query); 

# Declare array 
$data = array(); 

# Put Data into array 
while ($row = $result->fetch_assoc()) { 
    $data[] = $row; 
} 

# Put Data into JSON 
$JSONData = json_encode($data, JSON_PRETTY_PRINT); 

しかし、大きなテーブルはを動作しません。

セグメント「データを配列に格納」のエラーが発生します(上記のコードを参照)。

JSONにデータを取得する他の方法はありますか?マーク・ベイカーの応答にさらに

+0

* php.ini *ファイルでPHP用に許可されているメモリサイズを増やします。 – tilz0R

+1

[streaming json encoder](https://github.com/violet-php/streaming-json-encoder)....のようなものを使用してください。ただし、サーバーでPRETTY_PRINTをフォーマットしようとしないでください。 –

+0

問題はありませんJSONにデータを取得する方法として、データが多すぎます。あなたは本当にすべてのデータを同時にメモリに保存する必要がありますか? –

答えて

0

は、ここではJSONにストリーミングするために、一時的なソリューションです:

# SELECT Data from Table 
$query = "SELECT `Row1`, 
      `Row2`, 
      `Row3` 
     FROM `Table`"; 
$result = $mysqli->query($query); 

header("Content-Type: application/json"); 
echo "["; 
# Put Data into array 
$first = true; 
while ($row = $result->fetch_assoc()) { 
     echo (!$first?",":"").json_encode($row); 
     $first = false; 
} 
echo "]"; 
die(); 

が今ここにキャッチです。データを配列や文字列に入れることはできません。送信することはできます。さらに、出力バッファリング(ob_start)を使用している場合は、メモリが不足しています。

関連する問題