linux — PHP passthru (), возвращающий & quot; sh: 1: svn: not found & quot; ошибка

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

У меня есть сценарий PHP на том же сервере, который делает пройти вызов, чтобы выполнить простую команду номера версии SVN в этой песочнице:

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

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

«sh: 1: svn: not found» клиент боковая сторона. Это означает, что SVN не установлен? Тем не менее, он на самом деле установлен на сервере, более того, я могу нормально использовать SVN, пока я вхожу в систему.

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

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

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

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

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

У администраторов серверов обычно есть какая-то защита от сценариев с использованием exec (), о которой я не знаю?

0

Решение

Это означает, что 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');
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]