working shell_exec not example ejemplos ejecutar desde php svn shell browser

shell_exec - Llamar a una actualización de svn desde un script php a través de un navegador no funciona



php shell_exec example (6)

Tengo dos guiones.

  1. ejecutar una actualización y llamar a shell_exec (''svn update'') y shell_exec (''svn st'')
  2. ejecutando un mysqldump shell_exec (''mysqldump params'')

El script svn no ejecuta el comando de actualización, el svn st está imprimiendo los resultados, pero no la svn update

Traté de declarar los parámetros al llamar a svn update, por ejemplo, ''svn update''. dir. ''--username myuser --password mypasswd --non-interactive''; - Todavía no se jugó nada con la mayoría de los params

Si esto es algo relacionado con binarios / permisos / grupos, no lo veo. El comando mysqldump funciona bien y está produciendo un archivo, entonces ¿por qué el svn no está actualizando el sistema de archivos?

Por favor, no aconseje el uso de clases SVN básicas en PHP. Esta no es una opción, no tengo control total sobre el servidor y el módulo no está disponible.

Gracias por tu ayuda,

-hbt

PD: algo importante que mencionar aquí. Los scripts funcionan cuando se llaman a través de la línea de comando. Solo falla cuando se llama a través de un navegador web.



Podría ser un problema de permiso: el script llamado a través de un navegador web se ejecuta con un nombre de usuario diferente al propietario del directorio de trabajo svn, por lo tanto, tiene acceso de solo lectura. El acceso de solo lectura debería ser suficiente para que el svn status ejecute, pero no para la svn update (aunque en este caso debería haber un error como "svn: No se puede abrir el archivo ''.svn / lock'': Permiso denegado" ).


DE ACUERDO. Entiendo. Es un problema con los permisos. El directorio .svn debe tener los permisos correctos porque el comando svn update usa esos directorios para escribir cosas.

¡Asi que! --- Asegúrate de ejecutar todos los comandos chmod como sudo o root ----

  1. ejecutar un chmod 777 en el directorio .svn
  2. ejecutar una actualización de svn a través de la línea de comando
  3. guión de llamada

Si nada Debe ejecutar chmod 777 recursivamente para todos los directorios .svn y luego ejecutar otra actualización svn

¿Aún nada?

Asegúrese de no tener dos clientes svn En mi caso, el cliente svn utilizado por la interfaz de usuario es diferente de la svn (línea de comandos). Si tiene dos clientes, asegúrese de que estén ejecutando la misma versión O actualice su script para llamar el cliente directamente

¿Aún nada?

Ejecuta una actualización de chmod 777 -R * svn y vuelve a intentarlo

Si puede hacer que funcione con otro conjunto de permisos, hágamelo saber. Sé que 777 no es ideal, pero no puedo hacer que funcione con algo más bajo.

Gracias de nuevo chicos.


También me encontré con el mismo problema, pero ni siquiera los permisos lo resolvieron.

Basado en algunos de los otros consejos aquí, lo hice:

<?php echo shell_exec(''2>&1 svn update /path/to/checked/out/directory/ --non-interactive'');

Luego recibí un error volcado en mi navegador:

svn: warning: Can''t open file ''/root/.subversion/servers'': Permission denied svn: OPTIONS of ''http://my.svn.server/svn/project/trunk'': authorization failed: Could not authenticate to server: rejected Basic challenge (http://my.svn.server)

No estoy seguro de por qué mi usuario del servidor web intentó acceder / root pero solucioné el problema sin cambiar ningún permiso agregando --config-dir al comando svn up:

<?php echo shell_exec(''2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion'');

* Tenga en cuenta que /path/to/my/home/.subversion existe porque el pago inicial se realizó en la línea de comando


Sí, el problema son los permisos con el directorio .svn.

Asegúrate de que tenga los permisos correctos para el usuario que PHP está ejecutando como (en mi caso fue apache) y chmod a 775.


para obtener el error estándar en el uso del valor de retorno:

shell_exec(''2>&1 svn update'')

no funciona si pones los 2>&1 al final