web-dev-qa-db-ja.com

PHP json_encodeサイズ制限?

PHPプロキシを使用してファイルの内容を取得しています。PHPであらゆる種類のクエリを記述せずに、強力なjQueryオプションを使用してそのファイルを検索したいと思います。これが私のPHPコード:

$page = file_get_contents( filter_var( $_POST[url], FILTER_SANITIZE_URL ) );
die( json_encode( $page ) );

ロードされたページが大きくなりすぎるとPHPはドキュメント全体を読み取りますが、json_encodingはファイル全体ではなく、ファイルの最初の部分のみを提供します。サイズについては何も見つかりません。 jsonが渡したデータには制限がありますが、明らかに1つあります。

質問:ファイルの一部のみが転送されないようにする回避策はありますか?

他のドメインからファイルを取得する必要があるため、jQueryでファイルの内容を読み取ることは実際にはオプションではありません。

13
patrick

Json_encodeでは説明できない問題が発生している可能性のある他のユーザーを支援するため。 json errormsg関数について知っておくと役立つことがわかりました。

json_last_error_msg();

私も同様の問題を抱えていましたが、ファイルサイズとは関係ありませんでした。データベースに不正な形式のutf-8がありました。あなたはこのようにあなたのjsonをチェックすることができます

$json = json_encode($data);

if ($json)
    echo $json;
else
    echo json_last_error_msg();

PHPのドキュメントはこちら json_last_error_msg

20
Cody Wikman

PHP 5.3: ext/json/json.c
PHP 7(現在): ext/json/json.c

JSONシリアル化データのサイズに組み込みの制限はありません。とにかく文字列用ではありません。したがって、PHPのメモリ制限などに遭遇したと思います。

文字列をjson_encodeすることで、一貫してエスケープと外側の二重引用符が追加されます。内部的には、ビットメモリの倍増(一時的な文字列の連結とutf8_to_utf16変換/チェック)を意味するため、すでに8MBの文字列で32MBのphpメモリ制限に遭遇しました。しかしそれ以外は、json.cには恣意的な制限はないようです。

12
mario