Foros del Web » Programando para Internet » PHP »

Saber si un fichero tiene formato ASCII

Estas en el tema de Saber si un fichero tiene formato ASCII en el foro de PHP en Foros del Web. Hola foro. ¿Cuál sería la mejor manera de detectar que un fichero tiene formato ASCII (guardado con el bloc de notas, por ejemplo)? Quizá la ...
  #1 (permalink)  
Antiguo 01/03/2005, 12:39
 
Fecha de Ingreso: junio-2003
Ubicación: Petrel - Alicante
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 1
Saber si un fichero tiene formato ASCII

Hola foro.

¿Cuál sería la mejor manera de detectar que un fichero tiene formato ASCII (guardado con el bloc de notas, por ejemplo)?

Quizá la mejor opción sea comprobar que todos los caracteres del archivo son caracteres imprimibles (del 32 al 126), pero no me convence. En caso de que esta fuera la mejor opción, ¿cómo lo haríais (buscando alguno de los caracteres no imprimibles en el fichero, por ejemplo)?

Un saludo.
  #2 (permalink)  
Antiguo 01/03/2005, 13:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Normalmente .. el tipo de archivo lo dá el formato MIME del mismo .. ahí devuelve un text/plain o algo así si es texto plano (ASCII) u otro si es un ejecutable de tal tipo, imagen .. etc ...

Puedes probar a usar la función:
http://www.php.net/manual/en/functio...ntent-type.php

Un saludo,
  #3 (permalink)  
Antiguo 02/03/2005, 09:58
 
Fecha de Ingreso: junio-2003
Ubicación: Petrel - Alicante
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 1
Problemas con la función mime_content_type

Gracias Cluster.

Tras modificar httpd.conf y php.ini, he conseguido que la función mime_content_type realice su trabajo, pero... no distingue entre muchos archivos. Por ejemplo, me devuelve text/plain para archivos de Notepad y para archivos de Word. Esto es un poco extraño, ya que he revisado un listado de MIME Media Types y existe un tipo application/msword, otro application/pdf, etc. Pero nada, el mime_content_type siempre me devuelve text/plain para archivos .PDF o .DOC.

¿Por qué puede ocurrir? Estoy trabajando en local, con PHP 4.3.4 bajo Windows.

Un saludo.
  #4 (permalink)  
Antiguo 02/03/2005, 10:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si ya configurastes PHP para el uso de MIME y tu tabla de MIME contiene esas entradas .. no debería fallar. ¿otro tipo de archivos funciona correctamente?

Un saludo,
  #5 (permalink)  
Antiguo 02/03/2005, 11:41
 
Fecha de Ingreso: junio-2003
Ubicación: Petrel - Alicante
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 1
Solucionado en Linux con código de PHP.net

Hola Cluster.

Sí, aparentemente tenía todo configurado correctamente, pero no he podido descubrir porque los archivos .DOC los entendía como text/plain. Para otros archivos como los .jpeg sí que devolvía el valor correcto.

Sin embargo, parece que bajo Linux funciona correctamente usando un par de instrucciones que aparecían en PHP.net.
$nombreFichero = escapeshellarg($nombreFichero);
return trim( `file -bi $nombreFichero` );

Utilizando este pequeño script sí retorna el valor correcto para un .DOC (application/msword).

En cualquier caso, gracias por tus respuestas, Cluster. Si descubro algo más acerca de porqué no funciona correctamente el mime_content_type en Windows, lo pondré en este Post.

Un saludo.
  #6 (permalink)  
Antiguo 02/03/2005, 13:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Bueno .. lo que usastes (en linux) es un comando de Linux .. por ende .. si bien funcina en tu caso (por qué usas Linux) no va a funcionar en un servidor con windows (por eso intento recomendar el uso de funciones "nativas" de PHP para hacer tareas que vía ejecución de "comandos" en la "shell" del S.O. podrías solventar el problema).

En otros casos .. existen configuraciones de servidores en modo "safe mode" (modo seguro) que no permiten ejecutar comandos en el S.O. ...


Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.