自作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のバッファメモリサイズ等があるようです。
大きいサイズのファイルを扱う場合にうまくいかないときは、ここが原因の可能性もあります。