はじめに
phpでファイルアップロード機能を 作るとき、気をつけることをまとめました。
知らないとメッチャ躓きます。
こんなかんじでUndefined indexが表示されてしまう。
理由がわかるまですごく大変だった。
undefined index とはなにか?
ファイルをPOSTでアップロードしたとき、その項目が$_FILESに
連想配列される。undefined indexはこの項目が無いということ。
php側でpostでアップロードされたファイルの情報を
$file = $_FILES['gif'];
でまず取得するが、ここでエラーしてしまってるということ。
html formでのミス
htmlのformでenctype="multipart/form-data"になっていない場合。
ここを設定していないとファイルのアップロードは出来ない。
<form action="gifmaker.php" method="post" enctype="multipart/form-data"> </form>
php.iniの設定の問題
phpの設定ファイルphp.iniの内容を変更することで
ファイルのアップロード問題を解消していく。
phpの設定状況を見るにはphpinfo.php と言う名前でファイルを作り
<?php phpinfo(); ?>
を記述してサーバーに保存。ブラウザでphpinfo.phpを見ると
phpの設定ファイルは通常
/etc/php/7.2/apache2
にあるはず。
php.iniを変更するときは
$cd /etc/php/7.2/apache2 $sudo vim php.ini
を実行して、変更する部分を書き換えたら
sudo service apache2 restart
でapacheを再起動する。
php.iniに書かれている項目でアプロードに関連しているものを
挙げていく。この辺の値を変更すれば解消する可能性が高い。
file_uploads
file_uploadsこの項目がOFFだとそもそもアップロード出来ない。
post_max_size
postメソッドで送信できるファイルの最大容量
upload_max_filesize
ファイルの最大アップロードサイズ。
アップロード出来るサイズがアップしようとしたロードファイルより
サイズが小さい時はアップロードされない。
memory_limit
PHP実行時の最大使用メモリ。複数人が同時にアップロードするとき
多く容量を確保しとく必要がある。
max_execution_time
デフォルトで30秒。実行時間をすぎるとアップロードができない。タイムアウトする。
max_file_uploads
最大のアップロードファイル数。複数のファイルをアップロードする際気をつける。
デフォルトでは20となっている。
<参考文献>
phpで大容量のファイルをアップロードする時の注意点 – グローディア株式会社
file upload php $_FILES undefined index error - Stack Overflow
y-yagi.tumblr.com