2009-03-10 18 views
12

¿Existe una manera rápida y simple de verificar si un archivo es ASCII o binario con PHP?Cómo verificar si el archivo es ASCII o binario en PHP

+0

Esto se ha preguntado antes, pero siempre me pregunto, ¿por qué te importa si es ascii o binario? – Pyrolistical

+0

Similar, pero no es un duplicado. Éste tiene una respuesta fácil y técnica, mientras que la supuesta pregunta idéntica es bastante más difícil. Hay una gran diferencia entre preguntar si un archivo está en codificación X o en cualquier codificación. –

+0

No, volvió a leerlo, esos tipos eran solo ejemplos. Está buscando lo mismo que texto binario versus – Pyrolistical

Respuesta

18

Esto solo funciona para PHP> = 5.3.0, y no es 100% confiable, pero bueno, está muy cerca.

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

Respuesta perfecta. + 1 – Cosine

+0

Enlace roto: http://php.net/manual/en/book.fileinfo.php –

+1

probablemente debería marcar 'if (! $ Finfo) {echo" No se pudo abrir la base de datos de archivos de archivos "; salida(); } 'y no te olvides de:' finfo_close ($ finfo); '... –

2

Dado que ASCII es solo una codificación de texto, con representación binaria, no realmente. Podrías comprobar que todos los bytes son menores que 128, pero incluso esto no garantizaría que estuviera destinado a decodificarse como ASCII. Por lo que usted sabe, es un formato de imagen loco, o una codificación de texto completamente diferente que tampoco tiene uso de los ocho bits. Sin embargo, podría ser suficiente para su uso. Si solo desea comprobar si un archivo es válido ASCII, incluso si no es un "archivo de texto", definitivamente será suficiente.

1

Probablemente debe comprobar el tipo MIME del archivo, pero si usted está dispuesto a cargar el archivo en la memoria, tal vez se podría comprobar para ver si el búfer se compone de todos imprimibles caracteres utilizando algo como:

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

No es perfecto, pero podría ser útil en algunos casos.

+5

Las pestañas y los retornos de carro harán que' ctype_print() 'devuelva FALSE, desafortunadamente. – dotancohen

Cuestiones relacionadas