Foros del Web » Programando para Internet » PHP »

Script para cambiar permisos recursivamente

Estas en el tema de Script para cambiar permisos recursivamente en el foro de PHP en Foros del Web. Hola a todos; Tengo un servidor linux (Suse 10) y necesito crear un script en PHP que mediante una tarea crontab sea capaz de cambiar ...
  #1 (permalink)  
Antiguo 21/06/2006, 03:38
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 6 meses
Puntos: 0
Script para cambiar permisos recursivamente

Hola a todos;

Tengo un servidor linux (Suse 10) y necesito crear un script en PHP que mediante una tarea crontab sea capaz de cambiar todos los permisos de los archivos/directorios que haya dentro de un directorio concreto del servidor.

La tarea crontab ejecutaría el script PHP con permisos de root por lo que entiendo que esto no me supondría un problema, presuponiendo que PHP con permisos de superusuario puede realizar este tipo de tareas. Lo que necesito saber es cómo hacer para que PHP lea los directorios, subdirectorios y archivos de forma recursiva, osease TODO lo que haya dentro de un directorio preestablecido del servidor y le cambie los permisos.

¿Alguien me puede echar una mano?
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 21/06/2006, 09:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
La tarea crontab ejecutaría el script PHP con permisos de root
No, .. a no ser que uses SUDO o alguna funcionalidad similar para cambiarte de usuario .. Realmente PHP al "salir" a la "Shell" lo hace con el usuario que PHP se instaló .. es decir cara a ejecutar funciones de PHP como chmod() lo hace con esos permisos ..

Cita:
Lo que necesito saber es cómo hacer para que PHP lea los directorios, subdirectorios y archivos de forma recursiva, osease TODO lo que haya dentro de un directorio preestablecido del servidor y le cambie los permisos.
En la documentación de PHP oficial ... en las funciones como readdir() tienes muchas propuestas (en los comentarios de los usuarios) para recorrer directorios en forma recursiva:

http://www.php.net/manual/es/function.readdir.php

Por otro lado .....

Si ya puedes crear un "Cron Tab" .. ¿por qué no usas el código Shell correspondiente para dicha taréa .. (chmod como coresponda ...) .. No necesitas un script PHP para tal taréa. Igualmente tendrías que tener presente en el comando a ejecutar que lo haga con el usuario que tenga permisos suficientes para esa taréa y con el parámetro adecuado para que sea "recursivo" .. Intenga probar esta opción .. es mucho más rápida que no crear un script PHP para tal fin .. (y sino, .. pruebalo tu mismo .. implementa las dos soluciones y decide tu mismo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 21/06/2006, 09:17
 
Fecha de Ingreso: junio-2006
Ubicación: Valencia, Venezuela
Mensajes: 22
Antigüedad: 11 años, 5 meses
Puntos: 0
De acuerdo Permisivos

Necesita es cambiar los permisos de carpeta a 755

Necesitas tener tus directorios o archivos con permisos 777, incluso si tus documentos de instalacion te indican lo contrario. Los permisos 755 funcionan del mismo modo. Los scripts que sean de tu propiedad (nombre de usuario) seran capaces de escribir en tus archivos, de la misma manera que lo harian con permisos 777.

Tambien si tienes aplicaciones PHP/scripts con directorios de permisos 777 (necesario para que sean escritos u modificados cuando se usa el modulo php en apache *no es este caso*) los permisos de carpeta deberan ser cambiados a 755.


O si es para subir un archivo..

chmod
(PHP 3, PHP 4, PHP 5)

chmod -- Cambia permisos de un archivo
Descripción
int chmod ( string nombre_archivo, int modo )


Trata de cambiar los permisos del archivo especificado por nombre_archivo a los permisos dados por modo.

Note que modo no es asumido de forma automática como un valor octal. Para asegurar que se hace la operación esperada necesitas anteponer un cero (0) como prefijo del parámetro modo:



Cita:
<?php
chmod("/somedir/somefile", 755); // decimal; probablemente incorrecto
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; incorrecto
chmod("/somedir/somefile", 0755); // octal; valor correcto
?>

El parámetro modo consiste de tres componentes de valor octal que especifican las restricciones de acceso para el propietario, el grupo de usuarios al que pertenece el propietario del archivo, y todo el mundo, e ese orden. Uno de los componentes puede ser calculado al agregarle los permisos necesarios para ese usuario en especifico, El número 1 significa que tiene permisos de ejecución, el número 2 significa que puede modificar el contenido del archivo, el número 4 significa que puede leer el contenido del archivo. Agrege estos valores para especificar los permisos necesrios. También se puede leer más acerca de los modos en sistemas Unix con los comandos 'man 1 chmod' y 'man 2 chmod'.



Cita:
/*<?php
// Lectura y escritura para el propietario, y nada para los demas
chmod("/somedir/somefile", 0600);*/

// Lectura y escritura para el propietario, y lectura para los demas
chmod("/somedir/somefile", 0644);

// todos los permisos par el propietario, lectyra y escritura para los demas
chmod("/somedir/somefile", 0755);

// Todo para el propietario, lectura y ejecucion para el grupo del propietario
chmod("/somedir/somefile", 0750);
?>


Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.

Nota: El usuario actual es con el cual PHP se ejecuta. Es probable que no sea el mismo usuario que usa para accesos FTP o por shell.

Nota: Esta funcion no funcionara con ficheros remotos ya que el fichero a examinar tiene que estar disponible desde el sistema de ficheros del servidor.

Nota: Cuando safe mode está activado, PHP checa si los archivos o directorios con lo que quiere trabajar tienen la misma identificación de usuario (UID) (propietario) que el que está ejecutando el script. Además no puede cambiar el SUID, SGID y los sticky bits.

Puedes revisar mas acerca de Permisivos aqui

ve.php.net/manual/es/function.chmod.php
  #4 (permalink)  
Antiguo 21/06/2006, 10:07
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 6 meses
Puntos: 0
Muchisimas gracias a ambos, grandes respuestas y muy elaboradas. Me decantaría por la opción de Cluster de usar código shell, el problema es que ando algo limitado al respecto, conozco sentencias de administración de archivos, pero no dejan de ser las básicas para cambiar permisos, comprimir, cambiar propietarios/grupos, detener servicios y unas cuantas más que uso a diario en mis servidores Linux. Por lo que no tengo ni idea de programar algo que realice esta acción que necesito.

Estoy seguro de que es infinitamente más sencillo hacerlo con el código de la shell ya que es un código orientado a este tipo de acciones, y seguramente basten unas cuantas lineas de programación.

Es un tema bastante urgente ya que tengo al cliente esperando y teóricamente hoy tendría que ofrecerle una solución, por lo que en lo que puedan ayudarme les quedaría sumamente agradecido. Del mismo modo si conocen alguna web en donde podría encontrar más info para realizar el script, también sería de ayuda.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #5 (permalink)  
Antiguo 21/06/2006, 11:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con una sóla línea lo podrías hacer en tu definición del Cron Tab .. se trata de que uses el mismo comando que usas si lo haces por tu Shell común ..

Te recomendaría preguntar en el foro de Linux sobre la definición de tu Cron Tab con ese tipo de comando que requieres ..

Si te vas por el lado "PHP" .. ya te indiqué donde ver códigos de ejemplo que recorren directorios en forma recursiva como para que ahí apliques tu chmod() de PHP ... (Si luego tienes problemas con los permisos de usuarios sería otro cuento a solucionar ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 10:27.