PHP passthru () возвращает ошибку «sh: 1: svn: not found»

0

Наш университет имеет бесплатный хостинг на сервере Linux, в котором я проверил проект SVN в своем локальном каталоге студентов. При удаленном входе на сервер у меня нет проблем с добавлением/фиксацией /etc в мою изолированную среду проекта SVN на сервере.

У меня есть PHP-скрипт на том же сервере, который вызывает вызов passthru для выполнения простой команды номера версии SVN в этой изолированной среде:

<?php
    echo passthru(' 2>&1 cd /nav/to/svnSandbox && 2>&1 svn --version ');
?>

Вышеупомянутый вызов exec() выходит из строя на стороне сервера и выводит

"sh: 1: svn: не найден" на стороне клиента. Это означает, что SVN не установлен? Тем не менее, он фактически установлен на сервере, более того, я могу использовать SVN только отлично, пока я вошел в систему.

Следующий PHP-код работает правильно:

<?php
    echo passthru('pwd');
?>

Права пользователя для PHP-скрипта и SVN файла для песочницы - 755 (я также пробовал много других вариантов). Я также прочитал эту ссылку, среди многих других.

Является ли PHP-скрипт не предоставлен определенный доступ к командам SVN на стороне сервера?

Почему я не могу успешно выполнять вызовы SVN exec() из моего сценария? Есть ли более простой способ, чем мой код выше?

Администраторы-админы обычно имеют какую-то гарантию на скрипты с помощью exec(), о которых я не знаю?

Теги:
server
exec
svn

1 ответ

1

Это означает, что SVN не установлен?

Нет, это просто означает, что svn не может быть найден на вашем пути.

Это может быть связано с тем, что он не установлен или может быть, что ваш путь просто не настроен правильно для используемого вами метода.

Сравните результаты:

<?php
    echo passthru('echo $PATH');
?>

и выполнение echo $PATH при входе в систему.

Вероятно, вы найдете каталог svn на последнем, но не первый.

Тогда будет выяснено, как установить путь для метода passthru.

Это может быть так просто, как:

<?php
    echo passthru('( cd /nav/to/svnSandbox; PATH=$PATH:/svnpath; svn --version ) 2>&1');
?>

или:

<?php
    echo passthru('( cd /nav/to/svnSandbox; /svnpath/svn --version ) 2>&1');
?>
  • 0
    Вы были правы насчет различий в PATH. Спасибо, я многому научился. К сожалению, единственная вещь в PATH скрипта PHP - это / bin, и я не уверен, что смогу установить переменную PATH через вызов exec с тем, что там есть.
  • 0
    Молодой @Padawan, установить его вы можете :-) Эта команда, которую вы даете, выглядит как обычная команда оболочки, поэтому изменение PATH должно работать очень хорошо. Или вы можете просто попробовать запустить абсолютный путь svn , как показано в обновлении (заменив /svnpath на фактический путь к svn конечно).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню