PHPで画像をサーバーへ保存するプログラムを作成しておりますが、tmpフォルダへアップロードされていないのか上手くいきません。
環境
Buffalo製NASの「Webサーバー」という機能をオンにして、ローカルサーバーとして使用しております。
PHPバージョン 5.3.23
Windows10
該当のPHPファイルと同じ階層に「test」というフォルダを作成し、そこにアップロードするjpg画像を入れております。
また、保存先も「test」フォルダに設定しております。
html
1~省略~ 2<form action="index.php" method="post" enctype="multipart/form-data"> 3 <input type="file" name="image"><br> 4 <button type="submit">保存ボタン</button> 5</form> 6~省略~
PHP
1~省略~ 2 $folder = './test/'; 3 $fileName = $_FILES['image']['name']; 4 5 if (!empty($fileName)) { 6 $ext = substr($fileName, -3); 7 if (strcasecmp($ext, 'jpg')!=0 && strcasecmp($ext, 'gif')!=0 && strcasecmp($ext, 'png')!=0 && strcasecmp($ext, 'bmp')!=0) { 8 $error['image'] = 'type'; 9 } 10 } 11 12 if (empty($error)) { 13 $image = date('YmdHis') . $_FILES['image']['name']; 14 $filepath = $folder.$image; 15 var_dump($_FILES['image']['tmp_name']); //検証用 16 move_uploaded_file($_FILES['image']['tmp_name'], $filepath); 17 } 18~省略~
上記のプログラムを実行すると、
var_dump($_FILES['image']['tmp_name']) の結果が string(0) "" と表示されます。
「test」フォルダにも画像が保存されていません。
5MB程度の画像ファイルですが、ファイルサイズなどで引っ掛からないよう、php.iniも以下の値に書き換えております。
max_execution_time 600
upload_max_filesize 256M
post_max_size 288M
memory_limit 512M
そのため、そもそもtmpフォルダへ保存されていないと思い色々と検索しましたが、理由が分かりませんでした。
NASの機能でサーバーを作成した時点で、指定した共有フォルダにhtdocs, cgi-bin, logというフォルダがそれぞれ作成されましたが、
tmpフォルダらしきフォルダはどこを確認しても見当たらないため、エクスプローラーからは見えない場所にあるのでしょうか。
php.iniのupload_tmp_dirを確認したところ初期値が空欄になっており、他の項目で”/tmp”と記述されている箇所があったため、同じように”/tmp”としました。
エクスプローラーで“/tmp“の場所を表示できないため、フォルダが存在するかの確認やパーミッションの確認なども出来ません。
tmpフォルダをNASの共有フォルダ内のhtdocs, cgi-bin, logと同じ階層に設定するのが一番良いのですが、php.iniにどのようなパスを表記すれば共有フォルダ内に指定できるのか、調べても見つけることができませんでした。
この状態で何かお判りでしょうか。宜しくお願い致します。
-----------------------------追記(2020/05/25)-------------------------------
phpinfoに_SERVER["DOCUMENT_ROOT"]という項目があり、そこに/mnt/array1/共有フォルダ名/htdocsと表記があったため、
php.iniのupload_tmp_dirを/mnt/array1/共有フォルダ名/tmpとしました。
その状態で再度実行しましたが、アップロードできませんでした。
phpファイルに
echo $_FILES['image']['error'];
という行を入れて検証したところ、戻り値が1(UPLOAD_ERR_INI_SIZE)であったため、試しにファイルサイズが3KB程度の画像で実行してみると上手く動作しました。
php.iniでupload_max_filesize = 256M と指定したはずなので、5MB程度の画像ファイルがサイズエラーとなるのはおかしいと思いphpinfoを確認したところ、そもそもLocal ValueとMaster Valueがどちらもデフォルトの値になっており、upload_max_filesizeやupload_tmp_dirもデフォルトの値のままでした。php.iniには設定した値が保存されております。
php.ini編集後にNASの再起動と「Webサーバー」機能のオフ・オンは実行しておりますが、それだけでは反映されないのでしょうか。検索するとApacheの再起動が必要という情報が見られますが、対象がNASである場合どのように行えばいいのか分かりませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。