アプリ版:「スタンプのみでお礼する」機能のリリースについて

php初心者です

簡単な画像アップロードを付けたいと思っています

それでアップだけはなんとかできたのですが、もう少し機能を付けたいです

付けたい機能は

1.拡張子を調べて限定したい。gif、jpg、pngの三つを許可したい

2.画像の横と縦の幅が指定した幅より大きければ、指定した幅まで縦横比維持で縮小 100*100

3.もう一つのディレクトリに、小さいサムネイルを作りたい。大きさは32*32です

4.拡張子はそのままにして画像の名前をリネームしたいです

よろしくお願いします(_ _








<?php
$img_name = $_FILES["upfile"]["name"];
$img_size = $_FILES["upfile"]["size"];
$img_type = $_FILES["upfile"]["type"];

if($_REQUEST["up"] != ""){

if($img_tmp != "" and $img_size <= 50000){
$img_message = "名前は: $img_name <br>サイズは: $img_size <br>MIMEタイプは: $img_type";

if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) {
chmod("files/" . $_FILES["upfile"]["name"], 0604);
print $_FILES["upfile"]["name"] . "をアップロードしました。";
} else {
print "ファイルをアップロードできません。";
}
} else {
print "ファイルが選択されていません。";
}
}else{
$size_error = "サイズが大きすぎます";
}

}
?>

<html>
<head>
<title>画像アップロード</title>
</head>
<body>

<form name="form" action="" method="POST" ENCTYPE="MULTIPART/FORM-DATA">
<input name="upfile" type="file" size="40">
<input name="up" type="submit" value="アップロード"><hr>
</form>

<?php print($size_error); ?><?php print($img_message); ?>
</body>
</html>

A 回答 (3件)

追記しました。

    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます
画像アップできるようになりました

お礼日時:2013/07/18 07:14

ファイル名をチェックしたり、$_FILES['upfile']['type']を見るだけでは、受け取るファイルの種類を制限するには判定が甘すぎます。


getimagesize関数やfinfoクラスを利用する必要があります。

サンプル
http://qiita.com/mpyw/items/73ee77a9535cc65eff1e
    • good
    • 0
この回答へのお礼

お答え頂きありがとうございます
phpのバージョンが5.2.5だったので表示できませんでしたorz

お礼日時:2013/07/17 16:24

>1.拡張子を調べて限定したい。

gif、jpg、pngの三つを許可したい

$_FILES["upfile"]["name"]の文字列から後ろ4文字抜き出してチェックすればよいでしょう

>2.画像の横と縦の幅が指定した幅より大きければ、指定した幅まで縦横比維持で縮小 100*100

できればPEAR::Image_Transformあたりを使うとかなり楽にできます
scaleByLength(n)を利用すると、アップしたファイルの縦横長いほうの長さを
nにリサイズできます。

http://pear.php.net/manual/ja/package.images.ima …

>3.もう一つのディレクトリに、小さいサムネイルを作りたい。大きさは32*32です
同上

>4.拡張子はそのままにして画像の名前をリネームしたいです

単純に画像名を変更するだけですね
逆に「リネームしたい」といわれてもどう名前を変えたいのか提示されていないので
どうしようもないですね。
日時(マイクロ秒)を利用したり、テンポラリの名前をそのまま利用したり好きに
すればいいでしょう。

なおリネームというよりは、テンポラリファイルを所定のフォルダに名称をつけて
コピー(移動?)をするというのが正しいかもしれません。

http://www.php.net/manual/ja/function.move-uploa …
    • good
    • 0
この回答へのお礼

回答ありがとうございます
みなさんのおかげでアップできるようになりました

お礼日時:2013/07/18 07:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!