2009-12-12 26 views
1

我使用Uploadify上傳到服務器上的圖像。
圖像上傳並放置在Web服務器的臨時文件夾中。沒能獲得圖像文件的擴展

現在我需要用文件的工作beore將其移動到它的真正位置,我有以下代碼:

// 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. 
我不使用正則表達式來讀取文件名

,因爲用戶可能命名文件任何東西,所以我必須讀取文件數據。

任何sugegstions人嗎?

回答

2

好了,第一關$的資源文件應該是$_FILES['Filedata']['name']而不是$_FILES['Filedata']['tmp_name']只爲你的第一個解決方案

現在關於您的解決方案/問題:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION); //現在應該努力
  2. getimagesize()返回指示第二索引圖像類型
  3. 相同點2
恆定

請注意,exif_imagetype()返回的信息與getimagesize()的第二個索引完全相同,if你有權訪問這個函數,它應該表現得更好。

現在的圖像常數,最常見的三個是:

  • 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; 
} 

一兩件事,這是更好地使用getimagesize()/exif_imagetype(),而不是依賴於文件擴展名,因爲擴展可以很容易地改變。

+0

啊,所以這就是2意味着:)謝謝。 – Steven 2009-12-12 18:54:13

+0

我無法使用exif_imagetype,至少不是在我自己的計算機上。它沒有與我的PHP編譯(我使用v5.x)。我只接受'調用未定義的函數exif_imagetype()'。 (見下文我的評論鏈接) – Steven 2009-12-12 19:00:11

+0

如果您在Windows然後啓用以下順序擴展=中php_mbstring.dll 延長= php_exif.dll的dll,並確保我們正在編輯正確的php.ini文件。 – kta 2012-04-08 14:01:30

1

exif_imagetype()可以確定一些圖形格式,速度快,甚至不使用GD。

編輯:我看你已經在使用getimagesize(),並且無法翻譯常量。上面鏈接的exif_imagetype()頁面翻譯了所有返回的圖像類型,這些圖像類型也應該對getimagesize()有效。

+0

我只得到'調用未定義功能exif_imagetype()'。其他人也有類似的問題:http://www.ivorde.ro/PHP_Error_Call_to_undefined_function_exif_imagetype__on_FreeBSD-35.html和http://www.wampserver.com/phorum/read.php?2,34044 – Steven 2009-12-12 10:36:06

+0

thanx的信息....這真的很好。它決定使用圖像頭(Mime類型)的圖像類型,因此,即使一個GIF文件有一些其他的擴展,將您使用的是什麼版本的PHP檢測到的圖像作爲GIF圖像類型 – 2009-12-12 10:36:55

+0

@Steven。此功能適用於PHP 4.3.0及以上版本。 – 2009-12-12 10:38:41

2

你的解決方案,#2,#3都工作了。從the getimagesize() manual page

返回一個包含7個元素的數組。
...
索引2是表示圖像的種類的IMAGETYPE_XXX常數之一。因此,對於一個.gif

那麼這應該是整數2.要得到,因爲你已經在使用GD庫文件擴展名使用image_type_to_extension()。例如。

$img = getimagesize($sourceFile); 
$fileExt = image_type_to_extension($img[2]) 
+0

1爲image_type_to_extension(),然而IMAGETYPE_GIF = 1,不2. – 2009-12-13 06:49:50

+0

感謝指出了這一點。 – bearver 2009-12-17 12:23:51

相關問題