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

解決済みの質問

PHPでファイルのアップロード

OSはLinuxのfedoraを利用しており、WebサーバーソフトはApacheを利用しています。

PHPを使って、クライアントからサーバーにファイルのアップロードをしたいのですが、プログラミングがあまり理解できておらず、アップロードができません。ちなみにphp.iniファイルの設定に関しては、アップロードは受け付けるようにしていますし、設定にミスはないと思います。
sample.phpというファイル名で下記のファイルを作ってみたのですが、アップロードすることができませんでした。まだPHPは初心者で間違いだらけだと思うのですが、こうすればアップロードできるようになるといった指摘をお願い致します。

<html>
<head>
<title>
</title>
</head>
<body>

<form enctype="multipart/form-data" action="sample.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

<?php

if(isset($uploadfile) and is_uploaded_file($uploadfile))
{
if(move_uploaded_file($uploadfile,
$path . "/var/www/html/test/" . $uploadfile_name)){
print("<br>Uploaded file saved.");
}else{
print("<br>Uploaded file save failed.");
}
}

?>

</body>
</html>

投稿日時 - 2004-01-23 00:04:34

QNo.758426

すぐに回答ほしいです

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

まずファイルアップロード時の挙動を説明しますと、
submitが押された時、php.ini内に安全なファイル名(ランダム)で一時保存されます。
次のページが表示されるまでにファイルを自分で保存しない限り、安全なファイル名で一時保存されていたファイルは消えます。

プログラムを読ませていただく限り
「$uploadfile」には何も入らないので
確かにご要望の動作はしないですね…
(最初のレスは読まずに書いてましたすいません)

下記の様に書き換えればうまくいくんじゃないかと思うのですが…

例:
$TmpFileName = $_FILES['userfile']['tmp_name'];
$FileName = $_FILES['userfile']['name'];
$FilePath = "/var/www/html/test/";
# ファイルがあるかチェック
# ファイルが存在しない時
if(empty($TmpFileName) or !is_uploaded_file($FileName)){
print "ファイルがないです";
}
# ファイルが存在する時
else{
move_uploaded_file($TmpFileName, $FilePath.$FileName);
}

これで駄目な時は「<?php」の下に
「print_r($_FILES);」と書いて
出てきた文字を貼り付けて下さい

投稿日時 - 2004-01-23 17:33:40

ANo.3

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

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

回答(3)

ANo.2

杞憂かもしれませんが、
どの位のサイズのファイルをアップロードしてテストいますか?
MAX_FILE_SIZE属性のファイルサイズの単位は確かbyteですので、

<input type="hidden" name="MAX_FILE_SIZE" value="30000">

とかかれている場合、約30kbまでのファイルしか受け付けてもらえません。(実際には1024単位なのでもっと少ないです)

投稿日時 - 2004-01-23 12:23:50

補足

アップロードするファイルのサイズはテキストファイルで1kbほどです。よろしかったら再度アドバイスをよろしくお願いいたします。

投稿日時 - 2004-01-23 15:05:31

ANo.1

rhl

こんばんわ。
register_globalsの設定はどうなっていますか?
OFFならば、上記コードでは動きません。
$_FILES['userfile']で受け取ります。
また、この設定はOFFにすべきです。
どんなエラーが出ましたか?

投稿日時 - 2004-01-23 00:33:30

補足

register_gloabalsの設定はOFFになっていました。そこでONにして再度アップロードしてみたのですが、できませんでした。エラーの内容は出てこずに、参照でアップロードするファイルを選び、アップロードボタンを押すと、参照のところに選ばれていたファイルが消えただけでした。すみませんが、再度アドバイスの方をよろしくお願いいたします。

投稿日時 - 2004-01-23 15:02:10

あなたにオススメの質問