Вызов svn-обновления из php-скрипта через браузер не работает - PullRequest
3 голосов
/ 01 июня 2010

У меня есть два сценария.

  1. запуск обновления и вызов shell_exec ('svn update') и shell_exec ('svn st')
  2. запуск mysqldump shell_exec ('mysqldump params')

В сценарии svn не выполняется команда обновления, svn st печатает результаты, но не svn update

Я пытался объявить параметры при вызове svn update, например 'svn update'. режиссер '--username myuser --password mypasswd --non-interactive'; -- еще ничего Играется с большинством параметров

Если это связано с двоичными файлами / разрешениями / группами, я этого не вижу. Команда mysqldump работает нормально и создает файл, так почему же svn не обновляет файловую систему?

Пожалуйста, не советуйте использовать основные классы SVN в PHP. Это не вариант, у меня нет полного контроля над сервером, и модуль недоступен.

Спасибо за вашу помощь,

-hbt

PS: важно упомянуть здесь. Скрипты работают при вызове из командной строки. Сбой только при вызове через веб-браузер.

Ответы [ 6 ]

3 голосов
/ 29 августа 2012

Я также столкнулся с той же проблемой, но даже разрешения не решили ее.

Основываясь на некоторых других советах, я сделал:

<?php
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive');

Я получил сообщение об ошибке в моем браузере:

svn: warning: Can't open file '/root/.subversion/servers': Permission denied
svn: OPTIONS of 'http://my.svn.server/svn/project/trunk': authorization failed: Could not authenticate to server: rejected Basic challenge (http://my.svn.server)

Не знаю, почему пользователь моего веб-сервера пытался получить доступ к / root, но я исправил проблему, не меняя никаких разрешений, добавив --config-dir к команде svn up:

<?php
echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion');

* Обратите внимание, что /path/to/my/home/.subversion существует, поскольку первоначальная проверка была выполнена в командной строке

2 голосов
/ 09 февраля 2011

, чтобы получить стандартную ошибку в возвращаемом значении, используйте:

shell_exec('2>&1 svn update')

, это не сработает, если вы поставите 2>&1 в конце

1 голос
/ 10 сентября 2011

Да, проблема в разрешениях для каталога .svn.

Убедитесь, что у него есть правильные разрешения для пользователя, под которым работает PHP (в моем случае это был apache), и chmod это 775.

1 голос
/ 02 июня 2010

OK. Я понял. Это проблема с разрешениями. Каталог .svn должен иметь необходимые разрешения, потому что команда svn update использует эти каталоги для записи материала.

Так! --- Убедитесь, что вы запускаете все команды chmod как sudo или root ----

  1. запустить chmod 777 в каталоге .svn
  2. запустить обновление SVN из командной строки
  3. скрипт вызова

Если ничего. Вы должны запустить chmod 777 рекурсивно для всех каталогов .svn, а затем запустить другое обновление svn

Все равно ничего не нашли?

Убедитесь, что у вас нет двух клиентов SVN В моем случае svn-клиент, используемый пользовательским интерфейсом, отличается от svn (командной строки) Если у вас есть два клиента, убедитесь, что они работают с одной и той же версией Или обновите ваш скрипт, чтобы напрямую вызывать клиента.

Все равно ничего не нашли?

Запустите chmod 777 -R * SVN обновление и попробуйте еще раз

Если вы можете заставить его работать с другим набором разрешений, пожалуйста, дайте мне знать. Я знаю, что 777 не идеален, но я не могу заставить его работать с чем-то более низким.

Еще раз спасибо, ребята.

1 голос
/ 01 июня 2010

Вы пробовали расширение PECL svn ? Вам не нужно использовать shell_exec для этого.

0 голосов
/ 01 июня 2010

Это может быть проблема с правами доступа: скрипт, вызываемый через веб-браузер, запускается под другим именем пользователя, нежели владелец рабочего каталога svn, поэтому он имеет доступ только для чтения. Доступ только для чтения должен быть достаточным для выполнения svn status, но не для svn update (хотя в этом случае должна быть ошибка типа "svn: Невозможно открыть файл '.svn / lock': Permission отказано ").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...