Página 1 de 2

Problemas al escribir un fichero

NotaPublicado: 2012-05-12 11:34 @523
por jomamarca
Hola a todos, tengo un problema.

Tengo en mi servidor varios archivos ".dat" que puedo abrir y leer, pero cuando intento abrir el fichero para poder escribir, me dice que no lo puede abrir.

Tengo todo alojado en ARSYS y me comentan que no puedo escribir ficheros, estoy intentando escribir en el fichero los datos de los clientes que se den de alta a través de la web.

Si no lo puedo hacer escribiendo directamente, ¿cómo tengo que hacerlo? ¿Alguien sabe si se puede escribir o no en Arsys? Tengo la sensación de que ni ellos mismos lo tienen claro, ya me han dado varias contestaciones casi todas contradictorias.

Gracias

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-12 21:08 @922
por explorer
Bienvenido a los foros de Perl en Español, jomamarca.

jomamarca escribiste:Tengo en mi servidor varios archivos ".dat" que puedo abrir y leer, pero cuando intento abrir el fichero para poder escribir, me dice que no lo puede abrir.
El contenido de la variable $! almacena el texto del último error.

jomamarca escribiste:Tengo todo alojado en ARSYS y me comentan que no puedo escribir ficheros, estoy intentando escribir en el fichero los datos de los clientes que se den de alta a través de la web.

Si no lo puedo hacer escribiendo directamente, ¿cómo tengo que hacerlo? ¿Alguien sabe si se puede escribir o no en Arsys? Tengo la sensación de que ni ellos mismos lo tienen claro, ya me han dado varias contestaciones casi todas contradictorias.
Depende del tipo de servicio que tengas contratado con ellos, podrás escribir en tu directorio personal o no. Si solo tienes contratado un servicio web básico, seguramente la única manera de guardar información en el servidor sea usando una base de datos, que activarás desde el mismo panel de control.

En la mayor parte de las ocasiones, podrás escribir en aquellos directorios donde haya permiso de escritura para el usuario que ejecuta el servidor web, pero en los sistemas prefabricados de estas empresas, eso no es lo que suele pasar: el servidor web estará ejecutada por www-data o httpd, y los directorios estarán puestos a nombre del usuario virtual que te representa, así que al ejecutar el CGI, no tendrás permiso para nada más que leer.

Ahí la solución sería dar permisos de escritura al directorio en donde quieres que el CGI escriba. A los de Arsys les debes preguntar qué tienes que hacer para que un CGI pueda escribir en alguno de tus directorios. Si no saben responderte a esta pregunta, es que estás delante de personas que venden melones: realmente no saben lo que están vendiendo. O no saben siquiera lo que es un CGI en Perl :)

Ellos solo se preocupan de que sus sistemas prefabricados funcionen, así que te aconsejarán que modifiques el CGI para que escriba en una base de datos.

Si no te convence esa solución, habla conmigo en privado y te hago una oferta de alojamiento ;)

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 11:06 @504
por jomamarca
Hola, ahora desde Arsys me dicen que sí puedo escribir, que debe ser un error del programa.

el código es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         my $path = '/var/www/vhost/ciacazadores.com/home/data/claves.dat';
  2.         $anadir = $FORM{'usuario'} + '\|' + $FORM{'password'} + '\|**';
  3.         chomp($anadir);
  4.         open (FILE, ">> $path") or die "No pudo abrirse: ".$path;
  5.         print FILE "$anadir";
  6.         close(FILE);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Dónde puede estar el error?
Gracias.

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 11:34 @523
por explorer
Hay que cambiar algunas cosas, pero no influyen en ningún error...

Por ejemplo, la línea 3 sobra (la variable $anadir no tiene ningún carácter de fin de línea que le hallamos puesto).

Yo usaría el módulo CGI::Carp para saber qué está pasando. Mira mi CGI mínimo para ver cómo ponerlo.

Además, cambiaría el die() de la línea 4 por esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (FILE, ">> $path") or die "No pudo abrirse $path: $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De esta manera, el die() saca el mensaje de error (contenido en la variable especial $!). Con la ayuda CGI::Carp, ese mensaje saldrá en la ventana del navegador.

Y si no puedes usar CGI::Carp, esos mensajes de error salen en los archivos log de la actividad web, que supongo que Arsys te estará dejando en algún directorio accesible desde fuera (por ejemplo, FTP, o desde el panel de control).

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 11:42 @529
por jomamarca
Hecho, ahora me dice esto:

Software error:
No pudo abrirse /var/www/vhost/ciacazadores.com/home/data/claves.dat: No such file or directory

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 12:32 @564
por explorer
Bien, ya sabemos algo: El '>>' ha intentado abrir el archivo claves.dat y no lo ha encontrado. Y si no existía, ha intentado crearlo, y tampoco ha podido. O algo peor: no existe '/var/www/vhost/ciacazadores.com/home/data/'. :lol:

Sospecho que el servidor web no tiene permiso de escritura en el subdirectorio data/.

Yo ejecutaría antes este miniprograma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2.  
  3. use CGI       qw':standard *pre';
  4. use CGI::Carp qw'fatalsToBrowser';
  5. use File::Find ();
  6.  
  7. print
  8.     header(),
  9.     start_html('Directorio completo'),
  10.     start_pre(),
  11.     ;
  12.            
  13. # for the convenience of &wanted calls, including -eval statements:
  14. use vars qw/*name *dir *prune/;
  15. *name   = *File::Find::name;
  16. *dir    = *File::Find::dir;
  17. *prune  = *File::Find::prune;
  18.  
  19. # Traverse desired filesystems
  20. File::Find::find(
  21.     {   wanted => sub {
  22.                     print "$name\n";
  23.                 },
  24.     },
  25.     '/var/www/vhost/ciacazadores.com'
  26. );
  27.  
  28. print
  29.     end_pre(),
  30.     end_html(),
  31.     ;
  32.  
  33. exit;
  34.  
  35. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Este programa sacará todos los archivos que cuelgan debajo el directorio indicado. Así podrás verificar que, realmente, existe home/data/.

O, mejor todavía: te conectas con el panel de control o por FTP, y compruebas que tanto home/ como data/ tienen los permisos de lectura y ejecución apropiados para que puedan ser accedidos por el servidor web (lo normal: un 755). Y que dentro de data/, el servidor web pueda escribir (darle un 777 al directorio data/).

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 12:42 @571
por jomamarca
Efectivamente, salen todos los directorios, y claro está, los archivos están ahí, y las carpetas tienen los permisos para leer escribir y ejecutar, así que tendré que esperar a ver qué me dice el servicio técnico, ¿o puedo hacer cualquier otra cosa?

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 12:59 @583
por explorer
Intentaría escribir, a modo de prueba, en otros directorios, a ver si en alguno sí puedo.

Al menos, para delimitar dónde puede estar el fallo.

Una forma rápida de ver si se trata de un fallo de acceso por permisos de subdirectorio, sería modificar el programa para 1) entrar en ese directorio, y 2) intentar escribir en él:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $path = '/var/www/vhost/ciacazadores.com/home/data';
  2. chdir $path                       or die "ERROR: No puedo entrar en [$path]: $!\n";
  3.  
  4. my $archivo = "$path/claves.dat";
  5. open (FILE, ">>$archivo")         or die "ERROR: No pudo abrirse [$archivo]: $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Observa que, además, le he quitado el espacio en blanco de delante de $archivo, no sea que también le afecte.

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-14 14:15 @635
por jomamarca
Nada, lo he probado con todos los directorios y siempre me dice lo mismo.

Re: Problemas al escribir un fichero

NotaPublicado: 2012-05-16 15:52 @703
por jomamarca
Ya está resuelto, era un error de ellos. Gracias.