GIT, HACER UN PULL DESDE UN PHP SCRIPT CON LA INTRUCCION shell_exec ?

GIT, HACER UN PULL DESDE UN PHP SCRIPT CON LA INTRUCCION shell_exec
Yo intenté se actualiza un repositorio alojado en github y después actualizar desde github hacia mi servidor, pero los tutoriales que vi no especificaba que pudiera llegar a dar algunos errores por ejemplo que los permisos de la carpeta y del archivo php eran root y tenían que ser los permisos del usuario www porque el sheel no se ejecutaba correctamente con el root.
El código que yo utilizaba para intentar hacerlo el pull era el siguiente.
<?php


define(‘PRIVATE_KEY’, ‘XXXXXXXXXXXXXXXXxxx’);


if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’    
       && $_REQUEST[‘thing’] === PRIVATE_KEY)
{    
   echo shell_exec(“git pull”);
}
Pero desgraciadamente no era tan fácil paseo un buen rato o tratando de arreglar esto hasta que al fin un control.


COSAS QUE NO HABÍA TOMADO EN CUENTA
El tipo de usuario que estaba intentando ejecutar git pull era el usuario del apache (llamémosle apache_user) está usuario no reconocían la instrucción git porque no estaba en su path.
Así que uno al intentar ejecutar la destrucción exect() de php simplemente no funcionaba y tampoco enviaba errores porque php  solamente reporta errores de tipo STDOUT y no de tipo STDERR. Y para esto se tuvo que habilitar agregando a la instrucción los caracteres 2>&1 al final del comando. Después de relanzar esto puede observar los errores que se generan al intentar ejecutar un git con la función exec().
Después de esto tuve que detectar donde estaba alojado git con la comando whitch git lo cual me arrojó /full/path/to/bin/git con lo que puede definir que la instrucción para poder ejecutar correctamente el git pull desde php que a la siguiente
echo shell_exec(“/full/path/to/bin/git pull 2>&1”);
Recuerde que por lo regular es preferable cambiar de usuario roo a usuario_apache. Incluso para ser el git init si ustedes ya crearon su repositorio con usuario root tienen que cambiar los permisos de esa carpeta al usuario apache de esta forma
echo shell_exec(“/full/path/to/bin/git pull 2>&1”);




Autor: Eugenio chaparro maya
Fuentes:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Salir de la versión móvil