このホームページを構築しているレンタルサーバのFreeBSDがアップグレード(Ver6 から Ver7 へ)された後に、いままで PHP の exec 関数で実行できていた外部コマンド (gpg コマンド) が実行できなくなった。
なお、sshで接続したシェル上より直接PHPスクリプトを実行した場合は、exec関数でgpgコマンドは問題なく実行できる。
実行できなくなったPHPスクリプトの例 : test.php
<?php
exec("gpg -a -e -r mymail@example.com filename.txt");
?>
UNIXのシェル上からは実行可能 (次の例)
[user@www] php test.php
まず疑ったのは、セーフモード。 次のようなスクリプトで、PHPの環境を調査してみる。
<?php
$str=phpinfo();
print($str);
?>
表示されたPHPの環境は次のようなもので、特に問題は無い (セーフモードの設定はphp公式マニュアルに書かれている)
safe_mode = Off
safe_mode_exec_dir = "/usr/local/php/bin"
なお、 safe_mode_exec_dir を php.ini で無理矢理 gpg のパスに変更しても、状況は代わらず。
safe_mode_exec_dir="/usr/local/bin/"
ログファイルにも、何も記録されていないし。お手上げ。
ログファイルの設定 (ログ設定はphp公式マニュアルに書かれている)
php.ini
display_errors=Off
error_reporting=E_ALL ← これに変更
;error_reporting=E_ALL & ~E_NOTICE
log_errors=On
error_log="/home/username/log/phperror.log"
PHPスクリプトはユーザ権限で動いている(PHPでファイルを作成すると、そのユーザ所有になるため)ので、特に問題あるようには思えない。
解決手法はどこか他にあるんだろうね…