Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
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:
Ave que vuela, a la cazuela.