Наш университет имеет бесплатный хостинг на сервере 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(), о которых я не знаю?
Это означает, что 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');
?>
PATH
должно работать очень хорошо. Или вы можете просто попробовать запустить абсолютный путьsvn
, как показано в обновлении (заменив/svnpath
на фактический путь кsvn
конечно).