Shell_exec с git pull?

Създавам акаунт в github, за да работя върху малък проект с няколко приятели. Бих искал моята домашна машина да може да прави git pull чрез php, така че просто трябва да извикаме този малък php файл, за да бъде машината актуална.

Към момента:

<?php
$output = shell_exec('git help');
echo "<pre>$output</pre>";
?>

Това работи перфектно и получавам резултата, аз съм в правилната директория, така че git pull трябва да работи също толкова добре, но получавам висяща страница, няма грешка, нищо.

Някаква идея ?

РЕДАКТИРАНЕ: Няколко уточнения, репото е доста малко, около 300K, отнема само няколко секунди от командния ред. Опитах също shell_exec("dir") и съм в правилната директория. Изпълнявам инсталацията по подразбиране на xampp на Windows 7 x64, ако мога да бъда достатъчно точен :)


person rnaud    schedule 26.03.2010    source източник
comment
Колко време отнема изтеглянето на отдалеченото репо? Подозирам, че просто изтичаш.   -  person Tim Post♦    schedule 26.03.2010
comment
благодаря, аз също имам уеб проект, използващ git, докато разработвам на друг компютър. след сливането на моя master офлайн винаги трябваше да се свързвам чрез ssh само за да извикам git pull origin master. сега го реших чрез php скрипт, който извиквам. проблемът разбира се беше, че php се изпълняваше като apache_mod. работи като fcgi го реши. :)   -  person    schedule 11.04.2012
comment
Колекция от съображения при опит за стартиране на git pull от php ... jondavidjohn.com/b/7m   -  person jondavidjohn    schedule 06.10.2012
comment
Моля, вижте това решение, което може да ви бъде полезно: stackoverflow.com/questions/9978400/   -  person DrBeco    schedule 08.06.2021


Отговори (2)


Предлагам да проучите set_time_limit() , както и да се уверите, вашето git pull не спира, ако потребителят прекъсне връзката чрез ignore_user_abort(). Дори да работят от гигабитов свързан сървър, някои хранилища просто отнемат известно време, за да се клонират.

Освен това проверете работната директория на PHP и уверете се, че потребителят, работещ с PHP, има привилегии да пише в репото. Ако сте стартирали това чрез CLI и то „просто работи“, има добър шанс PHP да е работил без подходящи привилегии, когато е достъпен през какъвто и да е уеб сървър, който използвате.

Ако chmod директорията за дестинация като 777 и тя работи, има много голям шанс да трябва да прекомпилирате apache/php за поддръжка на suexec. Моля, не го оставяйте просто като 777, ако случаят е такъв :)

Така или иначе времето за изчакване и потребителските прекъсвания все още са валидни съображения, дори след като го накарате да работи.

person Tim Post♦    schedule 26.03.2010
comment
Работата е там, че от командния ред командата отнема само секунда, хранилището е много малко. И дори да го оставя да работи няколко минути, нищо. Работната директория е правилната, тъй като php скриптът се извиква от основната директория на проекта. (Опитах и ​​shell_exec dir, за да съм сигурен). - person rnaud; 26.03.2010
comment
Работя под Windows, така че няма chmod. Но въпросът за привилегиите е добър, ще го потърся. Ще добавя времево ограничение и ще игнорирам прекъсването на потребителя веднага щом заработи :) - person rnaud; 26.03.2010

И така, да отговоря на собствения си въпрос.

Всъщност това беше проблем с разрешение (благодаря Тим), от PHP CLI, скриптът работеше.

Проблемът беше, че инсталацията на услугата php използва някои странни разрешения. Така че вие/аз трябва да стартирате PHP сървъра чрез командния ред (или в този случай контролния панел на Xampp).

Сега работи, като ми дава „Вече е актуален“. отговор, който чаках :)

person rnaud    schedule 26.03.2010