0

アップロードされた画像を取得し、imagecreatefromjpeg. 小さな画像ではうまく機能しますが、大きな画像では機能しません。たとえば、5,799,936 バイトのイメージを使用すると、次のエラーが発生します。

Fatal error: Out of memory (allocated 56623104) (tried to allocate 3072 bytes)

画像が 1MB 未満の場合、そのようなエラーは発生しません。

imagedestroy画像が正常に処理されたときはいつでも必ず使用するようにmemory_get_usage()し、現在使用されているものを確認していました (186260)。

とにかく、このエラーの原因を突き止めて結果を変更する方法はありますか? または、サーバーがそのサイズのものを処理できないため、画像のサイズを確認する必要がありますか? (そうであれば、サーバーに適したサイズをどのように判断できますか?)

4

3 に答える 3

2

@Common Sense が概説する方法は、サイズ変更プロセスが消費するメモリ量を試して予測する唯一の方法です。100% 正確になることは決してありませんが、適切な安全マージンがあれば、おそらく十分でしょう。

頭に浮かぶ別のオプションは、サイズ変更操作を試みる別の PHP プロセスをトリガーすることです (file_get_contentsまたはを介し​​てexec())。その操作が致命的なエラーで失敗した場合は、それをキャッチして、画像が大きすぎるというわかりやすいメッセージをユーザーに表示できます。

サーバーにバイナリをインストールできる場合は、ImageMagickなどの外部ツールを使用してサイズ変更を行うことも検討できます。コマンドライン ツールのメモリ使用量は、PHP のメモリ制限にはカウントされません。

于 2013-08-27T12:44:59.657 に答える
0
于 2013-08-27T13:32:51.983 に答える