Shell_exec с git pull?

Я настраиваю учетную запись github для работы над небольшим проектом с друзьями. Я хотел бы, чтобы моя домашняя машина могла выполнять git pull через php, так что нам просто нужно вызвать этот небольшой файл php, чтобы машина была в курсе.

На данный момент:

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

Это работает отлично, и я получаю вывод, я нахожусь в правильном каталоге, поэтому git pull должен работать так же хорошо, но я получаю зависшую страницу, никаких ошибок, ничего.

Есть идеи ?

EDIT: Несколько уточнений, репо довольно маленькое, около 300 КБ, это занимает всего несколько секунд из командной строки. Я также попробовал shell_exec("dir"), и я нахожусь в правильном каталоге. Я запускаю установку xampp по умолчанию в Windows 7 x64, если я могу быть достаточно точным :)


person rnaud    schedule 26.03.2010    source источник
comment
Сколько времени нужно, чтобы вытащить удаленное репо? Я подозреваю, что вы просто выжидаете.   -  person Tim Post♦    schedule 26.03.2010
comment
спасибо, у меня также есть веб-проект, использующий git при разработке на другом компьютере. после слияния моего мастера в автономном режиме мне всегда приходилось подключаться через 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, просто чтобы быть уверенным). - person rnaud; 26.03.2010
comment
Я работаю под Windows, поэтому без chmod. Но вопрос о привилегиях хороший, я посмотрю. Я добавлю ограничение по времени и проигнорирую прерывание пользователя, как только у меня это заработает :) - person rnaud; 26.03.2010

Итак, чтобы ответить на мой собственный вопрос.

На самом деле это была проблема с разрешением (спасибо, Тим), из PHP CLI скрипт работал.

Проблема заключалась в том, что установка службы php использует какие-то странные разрешения. Поэтому вам/мне нужно запустить сервер PHP через командную строку (или, в данном случае, через панель управления Xampp).

Теперь он работает, давая мне «Уже обновлен». ответ, которого я ждал :)

person rnaud    schedule 26.03.2010