• Publicidad

Cambiar el propietario de un archivo en tiempo de ejecución

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cambiar el propietario de un archivo en tiempo de ejecución

Notapor piero66 » 2009-07-27 10:28 @478

Hola... buenas...

Quiero saber cómo poder cambiar el propietario de un archivo en tiempo de ejecución, les explico:

Sucede que creo un archivo XML que se llama por ejemplo: prueba.xml; el propietario del archivo es Apache y quiero cambiarlo de propietario; ahorita actualmente tengo que ir a la ruta y cambiarle el permiso desde el shell. ¿Cómo puedo hacerlo automático...? Mi archivo es este...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(DOC, "> $EF_WEB/xml/$nombre.xml") || die "No se pudo abrir el archivo";
    print DOC "<?xml version='1.0' encoding='ISO-8859-1'?>";
    print DOC "<ImportSession>";
    print DOC "<Batches>";
    print DOC "<Batch Name=\"$nombre\" BatchClassName=\"DESARROLLO URBANO\" EnableAutomatiCSeparationAndFormID=\"0\">";
    print DOC "<Documents>";
    print DOC "<Document FormTypeName=\"$in{'_tramite'}\">";
    print DOC "<IndexFields>";
    print DOC "<IndexField Name=\"DUFolio\" Value=\"$in{'process'}-$in{'folio'}\" /> ";
    print DOC "<IndexField Name=\"DUProceso\" Value=\"$in{'process'}\" /> ";
    print DOC "<IndexField Name=\"DUSolicitante\" Value=\"$in{'_solicitante'}\" /> ";
    print DOC "<IndexField Name=\"DURequisito\" Value=\"$in{'req'}\" /> ";
    print DOC "<IndexField Name=\"DUPropietario\" Value=\"$in{'_propietario'}\" /> ";
    print DOC "<IndexField Name=\"DUCalle\" Value=\"$in{'_calle'}\" /> ";
    print DOC "<IndexField Name=\"DUColonia\" Value=\"$in{'_colonia'}\" /> ";
    print DOC "<IndexField Name=\"DUNumExtyInt\" Value=\"$in{'_numext'}-$in{'_numint'}\" /> ";
    print DOC "<IndexField Name=\"DUFechaEntrega\" Value=\"$in{'_entrega'}\" /> ";
    print DOC "<IndexField Name=\"DUFechaEntrada\" Value=\"$Sday/$Smon/$Syear\" /> ";
    print DOC "<IndexField Name=\"DUCUP\" Value=\"$in{'_CUP'}\" /> ";
    print DOC "<IndexField Name=\"DUCatastral\" Value=\"$in{'_catastral'}\" /> ";
    print DOC "<IndexField Name=\"DUPredial\" Value=\"$in{'_predial'}\" /> ";
    print DOC "<IndexField Name=\"DUGrupoTramite\" Value=\"$in{'name_pro'}\" /> ";
    print DOC "<IndexField Name=\"DUTPDocumento\" Value=\"UNICO ENTRADA\" /> ";
    print DOC "<IndexField Name=\"DUTramite\" Value=\"$in{'_tramite'}\" /> ";
    print DOC "</IndexFields>";
    print DOC "<Pages>";
    print DOC "<Page ImportFileName=\"D:\\documentos_ac\\documentos\\tif\\$nombre.tif\" /> ";
    print DOC "</Pages>";
    print DOC "</Document>";
    print DOC "</Documents>";
    print DOC "</Batch>";
    print DOC "</Batches>";
    print DOC "</ImportSession>";
    system("cp '/home/eflowweb/html/xml/$nombre.xml' '/media3/wxml3/");

# system(" chown otropropietario $nombre.xml")  # esta línea no me funciona por eso la comenté...
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


¿¿¿ Alguna idea... ???
Última edición por explorer el 2009-07-27 10:53 @495, editado 2 veces en total
Razón: Ortografía, bloques de código
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Publicidad

Re: Cambiar el propietario de un archivo en tiempo de ejecución

Notapor explorer » 2009-07-27 11:27 @519

Para cambiar el propietario de un archivo, puedes usar la función [url]chown[/url]() del propio Perl, en lugar de usar el comando del sistema. El resultado es el mismo.

Ahora bien, hay que indicar el lugar exacto donde está el fichero que quieres modificar. En tu código, estás copiando un fichero de un sitio a otro, pero en el chmod() no está claro si el programa se está ejecutando en el mismo directorio donde está el fichero que queremos modificar.

(no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    system("cp '/home/eflowweb/html/xml/$nombre.xml' '/media3/wxml3/");

    # system(" chown otropropietario $nombre.xml");
    # El 1000 es el uid del usuario que queremos poner.
    chown 1000, -1, "/media3/wxml3/$nombre.xml";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ver los ejemplos en chmod() para ver cómo usar los uid no numéricos.

Fíjate que pongo el camino completo al fichero.

Otro detalle: según la documentación, en la mayoría de los sistemas, no se permite el cambio de usuario a no ser que seas el superusuario. El programa tendrá los mismos problemas que su dueño a la hora de cambiar la propiedad.

La mayor parte de estos problemas de propiedad se pueden resolver con los permisos de escritura, lectura, ejecución y acceso de los ficheros y directorios.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados