• 締切済み

画像アップロードの拡張子制限

いつもお世話になっています。 現在画像アップローダーを作っているのですがサイズ制限を100KBまで、拡張子は「gif.jpeg.jpg.png」のみに限定したいのですが可能でしょうか? 拡張子を意図的に偽装してくる場合でもエラーを表示させるようにしたいと思っています。 【現在のソース】 <?php //保存名 $pict_id = aaaa; //画像のコピー copy($_FILES["userfile"]["tmp_name"],"./photo/$pict_id.jpg"); //画像のリサイズ $img = "http://www.xxxxx.jp/photo/$pict_id.jpg"; // 読み込む画像のアドレス $outfile = "./photo/$pict_id.jpg"; $size = 145 ; // リサイズするサイズ (大きい方の幅をこれに合わせる) if (!($irc = @imagecreatefromjpeg($img))) // jpeg として読み込んでみる if (!($irc = @imagecreatefrompng($img))) // png として読み込んでみる $irc = @imagecreatefromgif($img) ; // gif として読み込んでみる if (!$irc) { // 画像が正しく読み込めなかったときの処理 // エラー画面へ $headerLink = "./error.html"; header("Location: ".$headerLink); } if (imagesx($irc) > imagesy($irc)) { $rrc = imagecreatetruecolor($size, $size * imagesy($irc) / imagesx($irc)) ; } else { $rrc = imagecreatetruecolor($size * imagesx($irc) / imagesy($irc), $size) ; } imagecopyresampled($rrc, $irc, 0, 0, 0, 0, imagesx($rrc), imagesy($rrc), imagesx($irc), imagesy($irc)) ; //保存 imagejpeg( $rrc , $outfile ); //出力 header("Content-type: image/jpeg"); // ロケーション $headerLink = "./ok.html"; header("Location: ".$headerLink); ?>

  • PHP
  • 回答数1
  • ありがとう数8

みんなの回答

回答No.1

getimagesize($filepath) で、画像情報を配列で返してくれます。 詳細はご自分で調べてください

関連するQ&A

  • 透過合成した画像からの縮小コピーで黒塗りに!

    PHPの処理によって透過処理した画像と画像を合成して出来た画像(test.png)を単純に小さいサイズのPNG画像として コピーしたいのですが、黒塗りになってしまい、調べながら思考錯誤してみましたができません。 分かる方、どうかお知恵を貸して下さい。 下記は、黒塗りになってしまうソースです。 <?php $img = 'http://www.angelito.biz/test.png' ; // 読み込む画像のアドレス $size = 100 ; // リサイズするサイズ (大きい方の幅をこれに合わせる) if (!($irc = @imagecreatefromjpeg($img))) // jpeg として読み込んでみる if (!($irc = @imagecreatefrompng($img))) // png として読み込んでみる $irc = @imagecreatefromgif($img) ; // gif として読み込んでみる if (!$irc) { // 画像が正しく読み込めなかったときの処理 echo '×' ; exit ; } if (imagesx($irc) > imagesy($irc)) { $rrc = imagecreate($size, $size * imagesy($irc) / imagesx($irc)) ; } else { $rrc = imagecreate($size * imagesx($irc) / imagesy($irc), $size) ; } imagecopyresampled($rrc, $irc, 0, 0, 0, 0, imagesx($rrc), imagesy($rrc), imagesx($irc), imagesy($irc)) ; // jpgeg 画像として出力 header('Content-type: image/png') ; imagepng($rrc) ; ?> ■環境 windows vista xampp/apache 2.2.4 PHP Version 5.2.3

    • ベストアンサー
    • PHP
  • IEで「名前を付けて画像を保存」すると拡張子jpgがjpegになってしまう

    Windows 2000 SP4 で IE6.0 を使っています。 いつの頃からか、拡張子が .jpg になっているJPEG画像を「名前を付けて画像を保存」すると、拡張子が .jpeg になってしまうという現象が起きています。たとえば pict.jpg を保存しようとすると、ファイル名を指定するダイアログに表示される初期値は、下記のように pict.jpeg になってしまいます。 ファイル名:pict.jpeg ファイルの種類:JPEG(*.jpg) 画像のプロパティを見てもHTMLソースを見ても pict.jpg なのに、保存ダイアログには pict.jpeg という初期値がセットされます。 JPEGファイルを直接表示するリンク(URLの末尾が ~~/pict.jpg で終わる)を表示しても、「名前を付けて画像を保存」すると pict.jpeg が初期値になります。 JPEGファイルを直接表示するリンクを右クリックして、「対象をファイルに保存」しても、.jpeg になってしまいます。 ここで pict.jpg に直して保存すれば、.jpg で保存されるので致命的ではないのですが、数が多いときは面倒です。.jpg でないと扱えないソフトも有るので、とりあえず .jpeg のまま保存して、フリーウェアで拡張子を一気に .jpg に変更しています。 どうして .jpeg に変えられてしまうのでしょうか。

  • アップロードした画像を表示するには

    アップロードした画像を表示したいと考えてます。アップロードは非同期 なので、アップロードを実行するchild.phpで画像表示の処理もして、アッ プロードの命令を出すparent.phpに画像の表示を行います。 ---- child.php(一部) ---- move_uploaded_file($_FILES["upload_file"]["tmp_name"], $image_name); echo '<img src="' . $image_name . '" width="100" height="100">'; これで成功します。ただ画像を常に同じ場所に表示したくechoの部分を以下 のように書き換えると失敗します。 echo '<script>'; echo 'document.getElementById("pict").src="' . $image_name . '.jpg";'; echo '</script>'; ---- parent.php(一部) ---- <img src="" id="pict"> クロームのDevToolsで調べるとElementsでは以下のようにsrcに何もなく失敗してます。 <img src id="pict"> ところがSourcesでは「Cannot set property 'src' of null」とエラーが出ているのに 以下のようにsrcには画像名は入ってます。 <script>document.getElementById("pict").src="./image1/bfbiD.jpg";</script> なお同名の画像はきちんとアップロードしてます。対策があれば教えてもら えないでしょうか。

    • ベストアンサー
    • CSS
  • ★PHP?★画像を縦横比を変えずに表示

    画像を縦横比を変えずに表示したいです。 簡単な方法を教えてください。 PHPで作成してます。 下記の画像のサイズはバラバラです。 150*150の正方形の中に全て収めたいです。 <table> <tbody> <tr> <td><img id="imgtf" src="photo1.jpg" alt="" /></td> <td><img id="imgtf" src="photo2.jpg" alt="" /></td> <td><img id="imgtf" src="photo3.jpg" alt="" /></td> <td><img id="imgtf" src="photo4.jpg" alt="" /></td> <td><img id="imgtf" src="photo5.jpg" alt="" /></td> </tr> </tbody> </table> 何か方法はありますでしょうか?

    • ベストアンサー
    • PHP
  • 画像リサイズアップロード

    画像アップロードするプログラムを作成したのですが、元画像を指定したサイズ(アスペクト比を維持)させて画像をアップロードする方法を何度かトライしたのですが、経験浅く断念しています。GDで処理させる方法がベストと思っていますが、下記のサンプルコードを手直しお願いしていただけるか、下記と同様な手順での処理方法に類似したサイトがあれば教えてください。 処理の条件 ・元画像を指定サイズでアスペクト比を維持した状態でリサイズ ・元画像は削除? ・透過Gifも使えるといいです。 ・その他アドバイス if(is_uploaded_file($img)){ $imagesize = getimagesize($img); switch($imagesize[2]){ case 1: $img_name = $code . ".gif"; break; case 2: $img_name = $code . ".jpg"; break; case 3: $img_name = $code . ".png"; break; default: unlink($img); } if($img_name){ $sendpath = $path.$img_name; if(move_uploaded_file($img, $sendpath)){ $img_name = $img_name; } } }

    • ベストアンサー
    • PHP
  • 画像のリサイズの仕方について

    <? class Resize { function resize_exec($in, $out, $x, $y){ $img_in = imagecreatefromjpeg($in); $ix = imagesx($img_in); $iy = imagesy($img_in); $img_out = imagecreatetruecolor($ix, $iy); ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $x, $y, $ix, $iy); $quality = 100;//画質クオリティ(標準値 75) imagejpeg($img_out, $out, $quality); imagedestroy($img_in); imagedestroy($img_out); } } ?> というクラスを作成して コンストラクタ内でnewして $this->resize->resize_exec($upfile, $sendpath, 50, 30); としたのですが、リサイズできません。 どこか悪いでしょうか? 対象画像はとりあえずjpegでいいかなと考えています。

    • ベストアンサー
    • PHP
  • 画像切り換えでTransitionをかけたい。

    フリーソースでの応用なのですが 次のJavaScriptで画像の自動切り換え表示に Transitionをかけたいのですが、知識がなくてわかりません。 アドバイスをお願いいたします。 <SCRIPT LANGUAGE="JavaScript"> <!-- var num = 1; function timer () { if(document.img.complete) { document.img.src = "photo" + num + ".jpg"; num++; if(num > 5) num = 1; } setTimeout("timer()", 1000); } //--> </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function viewSource(){ location = "view-source:" + window.location; } </SCRIPT> ----------- <BODY onload="setTimeout('timer()', 2000);"> <IMG SRC="photo1.jpg" NAME="img"> -----------

  • 画像がアップロードできない

    脳内メーカーからダウンロードした画像をミクシィにアップロードしようと思っているのですが、できないんです。 どうしてでしょう? ファイルはjpgまたはjpeg形式にしてますし、画像のサイズも大きくありません。

  • 画像の先読み

    画像の先読み 拡大画像の表示場所とサムネイルの表示場所がありサムネイルをクリックすると拡大画像の場所にクリックしたサムネイルが拡大表示されるものを作っています。 以下のソースで試しており動作は問題ないのですが動作がぎこちないです。 具体的にはサムネイルをクリックすると拡大画像の場所がフェードアウトしフェードインします。 ※ここまでは正常 フェードインしたかと思いきやクリックする前の画像が1秒程表示されその後クリックした画像に切り替わる感じでフェードの効果が全く無意味になってしまいます^^; 事情があり画像の出力をphpで行っているのが原因かと思ったのですが単純にキャッシュの問題かとも思い画像の先読みなどを組み込めればいいのですがどのようにすれば可能でしょうか? [html] <p id="imgMain"><img src="resize.php?file=/imgimg01.jpg" alt="" id="target" /></p> <ul id="gallery"> <li><a href="resize.php?file=/img/img01.jpg" ><img src="resize.php?file=/img/img01.jpg&amp;x=173" alt="" /></a></li> <li><a href="resize.php?file=/img/img02.jpg"><img src="resize.php?file=/img/img02.jpg&amp;x=173" alt="" /></a></li> <li><a href="resize.php?file=/img/img03.jpg"><img src="resize.php?file=/img/img03.jpg&amp;x=173" alt="" /></a></li> </ul> [js] $(document).ready( function() { $("#gallery a img") .fadeTo(1, 1) .hover( function() { $(this).fadeTo(200, 0.5); }, function() { $(this).fadeTo(500, 1); } ) $("#gallery a").click(function() { var changeSrc = $(this).attr("href"); $("#target").fadeOut( "slow", function() { $(this).attr("src", changeSrc); $(this).fadeIn(); } ); return false; }); });

  • 画像のアップに関して

    画像のアップロードしたいのですが、 下記の記述方法でアップしようとすると エラーメッセージで 「Warning: imagejpeg() [function.imagejpeg]: Unable to open '../members/img/38.jpg' 」 と表示されてうまく行きません。初歩的なミスかもしれませんが 御指導お願い致します。 なお下記の  $upload = "../members/img/";  $new_pic = "../members/img/"; を  $upload = "./img/";  $new_pic = "./img/"; とうまく表示されるのですが、どうしてかわかりません。 御指導お願い致します。 if ( $_SERVER['REQUEST_METHOD'] == "POST" ) { $target = $_FILES['MyUploadFile']['name']; $target = strtoupper($target); $ext = array("JPG","JPEG"); $file_ok = false; foreach( $ext as $Value ) { $target2 = basename( $target, $Value ); if ( strlen( $target2 . $Value ) == strlen( $target ) ) { $file_ok = true; break; } } if ( $file_ok ) { if ( is_uploaded_file( $_FILES['MyUploadFile']['tmp_name'] ) ) { $upload = "../members/img/"; $upload .= $_FILES['MyUploadFile']['name']; $new_pic = "../members/img/"; $new_pic .= $job_id .".jpg"; # テンポラリディレクトリにある実際のファイル $file = $_FILES['MyUploadFile']['tmp_name']; # ファイルの属性等を取得 $target = getimagesize( $file ); # 現在のサイズ $width = $target[0]; $height = $target[1]; # 新しいサイズ $width_new = 250; $height_new = (int)( ($height/$width)*$width_new ); # JPEG の場合 if ( $target[2] == IMAGETYPE_JPEG ) { # 元のファイルのハンドル $jpeg = imagecreatefromjpeg ( $file ); # 新しいイメージ $jpeg_new = imagecreatetruecolor( $width_new, $height_new ); # サイズ変更して新しいイメージへ転送 $ret = imagecopyresampled( $jpeg_new, $jpeg, 0, 0, 0, 0, $width_new, $height_new, $width, $height ); if ( !$ret ) { print "サイズ変更に失敗しました\n"; return; } # JPEG ファイルとして、クオリティ 100 で出力 $ret = imagejpeg ( $jpeg_new, $new_pic, 100); if ( !$ret ) { print "ファイル作成に失敗しました\n"; return; } print "アップロードが完了しました\n"; print "<IMG src='$new_pic'>"; } } else { print "アップロードに失敗しました\n"; } } }

    • ベストアンサー
    • PHP

専門家に質問してみよう