自作WEBサーバにファイルを送信できないときの確認事項

PHP HTML5

自作WEBサーバに自作したWEBアプリケーション(htmlとphp)を入れて動かした時、inputタグのtype=”file”で選んだファイルアップロードできなかったので、そのときの原因と調査内容を書きます。

ファイル(フォルダ)アクセス権限の見直し

色々調べていじくりまわした結果、今回はこれが原因でした。

環境としては、RaspberryPiにApache(正確にはApache2)をインストールして、/var/www/html/直下にフォルダを作成し、フォルダの中にhtmlファイルとphpを入れて動かしていました。
このフォルダ含めすべてのファイルはWindowsで作成したものです。

RaspberryPiで、このフォルダを「右クリック⇒ファイルのプロパティ⇒パーミッション」で確認すると、「内容の閲覧⇒すべて内容の変更⇒所有者のみ内容へのアクセス⇒すべて」となっていました。

私の場合は、自分で使うためのアプリケーションの為、とりあえず「内容の変更⇒すべて」に変更したらファイルがアップロードできるようになりました。(変更した時に、配下の全ファイルに適用するか聞かれたので、「はい」を選びました。)

「サーバにファイルが送信できない」と言っておきながら、実は「RaspberryPiがファイルを書き込めなかった」が正解だったようです。
(PHPコードに一時ファイル名($_FILES[‘hoge’][‘tmp_name’])やファイルサイズ($_FILES[‘hoge’][‘size’])を画面に表示するようにしたときに、確認できました。)

ファイルアップロードの上限サイズ

php.iniに定義することができます。(私は、デフォルト8Mでした。)
変更方法は、
(1) RaspberryPiでターミナルを起動または、Windowsから、SSH接続。
(2) 「cd /etc/php/7.3/apache2」を入力し、Enter。※PHPのバージョンにより、「7.3」の部分は変わる。
(3) 「sudo nano php.ini」を入力し、Enter。
(4) 「upload_max_filesize」で検索し、サイズを変更。
  (検索は、「Ctrl+W」)
(5) 「post_max_size」で検索し、サイズを変更。

他にも原因の可能性がある

設定項目として、他にはPHPの最大実行時間や、PHPのバッファメモリサイズ等があるようです。
大きいサイズのファイルを扱う場合にうまくいかないときは、ここが原因の可能性もあります。