2009-03-10 6 views
12

Esiste un modo rapido e semplice per verificare se un file è ASCII o binario con PHP?Come verificare se il file è ASCII o binario in PHP

+0

Questo è stato chiesto prima, ma mi chiedo sempre, perché ti importa se è ascii o binario? – Pyrolistical

+0

Simile, ma non un duplicato. Questo ha una risposta semplice e tecnica, mentre la supposta identica domanda è molto più difficile. C'è una grande differenza tra chiedere se un file è in codifica X o in qualsiasi codifica. –

+0

No, leggilo di nuovo, quei tipi erano solo esempi. Sta cercando la stessa cosa binario vs testo – Pyrolistical

risposta

18

Questo funziona solo per PHP> = 5.3.0, e non è affidabile al 100%, ma hey, è dannatamente vicino.

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

Risposta perfetta. + 1 – Cosine

+0

Il collegamento interrotto: http://php.net/manual/en/book.fileinfo.php –

+1

probabilmente dovrebbe controllare 'if (! $ Finfo) {echo" Apertura del database fileinfo fallito "; Uscita(); } 'e non dimenticare di:' finfo_close ($ finfo); '... –

2

Poiché ASCII è solo una codifica per il testo, con rappresentazione binaria, non proprio. È possibile verificare che tutti i byte siano inferiori a 128, ma anche questo non garantisce che sia stato progettato per essere decodificato come ASCII. Per quello che ne sai è un pazzo formato di immagine, o una codifica del testo completamente diversa che non ha nemmeno l'uso di tutti gli otto bit. Potrebbe essere sufficiente per il tuo uso, però. Se vuoi solo verificare se un file è ASCII valido, anche se non è un "file di testo", sarà sicuramente sufficiente.

1

Probabilmente si dovrebbe verificare tipo MIME del file, ma se siete disposti a caricare il file in memoria, forse si potrebbe verificare se il buffer è costituito da tutti i-stampabili-caratteri utilizzando qualcosa come:

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

Non perfetto, ma potrebbe essere utile in alcuni casi.

+5

Tab e ritorni a capo renderanno' ctype_print() 'return FALSE, sfortunatamente. – dotancohen

Problemi correlati