• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPから環境変数'PATH'が使えない)

PHPから環境変数'PATH'が使えない

このQ&Aのポイント
  • WordPressのプラグインでffmpegのフルパスが取得できない問題が発生。
  • Webから実行するとパスが通っていないことが判明。
  • 環境変数「PATH」を通すことで問題が解決する可能性がある。

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.4

>環境変数「PATH」さえ通れば、問題が解決するのではないか まぁそうだと思います。おそらく単にPATHの値がきちんと設定できていないだけではないかと思います。とりあえず最低限まず、「PATH」が通っているのか確認しましょうよ。 で、なぜ自分で確認しないのでしょうか? PATHを表示させる方法が分からないのですかね。 「echo getenv('PATH');」でも 「phpinfo();」でも何でもいいですよ。 いうまでもないことですけど、問題が起きているのはWeb上なので、 Webサーバーにtest.phpなどを配置して確認してくださいね。 話はそれからです。 で、PATHが意図せぬおかしな値になっているのではないかと思います。そのPATHの値を見れば何をミスったのかが分かる可能性が高いと思います。 たぶん既存のPATHに追加するつもりで間違えて、上書きするような記述をしたとかそういう話だと思います。

narism
質問者

お礼

補足を書いた後に当該プラグインのサポートフォーラムを見たところ、作者から回答が来ていました。 http://wordpress.org/support/topic/ffmpeg-not-found-1 プラグインのバグ、ということで次期バージョンで直してくれることになりました。

narism
質問者

補足

ご回答ありがとうございます。 > で、なぜ自分で確認しないのでしょうか? 残念ながら、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のプラグイン」です。 私が書いたものではありません。 他の環境では動作実績もあるようなので、「うっかり上書き」の可能性は極めて低いと考えています。 (本件、プラグイン作者には一応問い合わせしています)

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

まぁWEB環境から環境変数をいじるのはかなり危険だと思いますが・・・ セキュリティのしばりでputenvでもおそらくpathは変えられません。 http://php.net/manual/ja/function.putenv.php むしろ、一度 print getenv('path'); としてどのパスが有効かを確認したうえで、 すでに通っている適当なパスに、シンボリックリンクを貼る方が現実的では?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

phpはサーバー環境で動くアプリなんですから 「あればラッキー」的なwhichを使うことはない 最初からフルパス指定するだけでしょう

narism
質問者

お礼

ご回答ありがとうございます。 問題となっているのはWP用の既製プラグインの部分で、おそらく大多数の環境では動作しているものと思われます。 whichを用いでffmpegの存在判定を行っているロジックはプラグイン内に最初から記述されているコードなので、仰りたいことはよく分かるのですが、「使うのが間違い」的な話は今回種しから外れてしまいます。

  • t_ohta
  • ベストアンサー率38% (5241/13712)
回答No.1

nginxユーザーのPATH設定をしていないからでしょう。 コンソールで実行した際にうまくいくのは、ログインしているユーザーのPATHが設定されているからです。 /etc/profile にPATH設定を書いておけば全ユーザーに適応されるので、簡単かもしれませんね。

narism
質問者

補足

ご回答ありがとうございます。 nginxユーザーの.bashrcにはPATHが通してあります。 そのため、コンソールからnginxユーザーで同様のスクリプトを実行すると正しく結果が返ってきます。これは質問にも記載したとおりです。 なお、/etc/rc.d/init.d/nginxと/etc/rc.d/init.d/php-fpmにも念のため PATH=/usr/bin...()省略; export PATH を記述していますが、それでも解決しませんでした。

関連するQ&A

専門家に質問してみよう