1

Uploadify を使用して画像をサーバーにアップロードしています。
画像がアップロードされ、Web サーバーの一時フォルダーに配置されます。

ここで、ファイルを実際の場所に移動する前にファイルを操作する必要があり、次のコードがあります。

// Get the filepath and filename from server temp dir
$sourceFile   = $_FILES[ 'Filedata' ][ 'tmp_name' ]; // e.g. c:\server\path\tmp\php159.tmp

// Solution 1 for getting file extension
$fileExt1     = pathinfo($sourceFile, PATHINFO_EXTENSION); // <-- This only returns .tmp

// Solution 2 with getimagesize
list(,,$extension) = getimagesize($sourceFile);
$fileExt2     = $extension; // this only returns the number 2.

// Solution 3 with getimagesize
$img = getimagesize($sourceFile);
$fileExt3 = $img[2]; // this only returns the number 2.

ユーザーはファイルに任意の名前を付けることができるため、ファイルデータを読み取る必要があるため、ファイル名を読み取るために正規表現を使用していません。

誰か提案はありますか?

4

3 に答える 3

2

さて、最初に$ sourceFileを使用$_FILES['Filedata']['name']するのではなく、最初のソリューションのみを使用する$_FILES['Filedata']['tmp_name']必要があります。

今あなたの解決策/問題に関して:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION);//今すぐ動作するはずです
  2. getimagesize()2番目のインデックスの画像タイプを示す定数を返します
  3. ポイント2と同じ

exif_imagetype()の2番目のインデックスとまったく同じ情報を返すgetimagesize()ことに注意してください。この関数にアクセスできる場合は、パフォーマンスが大幅に向上するはずです。

ここで、画像定数について、最も一般的な3つは次のとおりです。

  • IMAGETYPE_GIF = 1
  • IMAGETYPE_JPEG = 2
  • IMAGETYPE_PNG = 3

チェックは次のようなことをするのと同じくらい簡単です:

switch (exif_imagetype($_FILES['Filedata']['tmp_name']))
{
    case IMAGETYPE_GIF:
        echo 'is a GIF';
    break;

    case IMAGETYPE_JPEG:
        echo 'is a JPEG';
    break;

    case IMAGETYPE_PNG:
        echo 'is a PNG';
    break;

    case default:
        echo 'is something else;
    break;
}

もう1つ、拡張子は簡単に変更できるため、ファイル拡張子に依存するよりもgetimagesize()/を使用する方が適切です。exif_imagetype()

于 2009-12-12T15:05:11.750 に答える
2

ソリューション#2と#3はどちらもすでに機能しています。getimagesize()のマニュアルページから:

7つの要素を持つ配列を返します。
...
インデックス2は、画像のタイプを示すIMAGETYPE_XXX定数の1つです。

したがって、.gifの場合、これは整数2になります。ファイル拡張子を取得するには、image_type_to_extension()すでにgdライブラリを使用しているので使用します。例えば。

$img = getimagesize($sourceFile);
$fileExt = image_type_to_extension($img[2])
于 2009-12-12T12:20:23.860 に答える
1

exif_imagetype()は、多数のグラフィック形式を判別でき、高速で、GD も使用しません。

編集: 既に getimagesize() を使用していて、定数の変換に問題があるようです。上にリンクされた exif_imagetype() ページには、返されたすべての画像タイプの翻訳があり、getimagesize() にも有効です。

于 2009-12-12T10:26:36.357 に答える