• 締切済み

PHPで画像をアップロード&保存したいのですが..

初心者です. ブラウザから画像をアップロードし保存できるようにしたく, サンプルを基に以下のようなソースを書いてみたのですが, 画像の保存ができません. もし直さなければいけないところがわかる人がいらっしゃいましたら ぜひ教えてください. よろしくお願いいたします. <?php $img_name = $_FILES["img_path"]["name"]; $img_size = $_FILES["img_path"]["size"]; $img_type = $_FILES["img_path"]["type"]; $img_tmp = $_FILES["img_path"]["tmp_name"]; if($_REQUEST["up"] != ""){ if($img_tmp != "" and $img_size <= 30000){ $img_message = "名前は: $img_name <br>サイズは: $img_size <br>MIMEタイプは: $img_type <br>一時的に保存されているパスは: $img_tmp <br>"; }else{ $size_error = "サイズが大きすぎます。ファイルサイズは30キロバイト以下です。"; } } $FilePath = "./img/".src.".".GetExt($img_name); move_uploaded_file($img_temp,$FilePath); //GetExt function GetExt($FilePath){ $f = strrev($FilePath); $ext = substr($f, 0, strpos($f,".")); return strrev($ext); } ?>

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

そのソースを実際に使ってテストしているのでしょうか? それなら、動かなくて当然です。 直す場所はNo.1さんが指摘している所以外にもミスが多いので、 まずはソースチェックをしっかりしましょう。 その上でダメな場合は、PHPの環境、サーバの環境に左右されるので どういう環境でテストしたのかを合わせて書かれるといいです。

回答No.1

まず、環境変数($_SERVERや$_POSTや$_GETなど、宣言しなくても使える、PHPが最初から持っている変数)ですが、 $_REQUESTはそもそも、何か入っていますか、もしくは、ありますか? if($_REQUEST) echo "環境変数に値が入っている"; if(!$_REQUEST) echo "環境変数に値が入っていない"; ある場合、一度は、中身を確かめてみませんか? print_r($_REQUEST); 次に、 $FilePath = "./img/".src.".".GetExt($img_name); move_uploaded_file($img_temp,$FilePath); の2行ですが、ファイルサイズが大きかろうがなんだろうが実行されてしまうようなので、 if文の中に入れましょうか? if($img_tmp != "" and $img_size <= 30000){  $img_message = "名前は: $img_name <br>サイズは: $img_size <br>MIMEタイプは: $img_type <br>一時的に保存されているパスは: $img_tmp <br>";   //ここに移動させましょうか?   $FilePath = "./img/".src.".".GetExt($img_name);   move_uploaded_file($img_temp,$FilePath); } その中で、   $FilePath = "./img/".src.".".GetExt($img_name); ですが、 srcは何か、定義されているのでしょうか? 例えば、  define("src", "なにか"); のようにしてあるのであれば、OKだと思われますが、 そうでない場合で、変数だとするならば、 $src がいいかと思われます。ただし、何か、変数に文字列を代入する予定であったなら、 変数の宣言が漏れていますので、変数を宣言して、文字列を代入してから使われるのがいいかと思われます。 ただし、そうであっても無くても、この1行は間違っています。 $FilePath = "./img/".src.".".GetExt($img_name);  ↓ $FilePath = "./img/".$src.GetExt($img_name); かな?。。。。 srcには拡張子なしのファイル名を代入したかったのでしょうね。 GetExt($img_name)は拡張子を返していますね。 とにもこかくにも、こういう文字列のミスはPHPエディタなどのフリーソフトで、テキストに色をつけてもらうことで、 未然に防ぐことが可能です。 http://phpspot.net/php/phpeditor.html さて、さらに関数move_uploaded_file( string $filename , string $destination ) ですが、まともに動いてくれますか? PHPの公式HPでは動きますと書いてありますが、どうですか? その関数が書いてある.dllファイルがあったり無かったり、windows環境用には 実は作ってくれていなかったなんてオチはあるのでしょうか? 私には分かりません。とりあえずPHPを拡張してくれている人は私の何万倍も 賢くて、しっかりしていて、親切でいい人たちなのはまず間違いないでしょう。 ですが、ほとんどないとは思いますが、そういった人たちもたまに、 HPで紹介していることを忘れていたり、紹介通りに作っていないときがあるかと思います。 そういうことがあるのであれば、この関数、 テンポラリファイルをそのフォルダに移動させる関数とのことですね。 できない場合は、単純にコピーするのもありかと。。。 if(copy($_FILES[["img_path"]["tmp_name"], $FilePath)){ echo "アップロードに成功しました。"; }else{ echo "アップロードに失敗しました。"; } さらに動かなかった場合、 アップロードするサーバのフォルダなのですが、 パーミッションの設定を忘れる場合もありえると思います。

関連するQ&A