2012-02-26 20 views
9

Im cố gắng để xác định mime-type của một tập tin tải lên, tôi muốn sử dụng fileInfo(), đây là những gì ive đã cố gắng, nó isnt làm việc:Finfo_file trên tập tin tải lên để xác định mime-type

$uploadedfile = $_FILES['soup']['tmp_name']; 
if(isset($uploadedfile)) 
{ 
    $uploadedname = $_FILES['soup']['name']; 
    $file=$uploadedsong; 
    $file.=$uploadedname; 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file); 

Thật không may là finfo_file dường như không chạy, tôi giả sử tôi có $file thiết lập không chính xác cho điều này, có cách nào tôi có thể làm điều này đúng cách với một tệp mới được tải lên sử dụng $_FILE như thế này? hoặc tôi đang đi vào vấn đề này hoàn toàn không đúng cách. Sử dụng một tập tin tôi đã đặt sẵn trong một tập tin khác trực tiếp, và cài đặt $file="folder/file.doc" hoạt động đúng cách.

Trả lời

18

Bạn phải chuyển đường dẫn đến hàm finfo_file chứ không phải tên tệp.

<?php 
if (isset($_FILES['soup']['tmp_name'])) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']); 
    if ($mime == 'application/msword') { 
     //Its a doc format do something 
    } 
    finfo_close($finfo); 
} 
?> 
+0

Trong tệp php.ini của bạn, hãy đảm bảo bạn có mục này: extension = fileinfo.so hoặc trong cửa sổ: php_fileinfo.dll – metamagicson

-1

Tôi biết đây là một chút cũ, nhưng kể từ khi bạn đang sử dụng $_FILES siêu toàn cầu, bạn có thể sử dụng loại chìa khóa của mảng tập tin (ví dụ $_FILES['soup']['type']) thay vì phải kiểm tra máy chủ khi tệp được tải lên?

+3

Sử dụng tham số mảng $ _FILES để xác minh loại tệp là giả mạo. Đó là lý do tại sao finfo_file được tạo ra để chúng ta có thể kiểm tra tệp nhị phân của tệp để xác định xem tệp đó có thực sự là tệp hình ảnh hay không chứ không phải tệp php có đuôi tệp được đổi tên thành jpg, trong trường hợp loại mảng $ _FILES sẽ cho jpg. – jessiPP

0

tôi sử dụng finfo()buffer() chức năng cũng như file_get_contents() từ nền tảng php như sau

$finfo = new finfo(FILEINFO_MIME); 
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type 

bạn cần phải được trên php 5.3 hoặc cao hơn và chắc chắn rằng bạn có phần mở rộng finfo() cài đặt. cho linux extension=fileinfo. và trong các cửa sổ: php_fileinfo.dll

bạn có thể có một loạt các kiểu MIME chấp nhận và sau đó kiểm tra nếu nó tồn tại trong mảng đó

$acceptedMime = []; 
if(in_array($mimetype, $acceptedMime, true) === true){ 
    #mime type is valid. Proceed! 
} 

Một lựa chọn khác để tránh việc phải kiểm tra kiểu MIME sẽ được lưu trữ tập tin tải lên hoàn toàn ra khỏi thư mục gốc của tài liệu.

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