2011-10-24 26 views
5

Tôi đang gặp sự cố khi phát hiện loại mime của tệp PNG đơn giản với tệpinfo, với PHP 5.3.8 được cài đặt trên máy chủ CentOS.Phát hiện loại Mime không thành công với tệpinfo trên PHP 5.3.8

Vấn đề

Về cơ bản, nếu tôi có đoạn mã sau:

<?php 
$const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME; 
$handle = finfo_open($const, '/usr/share/file/magic.mime'); 
$result = finfo_file($handle, '/var/vhosts/v4dev/public/Melvin.png'); 
echo $result; 
unset($handle); 
?> 

Như bạn có thể thấy các tập tin là một hình ảnh PNG. Các byte tiêu đề của tệp đã được kiểm tra và chính xác. Nhưng trang này kết quả đầu ra một kết quả không chính xác:

application/octet-stream 

Tôi đoán đây là vì các loại tập tin không thể được phát hiện, và fileInfo trả lại phản ứng mặc định, nhưng tôi thấy không có cách nào để kiểm tra xem.

Những gì tôi cố gắng

Để kiểm tra các tập tin magic.mime đúng đắn, tôi sử dụng các tập tin giao diện điều khiển lệnh:

file -m /usr/share/file/magic.mime /var/vhosts/v4dev/public/Melvin.png 

nào trả lại kết quả mong đợi:

/var/vhosts/v4dev/public/Melvin.png: image/png 

tôi cũng đã thử một tập tin magic.mime khác được cung cấp với Apache, nhưng vấn đề vẫn còn.

Tôi đã thử xác định tệp magic.mime thông qua vị trí tệp tin mặc định (với liên kết và bản sao của tệp), với biến môi trường MAGIC và bằng cách chỉ định đường dẫn tệp trong cuộc gọi finfo_open (như trên).

Tôi đã thử cập nhật PHP.

... và bây giờ tôi không còn lựa chọn nào khác.


Nếu ai đó có thể giúp tôi với điều này, tôi sẽ gửi sóng hạnh phúc qua không gian để anh ấy/cô ấy có thể sống hạnh phúc mãi mãi.

Chúc mừng

Trả lời

1

Vậy tại sao không gọi lệnh file từ tập lệnh của bạn?

$result = `file -bm /usr/share/file/magic.mime /var/vhosts/v4dev/public/Melvin.png` 

Chắc chắn, nó không hoàn hảo, nhưng đó là một lựa chọn.

+0

Hmm yeah có thể hoạt động như một hack tạm thời cho đến khi tôi có thứ gì đó vững chắc hơn. Cảm ơn. – Shtong

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