2011-12-13 127 views
21

如何在使用PHP上傳圖像前檢查高度和寬度。使用PHP上傳圖像前檢查圖像尺寸(高度和寬度)

我必須先上傳圖片並使用「getimagesize()」嗎?或者我可以在使用PHP上傳之前檢查它?

<?php 

foreach ($_FILES["files"]["error"] as $key => $error) { 
if(
$error == UPLOAD_ERR_OK 
&& $_FILES["files"]["size"][$key] < 500000 
&& $_FILES["files"]["type"][$key] == "image/gif" 
|| $_FILES["files"]["type"][$key] == "image/png" 
|| $_FILES["files"]["type"][$key] == "image/jpeg" 
|| $_FILES["files"]["type"][$key] == "image/pjpeg" 
){ 


$filename = $_FILES["files"]["name"][$key]; 








if(HOW TO CHECK WIDTH AND HEIGHT) 
{ 
echo '<p>image dimenssions must be less than 1000px width and 1000px height'; 
} 


} 







?> 
+5

您不能檢查使用未上傳到服務器的PHP文件。如果它必須是PHP,這是不可能的。 – deceze

+1

猜猜我必須上傳它,如果它超過1000px,則爲「unlik」:)或者如果我可以讓它成爲選項,請使用JavaScript。 – Hakan

回答

4

您需要在實際上傳發生之前在客戶端上執行的操作。
使用(服務器端)php,您只能在文件上傳完成後檢查維度,或者在圖像上傳時(圖像文件頭數據),使用upload hooks檢查維度。

那麼你的選擇是一閃,也許HTML5以其FileAPI(沒有測試過,也許這不是可行的),Java的小程序,Silverlight中,......

5

如果該文件是$_FILES陣列中(因爲它是一個多形式被選中),它已經被上傳到服務器(通常是/ tmp或類似的文件路徑),這樣你可以先走一步並在php中使用getimagesize()函數來獲取尺寸(包括所有細節作爲數組)。

0
array getimagesize (string $filename [, array &$imageinfo ]) 

的和getimagesize()函數將確定任何給定圖像文件的大小,並返回尺寸以及要在常規HTML IMG標記和相應的HTTP內容類型中使用的文件類型和高度/寬度文本字符串。

更多更新,請訪問網站: http://www.php.net/manual/en/function.getimagesize.php

8

這是我如何解決它。

$test = getimagesize('../bilder/' . $filnamn); 
$width = $test[0]; 
$height = $test[1]; 

if ($width > 1000 || $height > 1000) 
{ 
echo '<p>iamge is to big'; 
unlink('../bilder/'.$filnamn); 
} 
+1

爲什麼在圖片上傳後檢查?然後花時間再次取消鏈接 –

74

我們可以很容易地用臨時文件做到這一點。

$image_info = getimagesize($_FILES["file_field_name"]["tmp_name"]); 
$image_width = $image_info[0]; 
$image_height = $image_info[1]; 
+6

這個答案應該被接受。 – igaurav

+0

是的,這個答案應該被接受.... –

+0

@哈坎你可以把這個作爲公認的答案嗎? – Tharanga

3

要得到圖像使用getimagesize(path_name)的寬度和高度,此函數返回其含有的高度,寬度,IMAGE_TYPE常數和其它圖像相關的信息的數組。通過以下代碼你可以實現。

注意 - 需要通過圖像的臨時位置,並使用下面的代碼段使用move_upload_file()之前,否則將文件移動到目標路徑,你不會得到想要的結果的圖像

$imageInformation = getimagesize($_FILES['celebrity_pic']['tmp_name']); 
print_r($imageInformation); 

$imageWidth = $imageInformation[0]; //Contains the Width of the Image 

$imageHeight = $imageInformation[1]; //Contains the Height of the Image 

if($imageWidth >= your_value && $imageHeight >= your_value) 
{ 
    //Your Code 
} 
0

非常重要的 - 如果你正在使用Dreamweaver中的代碼,並嘗試使用$_FILES[anyFormName][tmp_name]它會顯示在實時取景的錯誤來獲得圖像尺寸..我花了一段時間來弄清楚這一點。

+0

你是否將表單設置爲「multipart/form-data」? – Popsyjunior

3

這項工作對我來說

$file = $_FILES["files"]['tmp_name']; 
list($width, $height) = getimagesize($file); 

if($width > "180" || $height > "70") { 
    echo "Error : image size must be 180 x 70 pixels."; 
    exit; 
} 
+0

作爲一個良好的習慣,您還應該解釋一下您的答案,因爲它有助於理解 –

+0

@ Kumar:我認爲他的回答幾乎不言自明。 – Stefan

相關問題