こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPでのファイルアップロードについて

初めて質問させていただきます。
PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。


以下2種類のhtmlファイルとphpファイルを使用

(1)upform.htmlの内容
<HTML><BODY>
<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php">
<INPUT TYPE="FILE" NAME="upfile"><br>
<INPUT TYPE="SUBMIT" VALUE="アップロード">
</FORM>
</BODY></HTML>


(2)upload.phpの内容
<html><body>
<?php
if(move_uploaded_file
($_FILES['upfile']['tmp_name'],
"./htdocs/phpbook/"
) == FALSE) {
print "失敗しました。";
}else{
print ($_FILES['upfile']['name']);
print "をアップロードしました。";
}
?>
</BODY></HTML>


上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。
↓↓エラー内容
Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7
失敗しました。
↑↑エラー内容


いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。
教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。

【参考】
php.iniのFile Uploadsを抜きました。
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

投稿日時 - 2009-10-03 22:25:17

QNo.5339665

困ってます

質問者が選んだベストアンサー

例示されたコードについて2点ほど。

1.
move_upload_files()の第2引数はディレクトリへのパスではなくてファイルへのパスを与える必要があったような。
ex) ./htdocs/phpbook/ ではなく ./htdocs/phpbook/abc.txt

2.
上記を踏まえmove_upload_files()に適切な引数を与えてください。
予想ですが、相対パスが「htdocs」から始まるということはないような気がします。

>なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのか
move_upload_files()の第2引数に相対パスであるabc.txtを与えているからです。
upload.phpからみた相対パスabc.txtは同じディレクトリのabc.txtということになります。

投稿日時 - 2009-10-05 11:52:44

お礼

ご回答ありがとうございます。

そういうことだったのですね。
上記設定では、upload.phpが存在する場所からみた相対パスにアップロードされるということですね。

ちょっと進めそうです。ありがとうござました。

投稿日時 - 2009-10-06 10:38:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問