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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Q&A

解決済

1回答

4643閲覧

複数のバージョンのphpに読ませるphp.iniをレジストリ設定で分けたい

kataware

総合スコア17

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

0グッド

1クリップ

投稿2017/10/06 06:12

編集2017/10/06 06:52

開発を行っているwindows機で
php5.6と php7.2 を一つのapacheで動かそうと目論んでいます。
どっちもモジュール版のPHPです。

httpd.confをいじくって
http://localhost7で呼び出したときは php7.2
それ以外のホスト名(http://localhost等)で呼び出したときは php5.6で動かす
というのが目標で、PHPのバージョンを分けるところまではできました。
(phpinfo()で確認した)


本題はここからです。

phpの使い分けはできるようになったのですが
php.iniをそれぞれ別のものを読ませたいのにうまくいきません。

http://php.net/manual/ja/configuration.file.php
php.iniのパスなどについては↑を見ました。

・httpd.confのPHPINIDirは削除する
ここに書いた指定が一番強く、5と7両方に適用されると思われるため
・レジストリに手を加える
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5.6
というキーを作成し文字列 IniFilePath に c:/xampp/php56 といれる
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\7.2
というキーを作成し文字列 IniFilePath に c:/xampp/php72 といれる

php.iniに対する設定としてはこのような事おこないApacheの再起動をしました。
でも、
phpinfo()の結果は 5も7も
Configuration File (php.ini) Path C:\Windows
Loaded Configuration File (none)
となります。

この結果の Configuration File (php.ini) Path を見る限りだと
レジストリキーの設定方法について勘違いをしているような気がしますが
値をディレクトリではなく直接php.iniファイルにしてみたり
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\7.2に直接パスを入れてみたりしましたが
Configuration File (php.ini) Path C:\Windows
Loaded Configuration File (none)
のままです。

また、httpd.confのPHPINIDirに c:/xampp/php といれてみたところ
Configuration File (php.ini) Path C:\Windows
Loaded Configuration File c:/xampp/php/php.ini
となりました。
これも少し違和感があって
php.iniは意図したものを読めているものの
Configuration File (php.ini) Pathが示す結果は意図しないものではないかと思います。


少し質問点がぼやけてしまいましたが
・まず、レジストリキーの設定でバージョンごとにphp.iniを分けたい
・Configuration File (php.ini) Pathの値が変わらないのはなぜか
この2点について教えていただければと思います。
※・Configuration File (php.ini) Path についてはコンパイル時に決定された値が表示されるので、あとからの設定などが表示されることはないとの回答をいただきました。ありがとうございます。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

レジストリで php.ini の場所を指定する際には、
・HKEY_LOCAL_MACHINE\Software\PHP\5.6
というレジストリキーの下に IniFilePath というエントリを作り、その値に php.ini をフルパスで指定します。つまり ** 最後の php.ini まで ** を指定する必要があります。
c:/xampp/php56/php.ini
のように。

Configuration File Path の値は、PHP 自体のコンパイル時のオプション(--with-config-file-path)で決定されるものですので、変化しません。
これはつまり、いろんな場所で見つからなかった場合の、最後の最後に見るべき場所として設定されているものです。

※※※※※
64bitOS 上で 32bit の PHP を動かしている場合は、レジストリの場所が異なります。
(日本語訳のマニュアルではその部分が欠落している)

As of PHP 5.2.0, the location of the php.ini file can be set for different versions of PHP. The root of the registry keys depends on 32- or 64-bitness of the installed OS and PHP. For 32-bit PHP on a 32-bit OS or a 64-bit PHP on a 64-bit OS use [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP] for 32-bit version of PHP on a 64-bit OS use [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]] instead. For same bitness installation the following registry keys are examined in order: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], where x, y and z mean the PHP major, minor and release versions. For 32 bit versions of PHP on a 64 bit OS the following registry keys are examined in order: [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x], where x, y and z mean the PHP major, minor and release versions. If there is a value for IniFilePath in any of these keys, the first one found will be used as the location of the php.ini (Windows only).

しかも order の example ではパスが間違ってる(汗)

実際に試したところ、
HKLM\SOFTWARE\WOW6432Node\PHP\5.6 の IniFilePath に、php.ini のあるディレクトリのフルパスを記述すると、うまく動いてくれました。

投稿2017/10/06 06:34

編集2017/10/06 08:39
tacsheaven

総合スコア13703

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

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

kataware

2017/10/06 06:49

Configuration File Path の値については理解しました! ありがとうございます! レジストリの設定については自分ではそれも試したつもりなのですが、うまくいきませんでした。 1. win+R で regedit を呼び出す 2. 左側のフォルダのようなところで HKEY_LOCAL_MACHINE\Software\PHP\5.6 まで作成する <=キー 3. 右側で右クリックし 新規>文字列型 を選択 4. 名前を IniFilePath と入力 5. それをダブルクリックして 値のデータの個所に c:/xampp/php56/php.ini と入力する 6. 念のためOS再起動 という手順を踏んでphpinfo()を確認してもやはり Loaded Configuration File (none) となってしまい、php.iniが読めていないようです。 レジストリキーの設定方法に問題がありそうでしょうか?
tacsheaven

2017/10/06 07:02

IniFilePath の内容はパス指定ですから、パス区切り文字は / じゃなくて \ になりますね、そういえば。
kataware

2017/10/06 07:26

/でやっても \でやっても ダメでした orz
tacsheaven

2017/10/06 08:35

回答を修正しました。オリジナルのマニュアル読まないとわからんとは(汗
kataware

2017/10/06 10:14

ありがとうございました! なんと、日本語のマニュアルに抜けがあったとは!!!! 非常に助かりました! 無事に設定できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問