プロが教える店舗&オフィスのセキュリティ対策術

画像をアップロードした際にリサイズするプログラムを作っています。
jpegとgif形式アップロードを考えています。jpegのアップロードは
うまく作動しますが、gifをアップロードしても画像はサーバにアップできるのですが、縮小処理がされていません。
その際に表示されるエラーは以下です。

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /***/***/***/***/***/uploader.php on line 82

Warning: imagegif(): supplied argument is not a valid Image resource in /***/***/***/***/***/uploader.php on line 83

■ソースは以下です。
フォーム部分
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES); ?>" method="post" enctype="multipart/form-data">
<table class="main1 table001" align="center" cellpadding="5" cellspacing="0">
<tr>
<th nowrap>画像ファイル1<br>(gif,jpgのみ)</th>
<td nowrap><input type="file" name="gra1" size="50"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="confirm" value="  確認画面へ  " /><input type="submit" name="reset" value="リセット" /></td>
</tr>
</table>
</form>

縮小処理部分
//写真ファイルのアップロード処理
if(strlen($gra1) > 0 ) {
//アップロードされたテンポラリファイルの情報を取得します
$fileinfo = pathinfo($gra1);
//debug($fileinfo);
$fileext = strtoupper($fileinfo[extension]);

if ($gra1_size > $MAX_FILESIZE || $gra1_size == 0) {
//アップロードファイルのサイズ上限をチェックします
$error=1;
$error_mes .= "画像1のサイズが大きすぎます。".$FILESIZE_COM."以下にしてください。<br />";
}elseif ($fileext != "JPG" && $fileext != "GIF") {
//アップロードファイルの拡張子をチェックします
$error=1;
$error_mes .= "JPG、GIF形式以外の写真ファイルは登録できません。<br />";
}else {
$mictime = microtime();
if($fileext=="JPG"){$imagefile1 = substr($mictime, 11) . substr($mictime, 2, 6) . ".jpg";}else if($fileext=="GIF"){$imagefile1 = substr($mictime, 11) . substr($mictime, 2, 6) . ".gif";}

//テンポラリファイルを一時フォルダに名前を変えて移動します
if (move_uploaded_file($_FILES['gra1']['tmp_name'], "$H_PHOTOTMP$imagefile1")) {
//画像縮小処理
$sfn1="$H_PHOTOTMP$imagefile1";//読み込みファイル名
$dfn1="$H_PHOTOTMP$imagefile1";//書き出しファイル名
list($lw1,$lh1,$type1,$attr1) = getimagesize($sfn1);//画像情報取得
if($type1==2){//JPGならば処理
$sw1=$lw1*0.1;//サイズは縦横10%に
$sh1=$lh1*0.1;
$im_in1 = @imagecreatefromjpeg($sfn1); //元画像の読み込み
$im_out1 = @imagecreatetruecolor($sw1,$sh1); //縮小画像の作成
imagecopyresampled($im_out1,$im_in1,0,0,0,0,$sw1,$sh1,$lw1,$lh1);//縮小コピー
imagejpeg($im_out1,$dfn1);//ディスクに出力
//debug($dfn);
}else if($type1==1){//GIFならば処理
$sw1=$lw*0.1;//$lw1*0.1;//サイズは縦横10%に
$sh1=$lw*0.1;//$lh1*0.1;
$im_in1 = @imagecreatefromgif($sfn1); //元画像の読み込み
$im_out1 = @imagecreatetruecolor($sw1,$sh1); //縮小画像の作成
imagecopyresampled($im_out1,$im_in1,0,0,0,0,$sw1,$sh1,$lw1,$lh1);//縮小コピー
imagegif($im_out1,$dfn1);//ディスクに出力
//debug($dfn);
}
//画像縮小処理ここまで
}else{
$error=1;
$error_mes .= "写真ファイル1のアップロードに失敗しました。<br />";
}
}
}

になります。
ご教授のほど宜しくお願い致します。

A 回答 (4件)

以下の部分の$lwという変数は突然でてきているのですが、どこかで定義されているのでしょうか。



$sw1=$lw*0.1;//$lw1*0.1; //サイズは縦横10%に
$sh1=$lw*0.1;//$lh1*0.1;

でなければ$sw1、$sh1は0となり以降のimagecreatetruecolorに失敗しているはずです。
imagecreatetruecolorの@を外して確認してみてください。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

こっちの確認ミスでした。
$sw1=$lw*0.1;//$lw1*0.1; //サイズは縦横10%に
$sh1=$lw*0.1;//$lh1*0.1;
変数の入力ミスです
$lw→$lw1

修正したらちゃんと動きました。
ありがとうございます。

お礼日時:2009/07/31 08:54

警告メッセージ通りで、設定しているパラメータがおかしいです。


良く確認しましょう。
    • good
    • 0

お使いのPHPでGIFはサポートされていますか


phpinfo( )で確認してみてはどうでしょう
「アップロードしたGIF画像を縮小」の回答画像2

この回答への補足

確認はしましたが
サポートされています

補足日時:2009/07/27 11:44
    • good
    • 0

>supplied argument is not a valid Image resource


ということで、imagecreatefromgifが正常にGIF画像を生成できてないのではないでしょうか。
imagecreatefromgif関数の前に「@(エラー制御子)」が付加されているので、これをはずした場合に、何らかのエラーは出てきませんか?

また、一度アップロードするGIF画像も別のものに変更してから行ってみてはどうでしょう。

この回答への補足

ちなみに画像を変えてみても結果は同じです。

imagecreatefromgif関数の前の「@(エラー制御子)」をはずした場合も
同じエラー表示になりました。

これ以上無理なのでしょうか?

補足日時:2009/07/26 20:55
    • good
    • 0

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