みなさまお世話になっております。
###前提・実現したいこと
JPG、pdfなどのファイルをmove_uploaded_fileでアップロードするプログラムを作っているのですが、本番環境でのみ動きません。
最終的には/var/tmpディレクトリから/home/user/tmpに移動したい。
###発生している問題・エラーメッセージ
[Wed Jun 28 16:37:27 2017] [error] [client ***.***.***.***] PHP Warning: move_uploaded_file(): Unable to move '/var/tmp/phpBI6233' to '/home/tmp/kaeru/frog-32568_1280.png' in /var/www/html/drop_zone_upload.php on line 23, referer: http://***.***.***.***/ddupload.php
###該当のソースコード
<?php if (!empty($_FILES)) {//アップロードファイルがある時の処理 $tempFile = $_FILES['file']['tmp_name']; if(!file_exists($uploaddir)){//アップロードディレクトリの存在確認 mkdir($uploaddir, 0700); } $tmpdir = '/home/tmp/' . $udata['uid']; $_SESSION['tempdir'] = $tmpdir; $targetFile = $tmpdir . '/' . $_FILES['file']['name']; $_SESSION['targetfile'] = $targetFile; //ここでエラーになる move_uploaded_file($tempFile,$targetFile); } ?>
###試したこと
・ディレクトリのパーミッションを0777にする
・ACLにapacheを追加する
###補足情報(言語/FW/ツール等のバージョンなど)
・php 7.0.19
・CentOS6.8
ローカル開発環境、本番環境ともに同じバージョンです。
ローカル開発環境はVMに構築しています。
なぜ本番環境でのみエラーが発生するかわからず、困っているのでよろしくお願いいたします。
is_uploaded_file()を実行した場合にtrueが返っていますか?
エラーメッセージが途中のところを提示されているようですが、全文提示は可能ですか?※サーバIPなどがある場合は***などマスクかけてもらって構いません。
何度も確認すみません。$uploaddirの存在確認&mkdir()しているにも関わらず使っていないのはなぜでしょう?/home/user/tmpにアップしたいとのことですが、$tmpdirでは'/home/tmp/'としているところが気になります。
さっそくのご回答ありがとうございます。$uploaddirは修正前のコードが残ってしまっていました。そのため、この質問では関係がないので大丈夫です。一時ディレクトリにつきましてはドラッグアンドドロップアップロードのライブラリを使っているため、一度私が定義した一時ディレクトリにアップロードするようにしています。(一時ディレクトリでウイルス検査するため)
is_uploaded_file()はfalseが返ってきました。
修正前のコードが残ったのではなく、実際に今動かしているソースコードを提示いただけませんか?
書き方が悪く申し訳ございません。残ったという意味は変数とmkdirのコードが残っただけですので、質問に記載したコードで動いております。よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー