2011-12-13 29 views
21

Làm cách nào để kiểm tra chiều cao và chiều rộng trước khi tải hình ảnh lên bằng PHP.Kiểm tra kích thước hình ảnh (chiều cao và chiều rộng) trước khi tải lên hình ảnh bằng cách sử dụng PHP

Tôi phải tải lên hình ảnh trước tiên và sử dụng "getimagesize()"? Hoặc tôi có thể kiểm tra điều này trước khi tải nó lên bằng PHP không?

<?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

Bạn không thể kiểm tra một tập tin sử dụng PHP mà không được tải lên máy chủ. Nếu nó phải là PHP, điều đó là không thể. – deceze

+1

Đoán tôi phải tải lên nó sau đó, và "unlik" nó nếu nó vượt quá 1000px :) Hoặc sử dụng JavaScript nếu tôi có thể làm cho nó một lựa chọn. – Hakan

Trả lời

4

Bạn cần một thứ được thực thi trên máy khách trước khi quá trình tải lên thực sự xảy ra.
Với php (phía máy chủ), bạn có thể kiểm tra kích thước chỉ sau khi tệp được tải lên hoặc với upload hookscó thể là trong khi hình ảnh được tải lên (từ dữ liệu tiêu đề của tệp hình ảnh).

Vì vậy, lựa chọn của bạn là flash, có lẽ html5 với FileAPI của nó (chưa được thử nghiệm đó, có lẽ đó là không khả thi), java applet, Silverlight, ...

5

Nếu tập tin là trong mảng $_FILES (vì nó được chọn ở dạng dung nhiều), nó đã được tải lên máy chủ (thường là để/tmp hoặc đường dẫn tập tin tương tự) vì vậy bạn chỉ có thể đi trước và sử dụng hàm getimagesize() trong php để lấy kích thước (bao gồm tất cả các chi tiết như mảng).

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

Các getimagesize() chức năng sẽ xác định kích thước của bất kỳ tệp hình ảnh cụ thể nào và trả về kích thước cùng với loại tệp và chuỗi văn bản chiều cao/chiều rộng được sử dụng bên trong thẻ HTML IMG bình thường và loại nội dung HTTP tương ứng.

Để biết thêm cập nhật lần trang web: http://www.php.net/manual/en/function.getimagesize.php

8

Đây là cách tôi giải quyết nó.

$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

Tại sao kiểm tra sau khi hình ảnh đã được tải lên? và sau đó dành thời gian để hủy liên kết lại –

74

Chúng tôi có thể làm điều này với tệp tạm thời dễ dàng.

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

Câu trả lời này phải được chấp nhận chắc chắn. – igaurav

+0

Có câu trả lời này nên được chấp nhận .... –

+0

@Hakan bạn có thể làm điều này làm câu trả lời được chấp nhận không? – Tharanga

3

Để có được chiều rộng và chiều cao của việc sử dụng hình ảnh getimagesize(path_name), chức năng này sẽ trả về mảng chứa các chiều cao, chiều rộng, image_type liên tục và khác hình ảnh thông tin liên quan. Bằng mã sau bạn có thể đạt được điều đó.

Note - Cần phải vượt qua vị trí tạm thời của hình ảnh, và sử dụng đoạn mã sau đây trước khi bạn sử dụng move_upload_file(), ngược lại nó sẽ di chuyển tập tin vào con đường đích và bạn sẽ không có được kết quả mong muốn cho hình ảnh

$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

Rất quan trọng - nếu bạn đang sử dụng Dreamweaver để mã và bạn cố gắng lấy kích thước hình ảnh bằng cách sử dụng $_FILES[anyFormName][tmp_name] nó sẽ hiển thị lỗi trong chế độ xem trực tiếp .. Tôi mất một thời gian để tìm hiểu điều này.

+0

bạn có đặt biểu mẫu của mình là "multipart/form-data" không? – Popsyjunior

3

Công việc này đối với tôi

$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

Thực hành tốt, bạn cũng nên giải thích câu trả lời của bạn một chút vì nó giúp hiểu được –

+0

@ Kumar: Tôi nghĩ câu trả lời của anh ấy khá tự giải thích ... – Stefan

Các vấn đề liên quan