2013-03-22 31 views
6

Tôi đang sử dụng file_get_contents() để kéo một số hình ảnh từ máy chủ từ xa và tôi muốn xác nhận xem chuỗi kết quả có phải là hình ảnh JPG/PNG hay không trước khi xử lý tiếp, như lưu hình cục bộ và tạo ngón tay cái.PHP: Bạn sẽ kiểm tra xem chuỗi kết quả của file_get_contents() có phải là hình ảnh JPG không?

$string = file_get_contents($url); 

Bạn sẽ làm như thế nào?

+0

Điều này thì sao? http://stackoverflow.com/questions/1141227/php-checking-if-the-images-is-jpg – George

Trả lời

3

Bạn có thể sử dụng getimagesize()

$url = 'http://www.geenstijl.nl/archives/images/HassVivaCatFight.jpg'; 
$file = file_get_contents($url); 
$tmpfname = tempnam("/tmp", "FOO"); 
$handle = fopen($tmpfname, "w"); 
fwrite($handle, $file); 

$size = getimagesize($tmpfname); 
if(($size['mime'] == 'image/png') || ($size['mime'] == 'image/jpeg')){ 
    //do something with the $file 
    echo 'yes an jpeg of png'; 
} 
else{ 
    echo 'Not an jpeg of png ' . $tmpfname .' '. $size['mime']; 
    fclose($handle); 
} 

tôi chỉ thử nghiệm nó để nó hoạt động. Bạn cần tạo tệp tạm thời vì chức năng hình ảnh hoạt động với dữ liệu cục bộ và chỉ chấp nhận đường dẫn thư mục cục bộ như 'C: \ wamp2 \ www \ temp \ image.png'

Nếu bạn không sử dụng fclose($handle); PHP sẽ tự động xóa tmp sau khi tập lệnh kết thúc.

2

Bạn có thể sử dụng

exif_imagetype()

để đánh giá tập tin của bạn. Vui lòng kiểm tra hướng dẫn sử dụng php.

được sửa đổi:

Xin lưu ý rằng PHP_EXIF phải được bật. Bạn có thể đọc thêm về nó here

+0

PS: mở rộng PHP_EXIF phải được cài đặt và bật – HamZa

+1

@HamZaDzCyberDeV cảm ơn vì đã sửa, tôi đã chỉnh sửa nó như bạn đã nói . –

2

Tôi nhận được từ số này answer các bit bắt đầu cho hình ảnh JPG. Vì vậy, về cơ bản những gì bạn có thể làm là kiểm tra xem các bit bắt đầu có bằng nhau hay không:

$url = 'http://i.stack.imgur.com/Jh3mC.jpg?s=128&g=1'; 
$jpg = file_get_contents($url); 

if(substr($jpg,0,3) === "\xFF\xD8\xFF"){ 
    echo "It's a jpg !"; 
} 
+1

Đây là câu trả lời hay nhất cho câu hỏi này IMO vì nó không yêu cầu một chiến lược tập tin tạm thời hoặc các phần mở rộng được cài đặt. – jwhazel

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