Foros del Web » Programando para Internet » PHP »

Ayuda con fgetcsv() y application/octet-stream

Estas en el tema de Ayuda con fgetcsv() y application/octet-stream en el foro de PHP en Foros del Web. Holas a todos! Este problema no sabía dónde ponerlo, porque tiene varias implicancias. Lo coloqué en el Foro PHP porque pensé que por ahí podrían ...
  #1 (permalink)  
Antiguo 03/03/2008, 08:04
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Ayuda con fgetcsv() y application/octet-stream

Holas a todos!

Este problema no sabía dónde ponerlo, porque tiene varias implicancias. Lo coloqué en el Foro PHP porque pensé que por ahí podrían darme una solución...

Este es el problema: Hace un tiempo programé un portal administrador donde se podían importar clientes a una base de datos desde un archivo CSV.

Todo fue bien, usé la función fgetcsv() de PHP y me fue de maravilla.

Eso hasta hoy, que mi cliente me acaba de contactar para decirme que no puede subir los clientes desde el CSV.

He investigado en mi código y el error que tengo es que el archivo CSV, el cual creamos usando Excel ("Guardar como CSV"), al intentar subirlo PHP me dice "El formato de archivo no es válido". El formato, pues, que me retorna, es el de "application/octet-stream". He investigado por internet y dicen que se trata de un formato binario, que MIME arroja cuando no reconoce el tipo de archivo o algo así...

Como sea, mi super dilema es que no sé por qué rayos está guardando el CSV con ese formato, en vez de CSV.

¿Alguien me puede socorrer? T___T
Si el tema va mejor en otro foro, pido disculpas, es que como dije, no se me ocurrió dónde ubicarlo mejor.

Desde ya muchas gracias....
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #2 (permalink)  
Antiguo 03/03/2008, 08:52
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Ayuda con fgetcsv() y application/octet-stream

Holas de nuevo!

Seguí investigando y ya comprobé que los archivos CSV sí son correctos. Es el servidor donde intento subirlos el que los toma como octet-stream ... ¿Es esto posible? O sea, que el servidor (o el PHP instalado en el servidor) haya perdido la capacidad de reconocer los archivos CSV y por eso los reconoce como ese extraño formato?

Por favor, realmente necesito su consejo....
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 03/03/2008, 09:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Ayuda con fgetcsv() y application/octet-stream

Que código estas utilizando para subir los archivos y parsearlos con PHP?

Saludos.
  #4 (permalink)  
Antiguo 03/03/2008, 09:10
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Ayuda con fgetcsv() y application/octet-stream

Gracias por responder, GatorV, ya creía que nadie sabría la respuesta :(

Esta es una síntesis del código:

Código PHP:
# ------------------------
# Valores Recibidos
$csv_nm    $_FILES["importar"]['tmp_name'];
$csv_sz    $_FILES["importar"]['size'];
$csv_tp    $_FILES["importar"]['type'];

# ------------------------
# Verifica Archivo
if ($csv_nm)
{
    
# ------------------------
    # Verifica Tipo y Tamaño
    
if (($csv_tp == "text/csv" || $csv_tp == "application/vnd.ms-excel") && $csv_sz 0)
    {
        
# ------------------------
        # Abre archivo Temporal
        
$file fopen($csv_nm"rt");
                            
        
# ---------------------
        # Recorre Archivo CSV
        # ---------------------
        
while (($datos fgetcsv($file1000";")) !== false)
        {
            
// AQUI VA LA LECTURA DE FILAS;
        
#----Fin While CSV----
                            
        
fclose($file);
                            
    } 
#-----Verificar CSV OK-----
    
else
    {    
$mErr "- El Archivo no es Valido o esta Vacio.";    }
                        
#--------Hay CSV--------
else
{    
$mErr "- El Archivo no ha sido Reconocido.";    } 
Como dije, el error que me manda es en el tipo de Archivo ("- El Archivo no es Valido o esta Vacio."). Al debugar, he visto que el Tipo ($csv_tp) que me retorna es el application/octet-stream :(

Por cierto, olvidé decir que luego he cambiado el fgetcsv por sólo fgets(). Pero igual no funcionó, porque como no lo lee como texto sino binario, no reconoce saltos de línea y da error igual para lo que yo desarrollo.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #5 (permalink)  
Antiguo 03/03/2008, 09:21
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Ayuda con fgetcsv() y application/octet-stream

Agrego otra consulta tras nuevas investigaciones:

Viendo el phpinfo() del servidor donde está este problema, me sale en SERVER["HTTP_ACCEPT"] lo siguiente: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

¿Esto ratifica que el servidor / PHP no reconoce los archvos CSV? :(
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #6 (permalink)  
Antiguo 03/03/2008, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Ayuda con fgetcsv() y application/octet-stream

Lamentablemente ese problema no es de PHP, si no del explorador Web que usa tu cliente para enviar los archivos, verifica si tu cliente instalo recientemente algún firewall o antivirus, o actualizo su antivirus o versión de IE.

Ya que el Mimetype se lo informa el explorador a PHP, el problema aquí es que tu cliente (o mas bien la computadora de tu cliente) esta enviándote el archivo de forma incorrecta.

Saludos.
  #7 (permalink)  
Antiguo 03/03/2008, 10:15
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Ayuda con fgetcsv() y application/octet-stream

Ohh............... Pues le pasó a él (tiene un Mac), y a mí (tengo un pc con Windows XP) de igual manera....
Temporalmente subí los datos de forma rústica: subí los CSV al servidor, y le dije al fopen() que en vez de leer el Uploaded, leyera el archivo en el servidor, al cual reconoció como text/plain, lo cual confirma lo que me acabas de decir (que no sería problema del server sino del cliente).

Aún así, teniendo esta respuesta, creo que optaré por cambiar la forma en que importo estos datos... tendré que buscar la manera luego.

Gracias por la respuesta. Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
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 15:59.