Я использую MAMP 2.2, PHP 5.3.5, на OSX 10.8.5. Недавно установил gpgme, gnupg. Пришлось работать с вещами, чтобы получить и загрузить зависимости, но поверить, что все установлено нормально. Также установлен GPGTools.
Я написал два довольно простых сценария PHP, один из которых будет импортировать открытый ключ, сгенерированный в другом месте, а другой — список ключей в связке ключей. Расположение ключей — /Users/myuser/.gnupg
MAMP Apache настроен для работы от имени меня (myuser). Когда я выполняю любой из моих сценариев с использованием PHP CLI, тогда все работает нормально и работает как положено. Когда я выполняю в Apache, они запускаются, значения var_dumped & echo бы все выглядело правильно, но gnupg-> import () будет просто регистрировать «импорт не удался», а gnupg-> keyinfo () говорит «не удалось инициировать список ключей».
Я попытался установить разрешения как можно более широко открытыми для .gnupg dir и содержимого; неудачно.
Код для перечисления ключей:
<?php
error_reporting(-1);
// set path to keyring directory
putenv('GNUPGHOME=/Users/myuser/.gnupg');
var_dump(getenv('GNUPGHOME'));
echo exec('whoami');
echo is_dir('/Users/myuser/.gnupg');
echo '<br/>';
$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING);
try {
$info = $gpg->keyinfo('');
print_r($info);
} catch (Exception $e) {
echo 'ERROR: ' . $e->getMessage();
}
Я что-то упускаю из виду?
Проблема здесь в том, что apache использует другого пользователя (для ubuntu это www-data, но я не уверен насчет OSX), а папка .gnupg доступна только владельцу (chmod 600). Вот почему cli работает (потому что вы вошли как владелец), а apache — нет (потому что пользователь apache не является владельцем каталога .gnupg).
Пожалуйста, установите папку / home для пользователя apache, а затем сгенерируйте свою собственную пару ключей gnupg. Если apache является владельцем собственных ключей, и вы указываете на папку apache при установке переменной env GNUPGHOME, она будет работать нормально.
Других решений пока нет …