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

PHPで携帯サイトを制作中なのですが、メールで画像をアップロードする
ことができずに困っております。
具体的にはサーバーにファイル自体はアップロードされるのですが
img配下を見ると「ev4rVY(エンコードされたファイル名)」がサーバーにアップされているものの、拡張子がついていないのです。

▼画像アップロードプログラムPHPソース
// ユーザー&認証コードチェック
if ($user&&$auth_code==getAuthCode($user['id'], $user['auth_string'])) {
// 認証OK
// マルチパートの場合のみメールを解析して画像を取得
if (strtolower($structure->ctype_primary) == "multipart") {
$images = getImage($structure->parts);
}
$image_save_path = null;
// 画像リストの中から1つだけ画像を取得する
foreach ($images as $image) {
// コンテンツタイプのチェック
if ($image['type'] == 'image/jpeg'
|| $image['type'] == 'image/gif'
|| $image['type'] == 'image/png') {
// ファイルとして保存
// 一時ファイルパス
$temp_path = tempnam('/tmp', 'img_');
if ($temp_path == false) {
// error
break;
}
$fp = fopen($temp_path, 'w');
if ($fp == false) {
// error
break;
}
fwrite($fp, $image['body']);
fclose($fp);

// 画像の形式と縦横サイズを取得
list($width, $height, $type) = getimagesize($temp_path);

// 認識できる形式であれば、所定のメソッドで開く
$imageSource = null;
if ($type == IMAGETYPE_GIF) {
$imageSource = imagecreatefromgif($temp_path);
} else if ($type == IMAGETYPE_JPEG) {
$imageSource = imagecreatefromjpeg($temp_path);
} else if ($type == IMAGETYPE_PNG) {
$imageSource = imagecreatefrompng($temp_path);
}

// 一時ファイルを消す
unlink($temp_path);

if ($imageSource) {
// ファイル名決定
$path = tempnam($image_dir, '');
//unlink($path);
$image_save_path = $path;

// 画像をケータイディレクトリへファイル保存
imagejpeg($imageSource, $image_save_path);
imagedestroy($imageSource);
break;
}
}
}
▲以上ここまで━━━━━━━━━━━━━━━━━━━━━━━━━

開発環境:CentOS5
PHP Version 5.2.11

※本を参考に制作しているのですが
 本にはGD Graphics をダウンロードした方がよいと
 記載がありました。関係ありますでしょうか。

どなたかお分かりになる方がいらっしゃいましたらどうか
ご教授いただけませんでしょうか。

お願いいたします。

A 回答 (2件)

こんにちは。



$ext = ".jpg";
$imageSource = null;
if ($type == IMAGETYPE_GIF) {
$imageSource = imagecreatefromgif($temp_path);
$ext = ".gif";
} else if ($type == IMAGETYPE_JPEG) {
$imageSource = imagecreatefromjpeg($temp_path);
} else if ($type == IMAGETYPE_PNG) {
$imageSource = imagecreatefrompng($temp_path);
$ext = ".png";
}

//省略

$path = tempnam($image_dir, '');
$image_save_path = $path . $ext;

こんな感じでどうでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。

いただいたソースに修正させていただいたところ
無事.gif .jpgなどの拡張子がついた名前でアップロードできました。

本当にありがとうございました。

お礼日時:2009/11/29 00:09

tempnam()で画像の保存パスを決めているからですね。


これは一意のファイル名(とファイル)を作成する関数で、保存しようとしているファイルの形式が何かということとは何の関係もありません。
http://jp.php.net/manual/ja/function.tempnam.php

任意の名前で保存したければそのようにコーディングする必要があります。
    • good
    • 0
この回答へのお礼

UmJammer様

早速ご回答いただきましてありがとうございます!
いつも的確に教えていただきまして本当に感謝しております。

tempnam()の設定が間違っているのでしょうか。
ファイル名は一意のものでいいのですが
拡張子は
投稿ファイルがgifであればgif
pngであればpng
jpegであればjpeg

をファイル名の後につけたいのですが
その場合、どこを変更すればよろしいのでしょうか。

下記のような設定をおこえばよろしいでのでしょうか
http://mashimonator.weblike.jp/blog/2008/12/phpp …

お礼日時:2009/11/26 17:53

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