モーグルとカバとパウダーの日記 このページをアンテナに追加 RSSフィード Twitter

モーグルやカバ(EXカービングスキー)、山スキー(BC)の山行記録などがメインの日記です。
いろんな条件のいろんなところを、その時々の条件にあった滑り方で楽しむ、フリースキーをして遊んでいます。

検索で来られた方は、上の検索窓から再度検索していただくか、右サイドバーのカテゴリーやトピックスの項目で絞り込んでみてください。
仕事柄、コンピュータ系のネタも多いので、スキー関連ネタだけ読みたい方は[ski]、コンピュータ関連ネタは[pc]、スパム関連ネタは[spam]で絞り込んでください。

2016-04-22 (Fri)

[]NetCommons2で大きなサイズの画像アップロードに失敗する理由 NetCommons2で大きなサイズの画像アップロードに失敗する理由を含むブックマーク NetCommons2で大きなサイズの画像アップロードに失敗する理由のブックマークコメント

NetCommonsというCMSがあり、そこで画像ファイルアップロードするとある程度のサイズの画像なら問題ないが、大きなサイズの画像だとアップロードに失敗する、という問題が起きました。


メモリやアップロードファイルサイズの設定はすでにphp.iniでされており、phpinfo()で確認してみてもちゃんと設定が通っている状況でした。


しかしデバッガで追ってみると、携帯用のサムネイルを作るためにimagecreatefromjpegというGD関数を使うところで落ちてしまい、どうやらメモリが足らない状況でした。

どうやら、というのはここで落ちるとエラーを吐かずに死ぬので、メモリ不足のせいで死んだのかどうかをエラーログからは確認できないためです。


ちなみに、imagecreatefromjpegすると、ファイルサイズに関係なく画像のサイズx4byte分のメモリを必要とするらしく、例えば4000x3000pixの画像をアップロードするとそれだけで48Mのメモリが消費されることになります。


で、ぐぐってみると似たようなことで困っている人はいるようなのですが、どうもphp.iniではなく「ini_set」でやると大丈夫、という話がありました。ほんとに??


PHP GD Allowed memory size exhausted - Stack Overflow

http://stackoverflow.com/questions/2827908/php-gd-allowed-memory-size-exhausted


そこで、imagecreatefromjpegを呼ぶ前で「ini_set('memory_limit', '512M')」として試したところ、ちゃんと動くことがわかりました。


そうなると今度はなんでphp.iniで設定した値が使われないんだろう??という疑問がわくわけですが、その理由は実はCMS側の設定でした。


NetCommonsには

「システム管理」→「サーバ設定」→「PHP最大メモリ数」

という項目があり、ここでPHPの最大メモリ数設定が出来るとなっているのですが、どうやらここで設定した値でmemory_limitが設定されてしまうように書かれているようです。

ここに512M等設定すると、大きな画像アップロードでも落ちないようになりました。

トラックバック - http://d.hatena.ne.jp/stealthinu/20160422/p1