shell_exec e git pull

Speravo che qualcuno potesse aiutarti, ho una pagina PHP che usa shell_exec per comprimere una directory ed eseguire git pull per far cadere le recenti modifiche al repository.

 $op = shell_exec("cd /home/user/git/$repo/$dir/; zip -r /home/user/archives/$dir.$datestamp.zip $dir; cd /home/user/git/$repo/$dir/; git pull"); 

Lo zip funziona bene. Se cambio git pull ad esempio git log o git status – all'interno di shell_exec, anche questo funziona, e posso vedere il file di log.

Sembra che non piaccia il tiro del cazzo.

Ho visto un altro post simile a questo, ma non ero sicuro di come sia stato ottenuto >> Shell_exec con git pull?

Dalla tua descrizione nei commenti sembra che il problema è che il tuo utente apache non può scrivere nel repository, che è chiaramente richiesto quando usi git pull . Hai due linee di azione:

  1. Configura Apache per eseguire lo script come un altro utente (ad esempio utilizzando suEXEC su un VirtualHost o tramite userdir )
  2. Modificare le autorizzazioni sul repository in modo che l'utente apache possa scrivere su di esso

Dovresti riflettere attentamente sulle implicazioni di sicurezza di entrambe le opzioni, ma la seconda opzione è probabilmente la più semplice. Se non hai già un gruppo simile, puoi crearlo con:

 addgroup gitwriters 

… e poi aggiungi te stesso e l'utente Apache a questo gruppo:

 adduser [yourusername] gitwriters adduser apache gitwriters 

Quindi è ansible seguire le istruzioni in un'altra domanda per modificare le autorizzazioni sul repository. Per reiterare quelli con alcune lievi variazioni:

 # Recursively, set the group ownership of every file and directory of your repository: chgrp -R gitwriters /path/to/your/repo # Recursively, make every file and directory of your repository readable and writable # by the group: chmod -R g+rw /path/to/your/repo # Recursively, set the setgid of every directory in the repository. The setgid bit # on directories means that files created in the directory will have the same group # ownership as the directory. find /path/to/your/repo -type d -print0 | xargs -0 chmod g+s 

Quindi spero che la tua git pull dovrebbe funzionare.