2009-03-10 36 views
12

Có cách nhanh chóng, đơn giản để kiểm tra xem tệp là ASCII hoặc nhị phân với PHP không?Cách kiểm tra xem tệp có phải là ASCII hoặc nhị phân trong PHP

+0

Điều này đã được hỏi trước, nhưng tôi luôn tự hỏi, tại sao bạn quan tâm nếu ascii hoặc nhị phân của nó? – Pyrolistical

+0

Tương tự, nhưng không trùng lặp. Điều này có một câu trả lời dễ dàng, kỹ thuật, trong khi câu hỏi giống hệt nhau là khá khó khăn hơn. Có một sự khác biệt lớn giữa việc hỏi liệu một tệp có đang mã hóa X hay không, trong bất kỳ mã hóa nào. –

+0

Không đọc lại, những loại đó chỉ là ví dụ. Anh ấy đang tìm kiếm cùng một thứ nhị phân vs văn bản – Pyrolistical

Trả lời

18

Điều này chỉ hoạt động đối với PHP> = 5.3.0 và không đáng tin cậy 100%, nhưng hey, nó khá gần gũi.

// return mime type ala mimetype extension 
$finfo = finfo_open(FILEINFO_MIME); 

//check to see if the mime-type starts with 'text' 
return substr(finfo_file($finfo, $filename), 0, 4) == 'text'; 

http://us.php.net/manual/en/ref.fileinfo.php

+0

Câu trả lời hoàn hảo. + 1 – Cosine

+0

Liên kết bị hỏng: http://php.net/manual/en/book.fileinfo.php –

+1

có lẽ nên kiểm tra 'if (! $ Finfo) {echo" Mở tệp cơ sở dữ liệu tệp tin không thành công "; lối thoát(); } 'và đừng quên:' finfo_close ($ finfo); '... –

2

Vì ASCII chỉ là mã hóa cho văn bản, với biểu diễn nhị phân, không thực sự. Bạn có thể kiểm tra rằng tất cả các byte đều nhỏ hơn 128, nhưng ngay cả điều này cũng không đảm bảo rằng nó được thiết kế để được giải mã dưới dạng ASCII. Đối với tất cả các bạn biết đó là một số định dạng hình ảnh điên, hoặc một mã hóa văn bản hoàn toàn khác nhau mà cũng không sử dụng tất cả tám bit. Nó có thể đủ để sử dụng của bạn, mặc dù. Nếu bạn chỉ muốn kiểm tra xem một tệp có phải là ASCII hợp lệ hay không, ngay cả khi nó không phải là "tệp văn bản", nó chắc chắn sẽ đủ.

1

Bạn có lẽ nên kiểm tra Mimetype của tập tin, nhưng nếu bạn sẵn sàng để tải các tập tin vào bộ nhớ, có thể bạn có thể kiểm tra để xem nếu bộ đệm bao gồm tất cả-in-nhân vật sử dụng một cái gì đó như:

<?php 
$probably_binary = (is_string($var) === true && ctype_print($var) === false); 

Không hoàn hảo, nhưng có thể hữu ích trong một số trường hợp.

+5

Các tab và trả về vận chuyển sẽ làm cho' ctype_print() 'return FALSE, thật không may. – dotancohen

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