Página 1 de 1

Aparentes problemas con binmode

NotaPublicado: 2009-05-11 17:00 @750
por pseudemys
¡¡Saludos!!

Soy nuevo en el foro, no sé si existe un lugar donde presentarse o qué rollo pero no encontré el reglamento :p En fin, disculpas si me brinco protocolos pero úrgeme ver si pueden ayudarme a aclarar un asunto. La situación es la siguiente:

Tengo un script que me sirve para cargar archivos en el servidor, éste estaba funcionando perfectamente hasta este jueves (07may2009) que fue el día que se subió correctamente el último archivo. Pero el día de hoy todos los archivos que son "uploadeados" (¿así se escribe o acabo de inventar una palabra?) se han cargado vacíos.

Revisé en otro script que tengo en el mismo server pero en otra instancia de Apache y también está fallando, entonces temí que el serveradmin hubiera actualizado la versión de Perl o algo similar; sin embargo. no lo ha hecho ¿Qué puedo hacer antes de volverme loco?

Mi código es algo tan simple como esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $q= new CGI();
my $upload_filehandle = $q->upload("file");

my $ruta="/ruta/del/archivos.ext"

open UPLOADFILE, ">$ruta" || do{ $mensaje->{acceso}="no"; $mensaje->{motivo}="error en la carga del archivo";return($mensaje)};
           
            binmode UPLOADFILE;

            while( <$upload_filehandle> )
            {
            print UPLOADFILE;
            }

            close UPLOADFILE;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sospecho del binmode() porque ya se me acabaron los sospechosos, jaja.
¿Necesitaré cambiarlo por otro? Espero recomendaciones... :p de antemano Gracias.

NotaPublicado: 2009-05-11 17:14 @759
por explorer
Bienvenido a los foros de Perl en Español, pseudemys.

¿No estará lleno el disco duro o tu partición asignada? ¿No habrán cambiado los permisos del directorio donde se guardan los ficheros? ¿Sale algún mensaje de error en el error.log?

He repasado la sección "CREATING A FILE UPLOAD FIELD" del manual de CGI.pm y no veo nada raro.

Usa el módulo CGI::Carp como ves en mi CGI mínimo para que te saque los errores al navegador, así no será necesario consultar el error.log.

NotaPublicado: 2009-05-11 18:18 @804
por kidd
A mi también me parece que si los archivos te los está creando vacíos sea porque tu disco está lleno.

La otra posibilidad es que el cambio se haya realizado desde el formulario html, habría de verificar que siga igual.

Saludos

Aparentes problemas con binmode

NotaPublicado: 2009-05-12 14:15 @635
por pseudemys
La partición no está ni cerca de estar llena. Al directorio le he colocado incluso permisos de 777 para asegurarme de los permisos y sigue sin funcionar. En los logs de errores no aparece nada fuera de lo habitual. Ya revisé los formularios y ninguno ha cambiado.

Los scripts sí están funcionando (son CGI). Lo que me preocupa es que la falla es global porque todos mis sistemas en este momento están imposibilitados para subir archivos a pesar de estar en distintas instancias de Apache... y aunque casi ni se usan acá en el trabajo ejercen una presión psicológica algo molesta; jaja, así que lo que intento es encontrar una solución que no implique cambiar el código de todos los scripts implicados pero no sé de qué otra forma puedo cargar los archivos al server, pero si no queda de otra tal vez puedan recomendarme alguna librería...

Gracias por la bienvenida y gracias por sus respuestas :)

NotaPublicado: 2009-05-12 14:22 @640
por explorer
Saca el valor de $! para ver si los programas te muestran algún tipo de error.

Si no hay más pistas, es difícil... pueden ser muchas cosas...

NotaPublicado: 2009-05-12 14:33 @648
por kidd
¿Usas formularios HTML para enviar los datos?

NotaPublicado: 2009-05-13 06:13 @300
por salva
Yo, en tu lugar, para ver qué está fallando, quitaría el binmode() (temporalmente) y comprobaría el resultado de las llamadas a print() y a close():

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
...
print UPLOADFILE or print STDERR "print failed: $!\n";
...
close UPLOADFILE or print STDERR "close failed: $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema también puede deberse a que realmente no se esté enviando el fichero. Alguna forma habrá de comprobar si falla...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $upload_filehandle = $q->upload("file");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Solucionado

NotaPublicado: 2009-05-14 16:16 @720
por pseudemys
¿Que creen? Tenían razón... el filesystem estaba lleno, el problema es que me fui con una finta, ejecutando un df -h me salía algo similar a esto:

Código: Seleccionar todo
    Filesystem            Size    Used   Avail      Use%     Mounted on
    /dev/sdb4              37G    25G    11G      70%       /home
    /dev/sdb5              15G    14G    0M        100%     /var


¿Qué pasaba? Que los archivos (y sus cgi respectivos) se almacenan en /home pero los logs de errores en /var/log/error y nunca me pasó por la cabeza que pudieran estar estorbándose mutuamente. Hay un log que crece demasiado y fue el que lleno el filesystem. Ya fue reducido a 0 y se solucionaron los problemas.

Lo que no entiendo es qué tiene que ver si estoy utilizando un filesystem el otro lo limitará y lo más desagradable es que no mostraba ningún mensaje de error ni warning... ¡¡que alguien me explique!! Gracias por la ayuda de todos.

NotaPublicado: 2009-05-15 03:58 @207
por explorer
Pues eso sí que es raro... si hay espacio libre en tu sistema de ficheros, debería dejarte escribir en él.

Se me ocurre que... en realidad, no estás en /home, sino en /var/home.