Giống như minh họa Tạo một dịch vụ web cơ bản bằng PHP, MySQL, XML và JSON của tôi, mặc dù phần mở rộng của tệp kết thúc bằng PHP, bạn vẫn có thể cho trình duyệt biết rằng bạn đang xuất một loại nội dung khác. Dưới đây là một số loại nội dung phổ biến hơn được sử dụng trên internet
Hệ thống Phần mở rộng Thư Internet Đa năng [MIME] được thiết kế để cho phép định dạng email để chúng có thể dễ dàng bao gồm các tệp và được tạo thành từ nhiều phần. Để có thể hướng dẫn các ứng dụng email loại tệp được đính kèm, các loại MIME đã được tạo - mô tả ngắn, bằng văn bản về các loại tệp mà mọi người có thể nhận ra. Các loại MIME phổ biến đến mức hiện tại chúng được sử dụng trên toàn bộ WWW và nhiều hệ điều hành dựa vào chúng để quyết định cách mở tệp. Trong email, các tệp đính kèm được sao chép vào thư theo nghĩa đen dưới dạng một chuỗi được mã hóa, với các điểm đánh dấu ranh giới MIME được sử dụng để cho người đọc thư biết vị trí bắt đầu và kết thúc của mỗi tệp đính kèm
Để giúp phân biệt một tệp nhất định là gì và cách xử lý tệp đó, cả máy chủ web và ứng dụng email đều gửi và nhận các loại MIME - chuỗi văn bản cơ bản xác định tệp đã cho là gì. Ví dụ: nếu bạn muốn gửi JPEG từ một tập lệnh, bạn cần tìm loại MIME của nó ["hình ảnh/jpeg"] và gửi nó tới trình duyệt trước chính hình ảnh đó
Có các loại MIME cho tất cả các loại định dạng, từ "application/zip" cho tệp zip đến "video/quicktime" cho Quicktime. mov và "application/x-tar" cho các tệp Tar. Công việc của Cơ quan cấp số được gán trên Internet [IANA] là gán các loại MIME chính thức và nó cũng giữ một danh sách tất cả các loại MIME đã đăng ký trên trang web của mình. Tại thời điểm viết, danh sách này có sẵn tại http. //www. iana. org/bài tập/loại phương tiện - đáng xem qua
Có hàng trăm, thậm chí có thể hàng ngàn loại MIME ngoài kia, đơn giản vì có rất nhiều định dạng tệp ngoài kia, nhưng có một số định dạng nhất định nổi bật là phổ biến, đó là
đơn/đồng. MS Excel
Tệp dữ liệu Microsoft Excel
âm thanh/wav
Tệp âm thanh sóng
phông chữ/ttf
Phông chữ TrueType
hình ảnh/gif
ảnh GIF
hình ảnh/jpeg
ảnh JPEG
hình ảnh/tiff
hình ảnh TIFF
hình ảnh/bmp
Hình ảnh bitmap
hình ảnh/png
hình ảnh PNG
văn bản/html
tệp HTML
văn bản/đồng bằng
Văn bản thô
văn bản/đồng. ms-từ
Tệp dữ liệu Microsoft Word
video/mpeg
phim MPEG
video/thời gian nhanh
video quay nhanh
Như bạn có thể thấy, ý nghĩa là tự giải thích từ loại MIME - nó có thể đọc được bằng con người và có thể đọc được bằng máy, đây là một tài sản lớn. Các loại MIME được sử dụng ở nhiều nơi khác ngoài email - ví dụ: máy chủ web sử dụng rất nhiều loại MIME để biết cách xử lý các tệp khi chúng được yêu cầu và cũng để chúng biết loại tài liệu nào khách hàng có thể và
Đương nhiên, bạn không nên tiếp tục tra cứu các danh sách dài để tìm loại MIME mà bạn muốn mỗi khi bạn nhận được một tệp, nhưng PHP đã giải cứu bằng chức năng tra cứu MIME đặc biệt, mime_content_type[]. Điều này dựa trên mô-đun Apache mod_mime_magic, bản thân mô-đun này dựa trên lệnh tệp Unix. Nếu bạn chưa bao giờ sử dụng điều này trước đây, thì nguyên tắc là nhiều loại tệp có một mã định danh duy nhất trong một vài byte đầu tiên, được gọi là "số ma thuật", chỉ định loại tệp đó là gì. Ví dụ, các bản đồ bit bắt đầu bằng "BM" và các tệp thực thi MS DOS bắt đầu bằng "MZ". Bằng cách có một bảng tra cứu lớn lựa chọn các con số kỳ diệu này, khá dễ dàng để biết được loại tệp nào đang được kiểm tra và do đó, loại MIME nên là gì
Để tiện ích mở rộng ma thuật MIME hoạt động, bạn phải định cấu hình PHP bằng công tắc -with-mime-magic [Unix] hoặc bật tiện ích mở rộng trong php của bạn. ini [Windows]. Trên Windows, bạn cũng sẽ cần chỉnh sửa một mục khác trong tệp php của mình. ini - "mime_magic. magicfile" nên được đặt vào thư mục cài đặt PHP, với thư mục con "extras". Vì vậy, nếu bạn đã cài đặt PHP vào c. \php, điều này sẽ cần được đặt thành "c. /php/bổ sung/ma thuật. kịch câm". Trên Unix, tiện ích mở rộng này dựa trên tệp "ma thuật" được gửi cùng với Apache. Nếu PHP không tìm thấy điều này vì một số lý do, hãy thử đặt cấu hình php. ini cũng vậy
Khi bạn có tiện ích mở rộng ma thuật MIME hoạt động, bạn chỉ cần chuyển tên tệp tới mime_content_type[] để lấy loại MIME của nó làm giá trị trả về, như thế này
Chạy tập lệnh đó, với điều kiện là bạn thực sự có các tệp như vậy, sẽ xuất ứng dụng/zip và hình ảnh/jpeg
Bạn muốn học PHP 7?
Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay
Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó
Phát hiện loại Nội dung MIME trong PHP thật dễ dàng với mime_content_type hoặc Fileinfo. Nhưng Fileinfo dưới dạng tiện ích mở rộng đôi khi không khả dụng trên máy chủ. Hàm mime_content_type
muốn một đường dẫn đến hệ thống tệp làm đối số và không xử lý nếu chúng ta chỉ có một giá trị chuỗi. Gói này giúp dễ dàng phát hiện các loại mime của nội dung của một tệp hoặc chuỗi nhất định mà không có bất kỳ phụ thuộc tiện ích mở rộng nào
Cài đặt
Cài đặt gói dễ dàng thông qua nhà soạn nhạc
composer require intervention/mimesniffer
Cách sử dụng
Dưới đây là một số mẫu mã, để hiển thị cách thư viện được xử lý
use Intervention\MimeSniffer\MimeSniffer; use Intervention\MimeSniffer\Types\ImageJpeg; // detect given string $sniffer = MimeSniffer::createFromString[$content]; // or detect given file $sniffer = MimeSniffer::createFromFilename['image.jpg']; // returns object of detected type $type = $sniffer->getType[]; $bool = $type->isBinary[]; // check if we have binary data $bool = $type->isImage[]; // check if we are dealing with an image $bool = $type->isVideo[]; // check video data was detected $bool = $type->isAudio[]; // check if we have detected audio data $bool = $type->isArchive[]; // check if an archive was detected $type = [string] $type; // cast type to string [e.g. "image/jpeg"] // you can also check, if the content matches a specific type $bool = $sniffer->matches[new ImageJpeg]; // or check, if the content matches an array of types $bool = $sniffer->matches[[ImageJpeg::class, ImageGif::class]]; // or check, if the content matches an array of type objects $bool = $sniffer->matches[[new ImageJpeg, $type]];
Nếu bạn thích khởi tạo không tĩnh
use Intervention\MimeSniffer\MimeSniffer; // create instance with constructor $sniffer = new MimeSniffer[$content]; // with setter for given content $type = $sniffer->setFromString[$other_content]->getType[]; // or with setter for filename $type = $sniffer->setFromFilename['images/image.jpg']->getType[];
Hiện tại chỉ có thể phát hiện các loại tệp sau. Nhiều hơn nữa sẽ được thêm vào trong một bản phát hành tiếp theo
Hình ảnh
- Hình ảnh được mã hóa dưới dạng JPEG thô hoặc ở định dạng tệp JFIF hoặc Exif
- Tệp hình ảnh được mã hóa ở Định dạng trao đổi đồ họa [GIF]
- Hình ảnh được mã hóa ở định dạng Đồ họa mạng di động [PNG]
- Hình ảnh được mã hóa dưới dạng tệp BMP, định dạng bitmap
- Hình ảnh được mã hóa ở Định dạng tệp hình ảnh hiệu quả cao [HEIC/HEIF]
- Biểu tượng được mã hóa ở định dạng tệp ICO
- Hình ảnh ở định dạng hình ảnh Google WebP
- Đồ họa vectơ có thể mở rộng [SVG]
- Định dạng tệp hình ảnh được gắn thẻ [TIFF]
- Định dạng tệp tài liệu Photoshop được mã hóa hình ảnh [PSD]
lưu trữ
- GZIP nén
- tệp ZIP
- kho lưu trữ RAR
- tập tin TAR
Video
- AVI
- Video MPEG-1 và MPEG-2
- Bộ chứa phương tiện MKV
âm thanh
- tập tin MP3
- tập tin FLAC
Khác
- tài liệu PDF
- Bộ chứa phương tiện OGG
- Cơ sở dữ liệu SQLite
- ứng dụng/octet-stream [nhị phân mặc định]
- văn bản/đồng bằng [mặc định]
Đóng góp
Đóng góp được hoan nghênh. Vui lòng lưu ý các nguyên tắc sau trước khi gửi yêu cầu kéo của bạn
- Thực hiện theo các tiêu chuẩn mã hóa PSR-2
- Viết bài kiểm tra cho các chức năng mới và các tính năng được thêm vào
Giấy phép
Được cấp phép theo Giấy phép MIT
Bản quyền 2019 Oliver Vogel