• ベストアンサー

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>

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

  • ベストアンサー
  • sisya
  • ベストアンサー率39% (97/244)
回答No.3

まずファイルアップロード時の挙動を説明しますと、 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);」と書いて 出てきた文字を貼り付けて下さい

その他の回答 (2)

  • sisya
  • ベストアンサー率39% (97/244)
回答No.2

杞憂かもしれませんが、 どの位のサイズのファイルをアップロードしてテストいますか? MAX_FILE_SIZE属性のファイルサイズの単位は確かbyteですので、 <input type="hidden" name="MAX_FILE_SIZE" value="30000"> とかかれている場合、約30kbまでのファイルしか受け付けてもらえません。(実際には1024単位なのでもっと少ないです)

20centuryboy
質問者

補足

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

  • rhl
  • ベストアンサー率37% (42/111)
回答No.1

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

20centuryboy
質問者

補足

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