Có ánh xạ nhanh chóng và bẩn của các loại MIME đến các phần mở rộng trong PHP mà tôi có thể sử dụng không?Làm cách nào để xác định (các) tiện ích được liên kết với loại MIME bằng PHP?
Trả lời
Không built-in, nhưng nó không phải là terribly khó để cuộn của riêng bạn:
function system_extension_mime_types() {
# Returns the system MIME type mapping of extensions to MIME types, as defined in /etc/mime.types.
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
foreach($parts as $part)
$out[$part] = $type;
}
fclose($file);
return $out;
}
function system_extension_mime_type($file) {
# Returns the system MIME type (as defined in /etc/mime.types) for the filename specified.
#
# $file - the filename to examine
static $types;
if(!isset($types))
$types = system_extension_mime_types();
$ext = pathinfo($file, PATHINFO_EXTENSION);
if(!$ext)
$ext = $file;
$ext = strtolower($ext);
return isset($types[$ext]) ? $types[$ext] : null;
}
function system_mime_type_extensions() {
# Returns the system MIME type mapping of MIME types to extensions, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
if(!isset($out[$type]))
$out[$type] = array_shift($parts);
}
fclose($file);
return $out;
}
function system_mime_type_extension($type) {
# Returns the canonical file extension for the MIME type specified, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
#
# $type - the MIME type
static $exts;
if(!isset($exts))
$exts = system_mime_type_extensions();
return isset($exts[$type]) ? $exts[$type] : null;
}
Tôi nghĩ đây là câu trả lời cũ. Bây giờ bạn nên sử dụng 'fileinfo' http://www.php.net/manual/en/ref.fileinfo.php –
@ JorgeB.G. Điều đó đòi hỏi rằng các tập tin tồn tại, phải không? – danronmoon
@danronmoon. có nó. – Qix
Nếu bạn muốn sử dụng một webservice, tôi vừa tạo này như một phần của Mimetype tôi < -> dịch vụ biểu tượng
Ví dụ:
Nó chạy trên appengine vì vậy nó phải có sẵn sàng cao.
-1; không cần sử dụng dịch vụ web cho việc này khi nó có thể đạt được cục bộ, nó không cho phép ánh xạ các loại MIME * tới * mở rộng (những gì OP yêu cầu), và dịch vụ web vì nó hiện thiếu các phần mở rộng mà địa phương của tôi Tệp 'mime.types' trên một cài đặt Ubuntu thông thường hiểu, như' .woff'. –
Điều hướng đến http://stdicon.com tạo ra lỗi cho tôi. Liên kết đến pastebin: http://pastebin.com/BjkGRv7H. Cần lưu ý rằng bản thân dịch vụ hoạt động OK. – starbeamrainbowlabs
Bạn có thể sử dụng mime_content_type
nhưng không được dùng nữa. Sử dụng fileinfo
thay vì:
function getMimeType($filename) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mime;
}
Cần lưu ý rằng OP thực sự được yêu cầu ánh xạ các loại MIME * tới * mở rộng tệp. Điều này vẫn bao gồm các trường hợp sử dụng phổ biến nhất (và có lẽ là một trong những OP đã phải đối mặt với), do đó, nó chắc chắn xứng đáng để tồn tại và tôi đã +1 nó, nhưng nó không * đúng một câu trả lời cho câu hỏi đã được hỏi như pedantically được giải thích. –
Lưu ý: 'finfo_file()' và 'mime_content_type()' yêu cầu tệp đó tồn tại. – Pang
Ở đâu nó nói rằng nó không được chấp nhận? – Greg
Nếu bạn đang làm việc với các phần mở rộng khác nhau hạn chế của hình ảnh và cần một cái gì đó rất đơn giản, tôi nghĩ rằng điều này là đủ.
switch($info['mime'])
{
case 'image/gif' : $extension = 'gif'; break;
case 'image/png' : $extension = 'png'; break;
case 'image/jpeg' : $extension = 'jpg'; break;
default :
throw new ApplicationException('The file uploaded was not a valid image file.');
break;
}
Bạn có thể muốn sử dụng thư viện này: https://github.com/ralouphie/mimey
Ví dụ sử dụng:
$mimes = new \Mimey\MimeTypes;
// Convert extension to MIME type:
$mimes->getMimeType('json'); // application/json
// Convert MIME type to extension:
$mimes->getExtension('application/json'); // json
này vì rõ ràng là chất lượng của các chức năng PHP cung cấp là không rõ ràng.
sử dụng tập tin này: https://github.com/ralouphie/mimey/blob/develop/mime.types.php
như thế này:
$mimes=include('mime.types.php');
hoặc sao chép nội dung:
$mime= array (
'mimes' =>
array (
'ez' =>
array (
0 => 'application/andrew-inset',
),
'aw' =>
array (
0 => 'application/applixware',
),
'atom' =>
array (
0 => 'application/atom+xml',
),
'atomcat' =>
array (
0 => 'application/atomcat+xml',
)
...
và một ví dụ về việc từ một dòng:
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mime=$finfo->buffer($data);
$mimes=include(__DIR__."/mime.types.php");
echo ($mime); //mime
echo ($mimes['extensions'][$mime]); // file extension
- 1. Làm cách nào để liên kết nhiều tiện ích với một "liên kết" trong Tkinter?
- 2. AngularJS cách liên kết dữ liệu với tiện ích SVG
- 3. Cách nhận tiện ích mở rộng mặc định cho một loại nội dung nhất định?
- 4. Phát hiện loại MIME trong PHP
- 5. Làm cách nào để nhận Thông tin Loại tệp dựa trên tiện ích mở rộng? (không phải MIME) trong C#
- 6. Loại mime và tiện ích mở rộng tốt nhất để sử dụng khi xuất tab được phân tách là gì?
- 7. Tôi làm cách nào để phát hiện loại mime của tab hiện tại trong tiện ích Google Chrome?
- 8. Làm cách nào để kết nối một biến với tiện ích Entry?
- 9. Loại tệp Microsoft Office 2007, loại Mime và xác định các ký tự
- 10. Đường ray: Làm cách nào để xác định tiện ích mở rộng liên kết trong mô-đun được đưa vào mô hình AR của tôi?
- 11. Cách xác định loại tệp MIME theo nội dung?
- 12. Ứng dụng có được liên kết với tiện ích mở rộng đã cho không?
- 13. Tài nguyên được hiểu là Khác nhưng được chuyển với loại MIME không xác định
- 14. Tải tệp lên: Cách loại trừ loại MIME bằng cách sử dụng xác nhận?
- 15. Cách xác định thư mục của tiện ích mở rộng
- 16. Làm cách nào để liên kết các phần tử mới bằng cách loại trực tiếp?
- 17. Làm cách nào để kết hợp html với tiện ích gwt?
- 18. Tôi làm cách nào để khởi chạy Chrome bằng tiện ích mở rộng được giải nén?
- 19. Làm cách nào để truyền tệp phương tiện bằng PHP?
- 20. Làm cách nào để buộc Facebook JS-SDK hiển thị các tiện ích được thêm động?
- 21. Làm thế nào tôi có thể xác định loại mime của tài liệu bằng cách sử dụng javascript?
- 22. Làm cách nào để tạo số đối số kiểm soát ZEND_BEGIN_ARG_INFO_EX, được chuyển đến tiện ích mở rộng PHP?
- 23. Làm cách nào để liên kết khóa với "hàm được trình bày bằng chuỗi khóa sau"?
- 24. Thêm liên kết web vào tiện ích TextView
- 25. Google Chrome - Các băm chữ và số để xác định các tiện ích mở rộng
- 26. Tiện ích mở rộng loại so với loại lớp
- 27. Làm cách nào để thêm loại MIME vào .htaccess?
- 28. Làm cách nào để liên kết các xác nhận với ID duy nhất?
- 29. Làm cách nào để tìm URL liên kết bằng văn bản liên kết với XPath?
- 30. Xác định loại Mime của một uri trong android được trả về bởi một ý định?
Peo ple đơn thuần muốn bản đồ * extensions * thành * MIME type *, chứ không phải vòng tròn khác, nên lưu ý rằng bây giờ đã có sẵn hỗ trợ cho cái này mà chúng nên tận dụng - xem [câu trả lời của Jorge] (http: // stackoverflow.com/a/20494035/1709587) thay vì được chấp nhận. Tuy nhiên, –
@MarkAmery như đã lưu ý, finfo_file() yêu cầu tệp tồn tại. Mà không phải luôn luôn như vậy. Câu trả lời của Chaos vẫn còn quan trọng hơn đối với OP và vẫn còn hiệu lực sau 8 năm. – Wranorn