- ベストアンサー
phpにてファイルをアップロード2
先日質問させていただいたものなんですが、本やサイトを参考にして、以前とは違ったphpを使用してファイルをアップロードしようと考えています。 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title><?php echo basename($PHP_SELF);?></title> </head> <body> <p>ファイルアップロード</p> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="file" name="uploadfile"> <input type="submit" value="送信"> </form> <?php if(isset($uploadfile)) { // アップロードされたファイルのサイズを確認 if($uploadfile_size <= 2097152) { // 移動 $moveto = "/public_html/img" . basename($uploadfile_name); move_uploaded_file($uploadfile, $moveto) or die("アップロード失敗\n"); print "<p>ファイルをアップロードしました。 - $moveto</p>"; } } ?> </body> </html> 上記を使おうと思っているのですが、これを使用した場合、 (1)上記をhtmlとしておくだけで、ファイルのアップが可能になるのか?phpも必要ですよね? (2)この場合アップされたファイルはドコに保存されるのか?…僕はpublic_htmlの中のimgというフォルダに移動して欲しいのですが。 皆様お手数ですが、教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問の意図がちょっとわかりかねます。 ご自身で「print_r($_FILES)」と書いているので Arrayの中身がみえているんですが・・・。実は自覚ない? >64(ピクセル)×64)以外アップできない list($width, $height) = getimagesize($_FILES['userfile']['tmp_name']); とすると画像のドットサイズが$width、$heightの変数に収まります。 それで振分けをするといいでしょう。 >アップロードする際に画像ファイルの大きさを変えることなんて不可能ですよね? imagecreatefromjpegできないことはないですよ。 サムネイル程度ならこれで十分作れます。私もやったことあります。 記憶ではGDがサーバーに導入されている必要があったと思うので サーバーの環境しだいでしょう。 http://www.php.net/manual/ja/function.getimagesize.php http://www.php.net/manual/ja/function.imagecreatefromjpeg.php
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
よくよくみるとFILESをFILEと書いてあるので "img/".$_FILES['userfile']['name'] ではどうでしょう?
お礼
回答ありがとうございました。 …いけました!アップロード成功になりました。 ありがとうございます。ホント助かりました。 さらに質問になるのですが、すいません。 ファイルアップロード成功 Array ( [userfile] => Array ( [name] => 3d.html [type] => text/html [tmp_name] => /tmp/phpYGkt45 [error] => 0 [size] => 2307 ) ) とでるのですが、 Array ( [userfile] => Array ( [name] => 3d.html [type] => text/html [tmp_name] => /tmp/phpYGkt45 [error] => 0 [size] => 2307 ) ) は絶対にでてくるものなのでしょうか? 設定をかえれば消えるのでしょうか? あと、アップしたファイル…画像ファイルなのですが、指定された大きさ(例えば64(ピクセル)×64)以外アップできない…という設定なんかは可能なんでしょうか? phpを使って、アップロードする際に画像ファイルの大きさを変えることなんて不可能ですよね? 度々の質問になって申し訳ございません。 よかったらお答えしていただけないでしょうか?
- php504
- ベストアンサー率42% (926/2160)
"/img/".$_FILE['userfile']['name'] を "./img/".$_FILE['userfile']['name']に変えればうまくいくかもしれません。 それと[img]のパーミッションを書き込み可(777)にする必要があります。 /は一番大元のディレクトリを表します。/img/をWindows風で書けばC:\img\ということになります。この書き方を絶対パスといいます。 .は現在のディレクトリを示し./img/とすると現在のディレクトリからの相対的な位置を指します。ちなみに..と書くと現在のディレクトリの1個上(親ディレクトリ)を指します。このような書き方を相対パスといいます。
お礼
回答ありがとうございます。 php504さんの言う通りに変更してみましたが、変更前と同じように失敗になりました。 imgフォルダは777にしてあります。 public_htmlの中のimgフォルダに入れたい場合でも、imgだけでいいんですよね? /public_html/imgより前の部分は記述する必要はあるんですか?
- yambejp
- ベストアンサー率51% (3827/7415)
微妙ですが・・・ファイルのアップはされている ようなので、移動の失敗ですよね? "/img/"が"img/"とかのような気がしていますが、 違うかもしれません。 あとはパーミッションで移動先に権限がないとか・・・
お礼
回答ありがとうございます。 yambejpさんの言うとおり、imgの部分修正してみましたが、変更前と同じように失敗になりました。 パーミッションの設定は777にしています。パーミッションは777でいいんですよね?
- yambejp
- ベストアンサー率51% (3827/7415)
(1)上記をhtmlとしておくだけでファイルのアップが可能になるのか? ファイルのアップロードはあくまでもhtmlの仕組みを使っている だけなのでhtmlファイルだけでアップロードをすることは可能です。 ただし単にアップされるだけなので、受け取ったファイルを処理しな ければ自動的に消されます。この場合処理をするのがPHPなわけです。 (2)この場合アップされたファイルはドコに保存されるのか? PHPの場合$_FILESでうけることはご存知ですよね? アップロードされた直後はいわゆるテンポラリー領域に保存されて ますので、それを自分のホームに移動するのがmove_uploaded_file です。 ご指摘のソースでは$_FILESからデータを取り出していないので なにもアップされて、サーバー側でゴミとして捨てられているはず です。 以下を参考にして、もう一度ソースを書き直してみてはいかがで しょうか?
お礼
ご回答ありがとうございます。 よく分かる説明ありがとうございます。 まだphpを始めたばかりなので、分かっていない部分がたくさんあります。 もうひとつあって↓ [html] <html> <head> <title>ファイルのアップロード</title> </head> <body> <form method="POST" action="gazou_upload.php" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1000000" > <input type="file" name="userfile"><br><br> <input type="submit" value="アップロード"> </body> </html> [php] <?php if (move_uploaded_file($_FILES['userfile']['tmp_name'], "/img/".$_FILE['userfile']['name'])) { print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> [フォルダ] img でアップすると、 ファイルアップロード失敗 Array ( [userfile] => Array ( [name] => 3d.html [type] => text/html [tmp_name] => /tmp/phpHCZOwM [error] => 0 [size] => 2307 ) ) となるのですが、これの原因はなになんでしょうか? 度々の質問になり申し訳ありません。 よろしくお願いします。
お礼
度々の回答ありがとうございます。 まだphpははじめたばかりで、本などのサンプルを主にソースを作ってたので、中身がよく分かっていないところがあります。 申し訳ございません。ご指摘ありがとうございます。 振り分けの件、大きさを変える件…了解しました。 参考URLや本を見て、できるようならやってみます。 卒業研究で画像をサーバーにアップしたい…ということでphpを利用しています。あまり時間はありませんができる限りやってみようとは思いますが。 初心者の僕に丁寧に教えていただき、ありがとうございました。 まだまだ分かっていない部分が多いです。 また機会がありましたら、よろしくお願いします。