команда exec работает в терминале не с PHP - PullRequest
3 голосов
/ 01 марта 2011

Я пишу класс, который позволил мне получить доступ к recutils через PHP.

У меня есть файл базы данных с именем books.rec в ../database/ и скрипт, который запускает мой класс Recutils.php.

Мой класс просто запускает системное приложение с правильными параметрами.

Но когда я пытаюсь использовать recins с функцией PHP exec, команда не работает, она будет работать в командной строке.

Это команда, которая выполняется моим сценарием:

recins -f Title -v "Moi" -f Author -v "Moche" -f Location -v "loaned" -t Books ../database/books.rec

С PHP: ничего, запись не вставляется (вообще без сообщений об ошибках).
В терминале: ОК, команда выполнена хорошо, и моя запись вставлена.

У меня также есть метод для выполнения операции select с использованием recsel, и он работает очень хорошо, будет ли он использовать точно такой же файл (и также запускается с exec).

Так, может кто-нибудь объяснить мне, почему команда не работает, будет работать другая с тем же файлом?

Спасибо

PS: Дополнительная информация: http://www.gnu.org/software/recutils/

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Я бы дважды проверил, что вы запускаете команду как тот же пользователь из командной строки и вашего php-скрипта.Это может быть проблемой.exec('whoami')

Вы сказали, что у вас есть скрипт, который запускает ваш php-скрипт, это должен быть тот же пользователь, что и у него.

Возможно, вы захотите запустить более простую команду exec, чтобы посмотреть, будет лиработай первым.

Другие вещи, которые нужно попробовать:

  1. Попробуйте проверить вывод stderr exec('ls /tmp 2>&1', $out); Это перенаправит стандартную ошибку на стандартную, так что вы получите оба.
  2. Попробуйтеиспользуя php shell_exec(), который будет вызывать оболочку точно так же, как при запуске из командной строки (например, bash).shell_exec('ls /tmp 2>&1 >> /tmp/log') должен даже поместить весь вывод в файл журнала.
  3. Я не думаю, что это поможет вам, но стоит попробовать, если все остальное не получится, установите его в качестве фонового процесса и посмотрите, завершится ли он.,exec('nohup php process.php > process.out 2> process.err < /dev/null &').Команда & установит команду для выполнения в фоновом режиме и продолжит выполнение сценария.

Удачи

0 голосов
/ 01 марта 2011

Доступна ли команда recins для PHP? Также правильный путь к books.rec? Попробуйте с абсолютным путем.

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