※ ChatGPTを利用し、要約された質問です(原文:PHPから環境変数'PATH'が使えない)
PHPから環境変数'PATH'が使えない
このQ&Aのポイント
WordPressのプラグインでffmpegのフルパスが取得できない問題が発生。
Webから実行するとパスが通っていないことが判明。
環境変数「PATH」を通すことで問題が解決する可能性がある。
WordPressの「WP Video Posts」というプラグインで標記の問題が発生しています。
プラグインの中で、ffmpegのインストール状況をチェックする関数が
exec("which ffmpeg",$output,$status);
を実行し、ffmpegのフルパスを取りたいらしいのですが、
このとき$status=1(異常)になって、$outputが空になります。
試しに
exec("which ffmpeg 2>&1",$output,$status);
と書いたところ、$outputに「which: no ffmpeg in ((null))」が返ってきて、
PATHが通っていないことに気づきました。
ちなみに、同じスクリプトをコンソールから叩いた場合には、
正しい結果「/usr/bin/ffmpeg」が取得できます。
Webから実行した時だけ、上手く行きません。
(Webとコンソールは同じユーザーです)
以下、サーバーの情報です。
CentOS 6.4
PHP 5.3.3
nginx 1.4.2
php-fpm
WordPress 3.9.2
WP Video Posts 3.1.5
nginxの実行ユーザー:nginx
php-fpm(PHP)の実行ユーザー:nginx
環境変数「PATH」さえ通れば、問題が解決するのではないかと思っています。
開発方法をご存知の方、ご教示ください。
宜しくお願い致します。
お礼
補足を書いた後に当該プラグインのサポートフォーラムを見たところ、作者から回答が来ていました。 http://wordpress.org/support/topic/ffmpeg-not-found-1 プラグインのバグ、ということで次期バージョンで直してくれることになりました。
補足
ご回答ありがとうございます。 > で、なぜ自分で確認しないのでしょうか? 残念ながら、getenv('path')もphpinfo()も、ご指摘のtest.php的なものを置いて確認済みです。 質問内に書いていなかったので試していないと勘違いされたのであれば、質問の書き方が悪かったかもしれません。 申し訳ありません。 環境変数「PATH」がPHP内で参照出来ない状態であることは分かっていますので、以下のことは試しました。 それでも解決できないため、質問させていただいています。 ----------------------------- ・/etc/rc.d/init.d/php-fpm のスクリプト内でPATHを定義してexport(その後php-fpmを再起動) ・/etc/rc.d/init.d/nginx のスクリプト内でPATHを定義してexport(その後nginxを再起動) ・nginxの.bashrcでPATHを定義してexport(その後nginx,php-fpmを再起動) ----------------------------- phpinfo()で見た時、_SERVER['PATH']または_ENV['PATH']の値がおかしいのではなく、 phpinfo()に_SERVER['PATH']、_ENV['PATH']そのものが存在しません。 セキュリティの設定かと思いましたが、SELinuxはDisabled、phpのsafe_modeもOFFです。 また、以下は既存のPATHを上書きしてしまったのでは? という件に対する補足です。 別の方の補足にも書いたのですが、 「今回問題になっているPHPのプログラムは、既製のWordPressのプラグイン」です。 私が書いたものではありません。 他の環境では動作実績もあるようなので、「うっかり上書き」の可能性は極めて低いと考えています。 (本件、プラグイン作者には一応問い合わせしています)