undefined index php解消する方法|phpファイルアップロードで失敗したときチェックする点

スポンサーリンク

はじめに

phpでファイルアップロード機能を 作るとき、気をつけることをまとめました。
知らないとメッチャ躓きます。

f:id:shangtian:20190217095231p:plain こんなかんじで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を見ると

f:id:shangtian:20190221224125p:plain 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

ファイルの最大アップロードサイズ。

アップロード出来るサイズがアップしようとしたロードファイルより
サイズが小さい時はアップロードされない。 f:id:shangtian:20190212080206p:plain

memory_limit

PHP実行時の最大使用メモリ。複数人が同時にアップロードするとき
多く容量を確保しとく必要がある。

max_execution_time

デフォルトで30秒。実行時間をすぎるとアップロードができない。タイムアウトする。

max_file_uploads

最大のアップロードファイル数。複数のファイルをアップロードする際気をつける。
デフォルトでは20となっている。

<参考文献>

phpで大容量のファイルをアップロードする時の注意点 – グローディア株式会社

file upload php $_FILES undefined index error - Stack Overflow

http://y-yagi.tumblr.com/post/15717208969/phpでのファイルアップロードについて
y-yagi.tumblr.com