2012-01-09 36 views
5

Tôi đang cố gắng để sao chép vào máy chủ của tôi một hình ảnh từ một trang web khác và tôi có kế hoạch để sử dụngLàm cách nào để mở rộng hình ảnh bằng cách sử dụng php file_get_contents?

<? 
file_put_contents($toPath, file_get_contents($fromPath)); 
?> 

Ok, nhưng để xây dựng $toPath tôi cần phần mở rộng của tập tin. Tôi biết cách thực hiện nếu $fromPath là một đường dẫn bình thường với tên của tệp ở cuối, nhưng nếu tôi sử dụng đường dẫn như facebook sử dụng http://graph.facebook.com/user_id/picture?type=large làm cách nào để tôi có được tiện ích mở rộng?

Cảm ơn tất cả.

+0

Để tất cả những gì tôi trả lời, itryed: '$ file_info = finfo mới (FILEINFO_MIME); \t // cách tiếp cận hướng đối tượng! $ mime_type = $ file_info-> buffer (file_get_contents ($ fromPath)); // ví dụ. cung cấp "image/jpeg" echo $ mime_type; lối thoát(); HOẶC $ finfo = finfo_open (FILEINFO_MIME_TYPE); // return mime loại ala mimetype extension foreach (glob ("*") với tên $ filename) { echo finfo_file ($ finfo, $ filename). "\ n"; } finfo_close ($ finfo); HOẶC $ finfo = finfo_open (FILEINFO_MIME_TYPE); echo finfo_file ($ finfo, $ fromPath); 'NOTHING WORKS –

+0

Để @Kolink làm việc này '$ size = getimagesize ($ fromPath); $ extension = image_type_to_extension ($ size [2]); echo $ extension; ' –

Trả lời

8
$size = getimagesize($fromPath); 
$extension = image_type_to_extension($size[2]); 

Lấy kích thước hình ảnh, lấy loại tệp.

5

Trong PHP 5.3, bạn có thể sử dụng finfo_file(), xem PHP ref

file_put_contents($toPath, file_get_contents($fromPath)); 
$handle = fopen($toPath,'r'); 
print finfo_file($handle); 

cũng làm việc này cho hình ảnh không.

0

Không cần đoán hoặc sử dụng loại mime hoặc byte ma thuật. Biểu đồ facebook api luôn trả về jpegs (xem FB Profile Pic always returned as ".jpg"? để thảo luận).

Nhưng nói chung, đây là một tài liệu tham khảo cho thông minh loại tập tin phát hiện: http://designshack.net/articles/php-articles/smart-file-type-detection-using-php/

Nếu bạn có chỉ là một dòng byte, finfo_file() là bạn của bạn.

Nếu bạn có loại mime, chỉ cần sử dụng loại đó.

+0

Có vẻ như vấn đề là phiên bản PHP của tôi là 5.2.17 và finfo_file() chỉ hoạt động trong PHP> = 5.3.0 ... –

1

Đây là cách nhanh hơn @ Kolink của câu trả lời:

$extension= end(explode("/", image_type_to_mime_type(exif_imagetype($photoURL)))); 
Các vấn đề liên quan