質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

20340閲覧

PHPパスをPHPから調べる方法はありますか?【その2】

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/05/14 10:06

編集2015/05/15 06:00

cron,execコマンドを実行する時に必要となる php パス の調査方法について
下記のような方法があることを教えていただきました。
https://teratail.com/questions/9827

lang

1<?php 2 echo exec('which php'); 3?>

lang

1<?php 2 //php >= 5.4 3 echo PHP_BINARY; 4?>

色々とテストしてみたところ、ここでのphpバージョンは、環境設定で指定されているバージョンで、現在実行されているプログラムファイルを処理しているphpバージョンとは必ずしも一致しませんでした。

例えば、xserverで「PHP5.3」で利用するようにサーバーパネルで設定。
execで別なファイルを呼び出します。

呼び出すファイルによる PHP_VERSION = php5.3.3
呼び出されたファイルによる PHP_VERSION = php4.3.9

xserverはphpのバージョンによりパスが異なります。

PHP4 /usr/bin/php
PHP5.1 /usr/bin/php5
PHP5.2 /usr/bin/php5.2
PHP5.3 /usr/bin/php5.3
PHP5.4 /usr/bin/php5.4
PHP5.5 /usr/bin/php5.5

実行中のphpバージョンのパスを取得できればと思うのですが、
方法はあるでしょうか?

【追記】
目的は「レンタルサーバーで設定したphpバージョンでexecを動かす」です。
利用者に調べてもらうのも良いのですが、情報がとても調べにくく、
個別(レンタルサーバーごと)に対応するのは難しい。

想定している運用は次のとおりです。
1)プログラムの利用者に設定画面にアクセスしてもらう。
2)そこで動いているphpバージョンをチェックする。
3)exec 実行時のphpパスの情報を確定・保存する。
4)exec は保存しておいたphpパスを利用して実行する。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

まず最初に、これはPHPスクリプトをコマンドラインから起動するケースでしょうか?(=バッチ)
それとも、WEBサーバからPHPをコールするケースでしょうか?

それによって答えが違ってきます。

execでCallする場合は、起動ユーザのPATH設定によって、参照するPHPが変わってくるからです。
WEBサーバで起動する場合は、libphp5.soのモジュールを参照することになるので起動したバージョンは取得するコマンドが存在します。

どちらでしょうかね?

投稿2015/05/14 14:34

kurosawa

総合スコア780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosawa

2015/05/14 14:54

【1】にありましたね。 Cronなどのコマンドから呼び出しているPHPのバージョンを、ブラウザからアクセスして確認したい。と。 これは、、、厳しい。 というのも、ブラウザから参照するPHPはモジュール(libphp5.soとかが /etc/httpd/modules 配下にいる)だと思いますが、これはコマンドラインから参照されるPHPとは別物ですよ。 =ブラウザ経由でバージョン確認してもライブラリ形式となったPHPのバージョンが表示されちゃいます なので、PHPスクリプトを作成し、execコマンドで "which php" すれば? と思うのですが、これだとApacheユーザのAlias/PATH設定に定義したPHPが参照されることでしょう。 Cronで起動させるスクリプトのユーザが、Apacheユーザならバージョンは合うと思いますが多分違いますよね? xserver のコンパネで設定すると何が変わるのでしょうかね? ログインユーザの Alias だけが PHP=/usr/****/php とかだけになってませんかね? それだと毎回ApacheユーザのAliasを変更し、再起動しないといけないので運用が絡んで凄く面倒な取得方法になってしまいます。
退会済みユーザー

退会済みユーザー

2015/05/15 06:10

目的と運用が明確でなかったので質問の方に追記しました。 最初は個別に対応していたのですが、初めて聞くにようなマイナーなレンタルサーバーも多くて、これは大変だということで。 ブラウザからのアクセスに対するphpバージョンはユーザーが管理画面から変更するのは当然なのですが、execの部分は判別できないかと思った次第です。 ブラウザから利用されるPHPとコマンドラインから参照されるPHPは、別物なんですね。 これは知りませんでした。
guest

0

力技ですが、こんな感じでどうでしょうか?

lang

1<?php 2$candidates = array( 3 '/usr/bin/php' , 4 '/usr/bin/php5' , 5 '/usr/bin/php5.2', 6 '/usr/bin/php5.3', 7 '/usr/bin/php5.4', 8 '/usr/bin/php5.5' 9); 10foreach ($candidates as $bin) { 11 if (stat($bin)) { 12 $ver = `$bin -v`; 13 $ver = substr($ver, 4, 5); 14 if ($ver === PHP_VERSION) { 15 printf("Interpreter = %s\n", $bin); 16 } 17 } 18} 19

投稿2015/05/14 13:24

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/05/15 04:28

なるほどファイルの存在を確認して、現在のバージョンとマッチさせる方法ですね。 ある程度パターンがわかっている場合有効に思えます。
guest

0

自分が借りているさくらの VPS 上では、これでも動きました。

lang

1$ cat getmypath2.php 2<?php 3$pid = getmypid(); 4$exe = readlink("/proc/$pid/exe"); 5printf("exe = %s\n", $exe); 6$ php getmypath2.php 7exe = /usr/bin/php

投稿2015/05/14 13:48

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/05/15 05:53

自分のプロセスを調べて、そこからシンボリックリンク(ショートカットのようなもの?)から調べる方法ですね。 試してみたら$exeは次のようになりました。 xserver /usr/bin/org/php53/php-cgi ロリポップ /home/users/0/php-bin/hoho.jp-user/hoge.hoge.jp/php5.4/php5.4.cgi exec実行のテストをしてみます。
hotta

2015/05/15 06:43

このケースは、Web アプリから CGI 経由で実行していますね。 Web アプリの中から(exec で呼べる)CLI アプリを調べるのは無理です。 なぜなら、Web アプリの実行エンジン(libphp5.so とか phpxx.cgi)と、 CLI バイナリ( /usr/xxx/php とか php.exe)は、お互いに独立したもので、 何の関連性もないからです。たまたま同じソースコードからビルドされ、 まとめてパッケージとして提供されるかもしれないという程度です。
退会済みユーザー

退会済みユーザー

2015/05/15 07:13

phpと一括りで考えていましたが別物として動いているんですね。 レンタルサーバーによる運用でいろいろと異なりそうですね。
guest

0

phpinfo();
を実行してみてください。

PHPの設定環境が表になって表示されます。

'Configuration File (php.ini) Path'とある横に表示されているのがPHPのパスです。
私もクローンを設定するのにこの方法で設定しました。

たとえば /usr/lib と表示されていれば、その後ろに/PHPをつけて
/usr/lib/PHP phpスクリプトのファイルパス
とすれば、phpが動作します。

試してみてください。

投稿2015/05/14 13:36

KazutoshiOhashi

総合スコア125

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/05/15 04:44

php.ini設定ファイルの設置場所から推測する方法ですね。 mamp,xserver,lolipopなどを調べてみたのですがそれぞれに実行ファイルとは別にあるようです。 /PHPをつけることで実行できるのか。まだテスト出来ていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問