PHP

2009-03-10 17 views
12

'da Dosya ASCII veya İkili olup olmadığını nasıl kontrol edilir Bir dosya ASCII veya PHP ile ikili olup olmadığını kontrol etmek için hızlı, basit bir yolu var mı?PHP

+0

Bu daha önce sorulmuştur, ama her zaman merak ediyorum, ascii veya ikili olup olmadığını neden umursuyorsunuz? – Pyrolistical

+0

Benzer, ancak yinelenen değil. Bu, kolay, teknik bir cevaba sahipken, sözde aynı soru oldukça zordur. Bir dosyanın X'i kodlamada mı yoksa hiç kodlamada mı olduğunu sorma arasında büyük bir fark var. –

+0

Tekrar okudum, bu türler sadece örnek. O aynı şey ikili vs metin arıyor – Pyrolistical

cevap

18

Bu yalnızca PHP> = 5.3.0 için çalışır ve% 100 güvenilir değildir, ancak hey, oldukça darn yakındır.

// 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

Mükemmel cevap. + 1 – Cosine

+0

Bağlantı bozuk: http://php.net/manual/en/book.fileinfo.php –

+1

muhtemelen 'if (! $ Finfo) {echo "Açılış file dosyası veritabanı başarısız" kontrol etmeli; çıkış(); } 've unutma:' finfo_close ($ finfo); '... –

2

ASCII yalnızca metin için bir ikili kodlama olduğundan, gerçekten değil. Tüm baytların 128'den az olduğunu kontrol edebilirsiniz, ancak bu bile ASCII olarak kodunun çözülmeyi amaçladığını garanti etmez. Bildiğiniz her şey için, çılgın bir görüntü formatı ya da tüm sekiz biti kullanmayan tamamen farklı bir metin kodlaması. Yine de, kullanımınız için yeterli olabilir. Bir dosyanın geçerli bir ASCII olup olmadığını kontrol etmek istiyorsanız, "metin dosyası" olmasa bile, kesinlikle yeterli olacaktır.

1
Muhtemelen dosyanın mimetype kontrol etmelidir, ancak belleğe dosyasını yüklemek çekinmiyorsanız, belki tampon kullanan tüm yazdırılabilir-karakterden oluşur olmadığını görmek için kontrol edebilir

gibi bir şey:

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

mükemmel değil, ama bazı durumlarda yararlı olabilir.

+5

Sekmeler ve satır başı dönüşleri' ctype_print() 'nı döndürür, maalesef FALSE döndürür. – dotancohen