Проблема запуска Subversion через exec PHP - PullRequest
3 голосов
/ 13 января 2011

Я могу запустить команду svn из командной строки, но не из скрипта PHP.Важно отметить, что я могу запустить скрипт PHP на своем Mac, и он прекрасно возвращает ожидаемые данные, но когда я загружаю их на свой сервер Linux, они не работают (из PHP ... я могу запустить команду svn из терминала),Я почти уверен, что это какая-то проблема с пользователем или разрешением.

Я могу запустить (из командной строки):

svn log http://whatever.com/svn/foo

, но ни одна из следующих работ (запускается отдельно)... не все вместе, как это):

exec('svn log http://whatever.com/svn/foo');
exec('svn log http://whatever.com/svn/foo',$out);
exec('/usr/bin/svn log http://whatever.com/svn/foo');

Однако это работает:

exec('ls');

Я предполагаю, что проблема заключается в том, что при запуске из командной строки я работаю как root, тогда какпри запуске из PHP я работаю как пользователь apache (www-data)?Может быть?Любые предложения о том, как можно запустить exec('svn log <a href="http://whatever.com/svn/foo" rel="nofollow">http://whatever.com/svn/foo</a>');?

Изменение разрешений на 777 (просто пытаюсь заставить его работать!) Не помогает.

Ответы [ 3 ]

3 голосов
/ 14 января 2011

Когда вы запускаете Subversion из командной строки, вы запускаете его как себя. То есть вы - пользователь, вошедший в систему и выполняющий команду.

Если вы запускаете Php с веб-страницы, это пользователь, который запускает демон Apache httpd (который может быть «apache», «www», «runwww» и т. Д. В зависимости от платформы). Пользователь, выполняющий скрипт PHP, может не иметь прав на чтение / запись в хранилище Subversion.

У вас есть два способа решения этой проблемы:

  • Предоставьте вашей программе учетные данные пользователя с помощью параметров командной строки --username и --password.
  • Настройка пользователя, запускающего httpd с учетными данными Subversion. Как только это будет сделано, это никогда не придется делать снова. Таким образом, ваш код PHP не содержит учетные данные для входа.
3 голосов
/ 14 января 2011

Может быть, вы можете использовать svn-клиент для php.Вот хороший http://code.google.com/p/phpsvnclient/

2 голосов
/ 14 января 2011

Вот пара тем, которые, как мне кажется, могут помочь:

Тема 1 (читайте как есть):

$cmd = '/usr/bin/svn list --config-dir /some/place file:///var/subversion/devfoundry/ 2>&1';
exec($cmd, $output); 
$output = implode("\n", $output) . "\n";
echo $output;

Тема2 :

Ошибка Subversion "svn: Can't перекодировать строку" может быть вызвана неправильной локалью.Попробуйте

<?php
    putenv('LANG=en_US.UTF-8');
?>

(или любой другой предпочитаемый язык) перед вызовом shell_exec ()

Thread 3: PHP Interactive Shell

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