【PHP】アップロードファイルは20個がデフォルト「大事なのは当たりの付け方」

2020年9月3日

キーワードとして『デフォルトのファイルアップロードは20まで』と覚えておこう。

こういったキーワードが点として頭にインプットされていればググる際のヒントになります。

ある案件の既存バグ対応として

現在21個以上のファイルをアップロードしようとした場合、20個までしかアップロードできないバグある

というissueがGithubにあがってました。

まずあたりをつけるべきは

1.既存プログラムの定数

2.フロント処理かサーバー処理かの切り分け

かなと思われる。

1.既存プログラムの定数

この場合、まずは20というキーワードでプロジェクト内を文字列探索してみる。

定数ファイルで

const DEFAULT_UPLOAD_FILES = 20

とか設定されていることも考えられる。

20というキリの良い数字からこれは有効的なアプローチなのである。

が!しかし!

この戦略はダメだった。どうやら定数ファイルすらなさそう・・・

2.フロント処理かサーバー処理かの切り分け

次はフロントかサーバーのどちらで不備が生じているのかを探索する。

フロントの場合、htmlの要素の設定不備でname属性が正しくサーバー側にsubmitされていないケースも考えられる。

また、submit部分をjQueryなどでfunctionとして抜き出してカスタマイズしていればその可能性も高くなる。

が!しかし!

これまた空振り。

サーバ側でフロントから渡されるパラメータをログで確認。

どうやらしっかりファイルは21ファイル渡されている模様・・・

こうなると実際にサーバにファイルを保存させる処理

move_uploaded_file

に疑いの目が向けられる。

が、これはPHPのど標準なファンクション。

ということは第3の案としてGoogle先生に聞く。

3.結局はググります

「php ファイルアップロード 20」

なんてワードでググれは今回は原因がわかりました。

php.iniに定義される

max_file_uploads = 20

これが犯人ですね。

デフォルトの設定では往々にしてファイルアップロード数は20で打ち切られているわけですね。

なのでこれを20→100などに数を上げてあげれば21個以上のファイルアップロードも可能となり問題は解決となります。

このphp.iniの場所ですがMAMPの場合は落とし穴があるので参考に記載しておきます。

bin/php/phpX.X.X/conf/php.ini

になりますよ。

あと、php.iniの修正後は必ずサーバー(Apache)の再起動はやっておきましょう。

ちなみに、php.iniでなくPHPのプログラム内で

ini_set(“max_file_uploads", “100");

って書けば良いじゃん!?

って思う人もいるでしょう。

ですがmax_file_uploadsはini_setでは効きません。

代用案としては

  1. php.iniを変更する
  2. htaccessで設定する
  3. httpd.confで設定する

になってしまうけですね。

まとめ

まとめというほどでもないですが。

プログラミングスキルとは言いつつも、今の時代はやはりググるセンスが重要だと思います。

・あたりをつけられるようになるのは経験から

・その先の解決策にアプローチするのはググりのセンス

だと僕は思ってます。

なのでITに長けている年長者はプログラミングの仕組みをよく理解しているからあたりの付け方がうまく、応用力が効くわけです。

ですが、ググった結果をすぐに反映することが意外とポリシー的にNGだったりもするわけです。

ググった結果が100%正しいとは限りません。

ですがググって動かしてみて、そこから掘り下げて血肉化していくというアプローチは非常に重要です。

爆速に成長したければ若手と熟練者の考えをハイブリットに活かしていくのが賢い行動なんですね。

「ファイルアップロードは20個まで」というようなキーワードを点で頭に入れておけばググりのヒントにつながるわけです。

プログラミングスキルを伸ばしていくなら仕組みの理解はもちろんですが、点としてキーワードを頭に入れてセンスを磨いていきましょう。