PHP: Использование подкоманд SVN и опций в exec () вызывает «ошибку сегментации»? - PullRequest
2 голосов
/ 26 ноября 2009

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

$output = "";  
$value = "";  
exec("/opt/subversion/bin/svn info --username something --password something --non-interactive <REPO_URL> 2>&1", $output, $value);  

var_dump($output);  
var_dump($value);

Выход:

array(0) { } int(139)

139 = Ошибка сегментации, но это мало помогает, так как я понятия не имею, что может быть причиной. Выполнение того же куска кода непосредственно в терминале работает как чудо, но это проблема, если PHP пытается сделать то же самое с помощью exec ().

Если я удаляю аутентификацию, я получаю правильный вывод (запрос на аутентификацию).

Chmod-ing Subversion, исполняемый до 777, похоже, не имеет никакого значения.

Если это какой-либо смысл, то это Mac OS X 10.5.8, PHP 5.2.11 и Apache 2.2.13

Ответы [ 3 ]

1 голос
/ 16 декабря 2009

У меня также были подобные проблемы после переноса моего приложения PHP с сервера Windows на UNIX. Более конкретно, некоторые команды svn, которые я запускал через shell_exec (), возвращали нулевой вывод.

В моем случае проблема была связана с разрешениями UNIX для каталога .svn и содержащимися в нем файлами. Моя svn checkout принадлежала стандартной учетной записи пользователя. Но когда PHP-скрипт (через процесс Apache) выполнил команду shell_exec (), он сделал это, используя другую учетную запись (никто: никто), у которой не было доступа на запись в каталог .svn и важные файлы в нем (такие как. заблокировать файл).

Решением для меня было использование команды chown для создания каталогов / файлов .svn, принадлежащих той же группе, что и процесс Apache (chown -R: nobody .svn).

1 голос
/ 26 ноября 2009

exec() не работает с операторами перенаправления <и>: это функции оболочки. Простой обходной путь - вместо этого позвонить system().

0 голосов
/ 26 ноября 2009

Пара вопросов:

  1. Какой именно php вы используете для кода «раздели аутентификацию»?

  2. Содержит ли ваше имя пользователя или пароль какие-либо "забавные" символы, которые могут запутать оболочку или php? (цитаты, кавычки и т. д.)

...