天使と悪魔選手権

今日始めたばかりの初心者です。
PHPだとCGIに比べ、ファイルのアップロードとか画像の処理が簡単に行えそうなのでチャレンジしてみたのですが、いきなりつまづいてしまいました。
とりあえずファイルをアップロードしてみようと思い、下のようなサンプルをアップロードしてみたのですが、さっぱり動きません。
適当なjpgファイルをアップロードすれば、スクリプトのあるディレクトリに”aaa.jpg”という名前で保存すると思うのですが…。
最後の”var_dump($_FILES);”という命令で、アップロードされたファイルの内容を表示させてるはずなのですが、ファイル送信前も後も”array(0) {}”としか表示されません。
PHPのバージョンは4.34です。
どなたかご教授お願いします。

************************
<form enctype="multipart/form-data" method="post">
Upload File:<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<pre>
<?php
if (!empty($_FILES)) {
move_uploaded_file($_FILES['userfile']['tmp_name'],'aaa.jpg');
}
var_dump($_FILES);
?>
</pre>
************************

A 回答 (5件)

$_FILESが空だという事はつまりファイル自体が送られていませんね。

試しに同じコードを自分の使ってる開発サーバーにアップしてテストしてみましたが、こちらの環境ではちゃんと$_FILESに値が入っていました。

・Send fileボタンを押すと画面は更新されるわけですよね?
・プログラム上半分のHTML部分は間違いないですか?余計なスペースなど入ってないですよね。

少なくともスクリプトの問題ではないですね。PHPの設定はどうなっているんでしょうか?いじれるんですか?例えばfile_uploads、post_max_sizeやupload_max_filesizeが0になってるなんて事はありませんか?これは
<? phpinfo(); ?>
という1行だけのスクリプトをアップロードして表示させて、挙げた項目の値を確認して下さい。これが0になっている場合は、php.iniで設定を変更してあげないといけません。
    • good
    • 0
この回答へのお礼

わざわざ実際に試して頂いて、とても感謝しております。励みになります。ありがとうございます。

>Send fileボタンを押すと画面は更新されるわけですよね?
はい。送信後、ブラウザの「中止」ボタンが一瞬だけアクティブになります。

>プログラム上半分のHTML部分は間違いないですか?余計なスペースなど入ってないですよね。
下のようになっていますが、大丈夫だと思います。
************************
<HTML>
<HEAD>
<TITLE>PHPサンプル</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</HEAD>
<BODY bgcolor="#FFFFFF">
<CENTER>
<form enctype="multipart/form-data" method="post">
Upload File:<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<pre>
************************

あと、php.iniの設定は、全て問題ありませんでした。
file_uploads=on
post_max_size=8M
upload_max_filesize=2M
※試しに送信してたファイルは30kb程度です

upload_tmp_dirが「no value」になってるのが少し気になりましたが、この状態だとスクリプトのあるディレクトリが指定されるんですよね?

問題は解決してませんが、php.iniを閲覧する方法等、すごく参考になりました。ありがとうございました。
またしばらく格闘してみます!

お礼日時:2005/06/03 10:10

windowsでもダメ、macでもダメとなると、あとはサーバーの設定なのかな。

どこかのレンタルサーバーを使用しているのでしょうか?その業者に問い合わせてみるしかないような気がします。
    • good
    • 0
この回答へのお礼

レス遅くなってすみません。
私も、一度レンタルサーバーの管理人に問い合わせた方がいいかと思い始めてたところです。
ちょっと今日は忙しいので明日にでもメール送ろうと思います。
何度もアドバイスありがとうございましたm(_ _)m

お礼日時:2005/06/06 15:03

謎ですねぇ。



>upload_tmp_dirが「no value」になってるのが少し気になりましたが、この状態だとスクリプトのあるディレクトリが指定されるんですよね?

いいえ、省略された場合はそのOSが認識しているテンポラリディレクトリを使います。不安であれば、これを指定してみたらどうでしょうか?

ちなみに他のパソコンやブラウザでやってもだめですか?可能であれば知人等にURLを教えてテストしてもらったらどうでしょうか。
    • good
    • 0
この回答へのお礼

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

>いいえ、省略された場合はそのOSが認識しているテンポラリディレクトリを使います。不安であれば、これを指定してみたらどうでしょうか?

なるほど、参考になります。
試しに下のようなスクリプトでupload_tmp_dirを設定しようとしてみたのですが、falseが帰ってきてしまいました。ユーザーには設定できないんだろうと思います(ほとんど手探り&Google頼みで作業してるので、ちょっと自信無いですが^^;

スクリプト*******************
var_dump(ini_set('upload_tmp_dir','/usr/tmp'));
var_dump(ini_get('upload_tmp_dir'));

結果**********************
bool(false)
bool(false)
************************


>ちなみに他のパソコンやブラウザでやってもだめですか?可能であれば知人等にURLを教えてテストしてもらったらどうでしょうか。

会社のMacとWindowsで試してみましたが、どちらも結果は同じでした。今晩、自宅でも試してみようと思います。


なかなか問題は解決しませんが、後々も役立ちそうな知識がいろいろ増えたと思います。ありがとうございました!

お礼日時:2005/06/03 18:21

テストでローカルで走らせて見ましたが、問題なく動きました。


なんなんでしょうね?
    • good
    • 0
この回答へのお礼

お試しくださってありがとうございます。
てっきり私の経験不足による、ごく初歩的な問題だろうと思ってたのですが、そうでもないのかもしれませんね。

お礼日時:2005/06/03 16:56

そのphpが存在しているディレクトリの第三者の書き込み属性が不許可になってはいませんか?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
再度確認してみましたが、書き込み属性は許可になっていました。

こんな短いスクリプトだから、原因はスクリプト自体じゃなくて、そういったところにありそうだとは思うのですが…。

お礼日時:2005/06/02 17:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報