Команда PHP exec pgp

Я хочу использовать PHP для «exec» команды шифрования pgp. Независимо от командной строки я получаю либо ошибку 64 (ошибка синтаксического анализатора), либо 162 (полный сбой во время кодирования). Таким образом, я сократил командную строку в программе PHP до этого простого отображения отпечатков пальцев, из-за чего выходят затворы:

exec("/opt/pgp/bin/pgp --fingerprint", $results); 

Если я запускаю «/ opt / pgp / bin / pgp –fingerprint» в командной строке, я получаю «2 ключа найдено» и ожидаемый дисплей. Но тот же exec в PHP дает мне ошибку парсера 64. Я попробовал «\ n» для строковой команды, и это не имеет значения. Пользователь работает как «никто» в браузере, который имеет разрешение на выполнение на pgp. (Если pgp не был, по крайней мере, запущен, я бы даже не увидел ошибку «parser error».)

Есть ли что-то особенное, что мне нужно сделать, чтобы запустить pgp под PHP?


Я вернулся к попытке фактически зашифровать файл данных. Вот вывод 'status-file', который создает pgp. Он явно показывает ошибку в последней строке «разрешенное разрешение» в файле, который я пытаюсь зашифровать «test.txt». Это подделка. Я предоставил весь мир r / w этому файлу, и он явно обращается к нему, потому что статус говорит, что он зашифровал содержимое. Итак, на самом деле вопрос в том, на что отказывают в разрешении?

Некоторая другая информация: если я запускаю PHP из командной строки против этого PHP-скрипта, который вызывает pgp, он отлично работает – файл шифруется. Кроме того, PERL запускает те же команды (используя SYSTEM ()) при вызове из браузера. НО, когда браузер используется для вызова этого скрипта PHP, он терпит неудачу. Очевидно, что есть некоторая проблема с правами, запущенная как «никто».

/export/home/pgphome/.pgp/pubring.pkr:open keyrings (1006: открытый ключ) /export/home/pgphome/.pgp/secring.skr:open keyrings (1007: private keyring) 0x221DC947: encrypt (1030: ключ добавлен в список получателей) /export/home/eckankar/dev/www/info/test.txt:encrypt (3048: данные, зашифрованные с помощью шифрования AES-128) / export / home / eckankar / dev / www / info / test. txt: encrypt (3124: запрещен отказ)

В качестве фона здесь приведен аргумент команды PHP exec (): / opt / pgp / bin / pgp –encrypt/export/home/eckankar/dev/inc/test.txt –output / export / home / eckankar / dev /www/info/test.xxx -r членство –overwrite remove –home-dir /export/home/pgphome/.pgp -v –status-file /export/home/eckankar/dev/inc/test.txt .err

ALl папка / каталоги в этой команде предоставили миру «rwx».

Вот как выглядит выходной файл состояния при успешном завершении шифрования, если он выполняется из командной строки (/ opt / csw / php5 / bin / php test.php), а не через браузер:

pgp: encrypt (3157: текущее местное время 2009-06-30T11: 51: 17-05: 00) /export/home/pgphome/.pgp/pubring.pkr:open keyrings (1006: public keyring) / export / home / pgphome / .pgp / secring.skr: open keyrings (1007: private keyring) 0x221DC947: encrypt (1030: добавлен ключ в список получателей) /export/home/eckankar/dev/inc/test.txt:encrypt (3048: данные зашифрованы с шифрованием AES-128) /export/home/eckankar/dev/inc/test.txt:encrypt (0: выходной файл /export/home/eckankar/dev/inc/test.txt.pgp)

Ответ: необходимо указать -temp-dir в командной строке.

Каким контекстом выполнения является этот скрипт PHP? Интерактивная командная строка, работа cron, веб-сервер (надеюсь, нет)?

В зависимости от ответа на этот вопрос я могу начать рассматривать переменные среды, от которых зависит PGP, которые не заданы при запуске этого скрипта.

Я знаю, что это старо, но я просто понял. (pgp 8,5)

Как сказал Джим Томас, это проблема с разрешением каталога. Но, по крайней мере, pgp 8.5 не позволяет вам устанавливать tmpdir каким-либо образом.

Мое решение (псевдокод):

 save cwd chdir(/tmp/) system()/exec() pgp command chdir(saved_cwd) 

Странно, что pgp заставляет dmp tmp создавать в cwd, но я не видел, чтобы флаг не влиял на местоположение.