新しい製品にはPHP 7が必要なため、PHP 7.0でXAMPPを実行しています。
しかしmysql_connect
、などの関数を使用する古いプロジェクトがあります。それらはPHP 7.0では削除されています。
それで、XAMPPでPHPバージョンを簡単に変更する方法はありますか?
注:古いプロジェクトを新しいバージョンと互換性のあるものにアップグレードすることはお勧めしません。私は開発者(従業員だけ)として決定を下すことができないため、実行する立場にないからです。
新しい製品にはPHP 7が必要なため、PHP 7.0でXAMPPを実行しています。
しかしmysql_connect
、などの関数を使用する古いプロジェクトがあります。それらはPHP 7.0では削除されています。
それで、XAMPPでPHPバージョンを簡単に変更する方法はありますか?
注:古いプロジェクトを新しいバージョンと互換性のあるものにアップグレードすることはお勧めしません。私は開発者(従業員だけ)として決定を下すことができないため、実行する立場にないからです。
回答:
単一のxamppインストールで複数のPHPバージョンを同時に使用できるのに、なぜPHPバージョンを切り替えるのですか?単一のxamppインストールでは、2つのオプションがあります。
古いプロジェクトのディレクトリに対してのみ古いバージョンのPHPを実行します。 これはほとんどの場合に役立ちます。古いバージョンのPHPで実行する予定の古いプロジェクトが1つまたは2つある可能性があります。これらのプロジェクトディレクトリに対してのみ古いPHPバージョンを実行するようにxamppを構成するだけです。
xamppの別のポートで古いバージョンのPHPを実行する:新しいプロジェクトと古いバージョンのPHPで同じプロジェクトを繰り返し実行する必要があるときに、古いプロジェクトを最新のPHPバージョンにアップグレードしている場合があります。次に、古いポートのPHPを別のポート(たとえば8056)に設定して、http://localhost/any_project/
xamppに移動するとPHP 7を実行し、xamppに移動するとhttp://localhost:8056/any_project/
PHP 5.6を実行します。
virtualhostで古いバージョンのPHPを実行する: localhostでPHP 7を使用しながら、localhost56などの仮想ホストを作成してPHP 5.6を実行できます。
設定しましょう。
ステップ1: PHPをダウンロードする
そのため、xamppの下でPHP 7を実行していて、古いバージョンのPHPを追加したいとします。php.netからnts(非スレッドセーフ)バージョンのPHP zipアーカイブをダウンロードし(古いバージョンのアーカイブを参照)、でファイルを抽出しますc:\xampp\php56
。スレッドセーフバージョンには、php-cgi.exeは含まれていません。
ステップ2:構成php.ini
c:\xampp\php56\php.ini
メモ帳でファイルを開きます。ファイルが存在しない場合は、コピーphp.ini-development
しphp.ini
てメモ帳で開きます。次に、次の行のコメントを外します。
extension_dir = "ext"
ステップ3: Apacheを構成する
xamppコントロールパネルを開き、Apacheの設定ボタンをクリックして、をクリックしますApache (httpd-xampp.conf)
。テキストファイルが開き、ファイルの下部に次の設定が追加されます。
ScriptAlias /php56 "C:/xampp/php56"
Action application/x-httpd-php56-cgi /php56/php-cgi.exe
<Directory "C:/xampp/php56">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
注: 必要に応じて、ステップ1から3に従って、xamppインストールにPHPのバージョンを追加できます。
ステップ4(オプション1): [ディレクトリを追加して特定のPHPバージョンを実行する]
これで、PHP 5.6で実行するディレクトリを設定できます。設定ファイルの最後に以下を追加して、ディレクトリを設定します。
<Directory "C:\xampp\htdocs\my_old_project1">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</Directory>
<Directory "C:\xampp\htdocs\my_old_project2">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</Directory>
ステップ4(オプション2): [古いバージョンのPHPを別のポートで実行する]
PHP v5.6をポート8056に設定するには、次のコードを構成ファイルの最後に追加します。
Listen 8056
<VirtualHost *:8056>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</VirtualHost>
ステップ4(オプション3): [仮想ホストで古いバージョンのPHPを実行する]
http:// localhost56でPHP v5.6を使用するディレクトリ(htdocs56)に仮想ホスト(localhost56)を作成するには、目的の場所にディレクトリhtdocs56を作成し、hostsファイルにlocalhost56を追加して(方法を参照)、次のコードを追加します。 httpd-xampp.confファイルの最後に。
<VirtualHost localhost56:80>
DocumentRoot "C:\xampp\htdocs56"
ServerName localhost56
<Directory "C:\xampp\htdocs56">
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</VirtualHost>
終了: Apacheを保存して再起動します
設定ファイルを保存して閉じ、xamppコントロールパネルからApacheを再起動します。オプション2を選択した場合は、xamppコントロールパネルにリストされている追加のポート(8056)を確認できます。
エラーの更新:
スクリプト「php-cgi.exe」の不正なヘッダー:不正なヘッダー
上記のエラーが発生した場合は、httpd-xampp.conf
再度開き、先頭に#(ハッシュ文字)を付けて次の行をコメント化してください。
SetEnv PHPRC "\\path\\to\\xampp\\php"
php somefile.php
エラーなしでコマンドラインからPHPファイルを実行できますか?
SetEnv PHPRC
いないため、コメント化することはできませんが、それでもエラーが発生します。:(
Error message: End of script output before headers: php-cgi.exe
必要なバージョンのPHPをダウンロードして、独自のディレクトリに配置できます。
c:\php5\
c:\php7\
必要なのは、使用するPHPのバージョンをWebサーバー(Apache)に指示することだけです。これは、適切なモジュールをロードすることによって行います。Apacheでは、ファイルhttpd.conf
を見つけて適切な行を編集することでこれを行うことができます。
LoadModule php7_module c:\php7\libphp7.so
もちろん、正しいパスを理解する必要があります-これは単に説明のためです。
httpd.conf
サーバーを保存して再起動します。再起動しないと、変更は有効になりません。
これを行うためのGUIスイッチはありません.conf
。ファイルを編集してからApacheを再起動する必要があります。これを行うには数秒しかかからず、バージョンをコメントアウトすることもできるので、「切り替え」には数回のキーストロークしかかかりません。
PHP 5を使用します。
LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so
PHP 7を使用します。
#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so
XAMPPの複数のバージョン、デュアルブート、別のマシンの使用、または複雑な回避策を提案している他の「ソリューション」は必要ありません。OPはXAMPPを使用して、使用するPHPのバージョンを伝えたいと考えています。これは、これを実行する最も迅速で効率的な方法であり、必要なのは1つのXAMPPインストールだけです。
2017年11月1日編集:.so
Windowsにはファイルがないと言う人もいます。私が出した答えは、Macでの設定方法(の.so
代わりにファイルを使用する方法)に基づいています.dll
。しかし、答えの原則はまだ正確です。Apacheの構成ファイルを使用して、PHPモジュール(または)がシステムのどこにあるhttpd.conf
かを指定します。したがって、Windowsの唯一の違いは、ファイル名やパスの場所です。私が与えた答えは、Apache / PHPのバニラインストール(XAMPPなし)にも当てはまります。.so
.dll
私のように2つの異なるxamppsをダウンロードしてインストールできます(最初はphp7、2番目はphp5)。
そして、それをしたくない場合は、wampを使用して、ここに示すようにバージョンを変更することをお勧めします。
私はDockerを使用することをお勧めします。これにより、環境をさまざまなコンポーネントに分割し、必要なコンポーネントをいつでも混合して一致させることができます。
Dockerを使用すると、あるコンテナをMySQLで実行し、別のコンテナをPHPで実行できます。これらは別々のイメージであるため、2つのコンテナー(1つはPHP 5、もう1つはPHP 7)を使用できます。どちらを使用しても起動でき、ポート80を両方のコンテナーにマップできます。
https://hub.docker.comには、事前に構成された幅広いイメージがあり、手間をかけずにインストールして実行できます。
また、イメージとしてportainerを追加しました。これにより、Dockerイメージ内から-Dockerセットアップのさまざまな側面を管理できます(このコンテナーを起動時に開始して、コマンドラインを使用する手間を省きました)。コマンドラインから初めてイメージを構成して起動する方が簡単な場合がありますが、セットアップが完了すると、Webインターフェイスを介してイメージを開始および停止できます。
また、両方のコンテナを同時に実行して、それぞれに個別のポートをマッピングすることもできます。したがって、ポート80はPHP 5に、81はPHP 81(2017年にこれを見ている場合はPHP 7)にマッピングできます。
Dockerをインストールする方法(https://docs.docker.com/engine/installation/)やその他の「ハウツー」タイプの方法のロードに関するさまざまなチュートリアルがあります。開発環境の構成については、http://www.masterzendframework.com/docker-development-environment/を試してください。
私はUniserverを使用しています。
この機能が組み込まれています。
とても簡単です。
Uniform Serverは、Windows用の無料の軽量WAMPサーバーソリューションです。24MB未満のモジュラー設計には、Apache2、Perl5、PHP(PHP53、PHP54、PHP55またはPHP56の切り替え)、MySQL5またはMariaDB5、phpMyAdminまたはAdminer4の最新バージョンが含まれています。インストールは必要ありません!レジストリのほこりはありません!開梱して起動してください!
それはフラッシュドライブで実行されます。cronエミュレーション、perl、mariaDB、Mysqlのいくつかのバージョン、filezillaサーバーなどのサポート。
XAMPPの2つの異なるバージョンを使用できます。
私は10年前のプロジェクトに取り組んでいます。したがって、5.6が私のデフォルトです。5.2でのみ機能する古い小規模なプロジェクトもあり、個人用プロジェクトの7.3.8で新しいバージョンで作業したい
これが、デフォルトの5.6バージョンに5.2と7.3.8を追加するために行ったことです。
1-ダウンロードされたphp TSバージョン。
v7.3.8(最新):https ://windows.php.net/download/
v5.2:https ://www.apachelounge.com/viewtopic.php?t=7349
2-c:\ xampp \ php738およびc:\ xampp \ php52フォルダーに順に抽出されます
3-これらの行をhttpd-xampp.conf(またはhttpd.conf)の最後に追加しました。
***重要な通知:ターゲットフォルダー名としてスクリプトエイリアス名を使用しないでください。これらは異なるものでなければなりません。(たとえば、/ php7xは問題ありませんが、/ php7は問題ありません)
ScriptAlias /php7x "C:/xampp/php738"
Action application/x-httpd-php7-cgi /php7x/php-cgi.exe
<Directory "C:/xampp/php738">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php7">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php7-cgi
</FilesMatch>
</Directory>
ScriptAlias /phpold "C:/xampp/php52"
Action application/x-httpd-phpold-cgi /phpold/php-cgi.exe
<Directory "C:/xampp/php52">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php52">
<FilesMatch "\.php$">
SetHandler application/x-httpd-phpold-cgi
</FilesMatch>
</Directory>
いくつかの役立つメモ:
最後のボーナスとして、仮想ホストをいずれかのバージョンで設定する必要がある場合は、同様のアプローチを使用できます。PHP 7.3.8のサンプルlaravel vhost conf;
<VirtualHost *:80>
ServerAdmin admin@laravel.local
DocumentRoot "D:\www\vhosts\laravel.local\public"
ServerName laravel.local
<FilesMatch "\.php$">
SetHandler application/x-httpd-php7-cgi # escape for default php version
#SetHandler application/x-httpd-phpold-cgi # unescape for php 5.2
</FilesMatch>
ErrorLog "logs/laravel.local.log"
CustomLog "logs/laravel.local.log" combined
詳細な回答を提供してくれた@Munim Munnaに感謝します。私は、上記の重要な注意事項を含む確実なサンプルを共有したいと思いました。
絶対的かつ確実にXAMPPである必要がない限り、WAMPを使用して必要なものを取得することができます。WAMPは別のパッケージでほとんど同じです。
インストールしたら、ここでphpのバージョンを切り替えるだけです。
PHPのバージョンは必要な数だけインストールできます。
詳細は次のとおりです。
ここに行くだけです:WAMPダウンロード
次に、ベースサーバーを選択します(例:php7で最新)。
次に、WAMP 3がインストールされたら、フォルダー:アドオンに移動し、後のphpバージョンを選択します。それらはphp 5.3.29から始まるphpフレーバーを提供します。これはmysql_connectで動作するはずです。
アドオンをインストールするには、インストール中(exeファイルをダブルクリック)、WAMP 3がインストールされているフォルダーをポイントするだけです。
次に、アプリケーションなどの他のフォルダーのコンテンツを使用して、機能を追加できます。
すべてがインターフェースされているため、環境をハッキングするのではなく、コーディングに集中できます。
はい、できます。xamppがすでにインストールされていると思います。そう、
これは、複数のxamppをインストールして使用する方法です
1つのXAMPPインストールで複数のバージョンのPHPをセットアップすることが可能です。以下の手順はWindowsで機能します。
C:\xampp\php
なるように変更しC:\xampp\php-7.1.11
ます。C:\xampp\php-5.4.45
。次に、XAMPPとApacheの設定を編集する必要があります。
C:\xampp\apache\conf\httpd.conf
、PHPのXAMPP設定を見つけます。次のようなものに変更する必要があります。#
他のPHPバージョンを(で)コメントする必要がある場合は、一度に1つだけInclude
が解釈されます。
#XAMPP settings PHP 7
Include "conf/extra/httpd-xampp.conf.7.1"
#XAMPP settings PHP 5.4.45
#Include "conf/extra/httpd-xampp.conf.5.4.45"
次に、C:\xampp\apache\conf\extra
ディレクトリ名httpd-xampp.conf
をに変更しhttpd-xampp.conf.7.1
、の新しい構成ファイルを追加しますhttpd-xampp.conf.5.4.45
。私の場合、構文はバージョンごとにわずかに異なる可能性があるため、php 5.5のXAMPPの別のインストールのconfファイルをコピーしました。
編集httpd-xampp.conf.5.4.45
しhttpd-xampp.conf.7.1
て、php
ディレクトリへのすべての参照を新しいphp-X.X
バージョンに置き換えます。ここでは、ファイルごとに少なくとも10の変更を加える必要があります。
次に、2つのバージョンのphp.iniを編集する必要があります。PHP 7.1、編集のためにたとえばC:\xampp\php-7.1.11\php.ini
、あなたがのためにPHPのディレクトリのパスに置き換えられますinclude_path
、browscap
、error_log
、extension_dir
。..
以上です。これで、XAMPPコントロールパネルからApacheを起動できます。また、バージョンを切り替えるには、C:\xampp\apache\conf\httpd.conf
Apacheを再起動する前に、含まれているPHPバージョンを編集して変更するだけです。
これはおそらく質問に対する最も技術的な回答ではありませんが、達成するのが最も簡単でもあります。
C:やD:などの2つのドライブがある場合、異なるphpバージョンの両方のドライブにXAMPPの個別のインスタンスをインストールできます。これは、実行に10分もかからず、エラーが発生しにくくなります。
xampp-control.exeへの2つのデスクトップショートカットを作成し、それらのphpバージョンにちなんだ名前を付けます。これが私のような非常に迅速で汚い解決策を好む人に役立つことを願っています。
この簡単な手順に従ってください。私は現在PHP 7.2でXAMPPを実行していますが、古いプロジェクトで作業するにはPHP 5.6が必要です
ステップ1
https://windows.php.net/downloadからスレッドセーフバージョンのPHPをダウンロードします。
[ドライブ]:\ xampp \ php5.6にファイルを置きます
ステップ2
[ドライブ]:\ xampp \ apache \ conf \ extra \ httpd-xampp.confをコピーします
名前を[Drive]:\ xampp \ apache \ conf \ extra \ httpd-xampp5.6.confに変更します。Phpのバージョンに応じてファイルの名前を変更します
ステップ3
新しく作成した「httpd-xampp5.6.conf」を編集します
基本的に、すべてのPHPソースと.dllを変更する必要があります
前
LoadFile "C:/xampp/php/php7ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"
後
LoadFile "C:/xampp/php5.6/php5ts.dll"
LoadFile "C:/xampp/php5.6/libpq.dll"
LoadModule php5_module "C:/xampp/php5.6/php5apache2_4.dll"
これが私のファイルです:https : //gist.github.com/mpalencia/f8a20c31bffb02fe20d371218c23d1ec
ステップ4
[Drive]:\ xampp \ apache \ conf \ httpd.confファイルを編集します
前
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
後
# XAMPP settings
Include "conf/extra/httpd-xampp5.6.conf"
ステップ5
PHP 5.6の構成を編集する-php.ini
拡張ディレクトリを追加:extension_dir = "C:\ xampp \ php5.6 \ ext"
ステップ6
Apacheを起動する
ステップ7
WindowsでPHP環境変数のパスを編集する
少し遅いかもしれませんが、PHPフォルダーの名前を変更するためにバッチを使用しています(何年か前に見つけたphpswitchを少し変更したバージョン)。
さまざまなフォルダーをXAMPPインストールにコピーします。各PHPフォルダー(アクティブなフォルダーを除く)は、バージョン番号をサフィックスとして受け取ります(例:php_5.6.32)。ではALLスクリプトはこの情報をつかむことができるようにPHPフォルダ、ファイル(PHP_VERSION)は、唯一のそれぞれのバージョン番号が含まれ、作成されます。しかし、それはすべてREADMEで説明されています。
PHP7以来のhttpd-xampp.confの負荷php7ts.dllの代わりphp5ts.dll。そのため、スクリプト(PHPSwitch.php)を拡張して、同じ方法でこれらの構成ファイルの名前も変更する必要がありました。
$renameCur = new PHPSwitch_Rename($currInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName'] . '_' . $currInst['version']);
$renameNew = new PHPSwitch_Rename($newInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName']);
$apache_curent = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$apache_curent_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$currInst['version'].".conf";
$apache_new = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$newInst['version'].".conf";
$apache_new_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$renameCur_apache_conf = new PHPSwitch_Rename($apache_curent, $apache_curent_rename);
$renameNew_apache_conf = new PHPSwitch_Rename($apache_new, $apache_new_rename);
$transaction = new PHPSwitch_Rename_Transaction();
$transaction->add($renameCur);
$transaction->add($renameNew);
$transaction->add($renameCur_apache_conf);
$transaction->add($renameNew_apache_conf);
私は同じことをする必要があったので、方法をググってスタックオーバーフローになりました、そこでOPが同じ問題を抱えていました...それで私の発見..私はあらゆる方向からファイルの名前を変更してみました、そして私の結論は基本的に長すぎる。SOOOO私はここからバージョン7をインストールしただけです:
https://www.apachefriends.org/index.html (サービスを終了し、xamppを終了する前に終了してください)
ディレクトリ名をどこに置くかを尋ねられたら(別の名前を付けてください):
そして
ドネゾ!前後を入れ替える前に、サービスを強制終了して終了することを確認してください。プレイする2つの無菌XAMPP環境があります。
やったー!今私は実際に仕事に取り掛かることができます!
このphpスイッチャーを使用する
あなたはvhost configを介してあなたが望む任意のプロジェクトにphpのバージョンを制御することができます。
私はこれが古い投稿であることを知っていますが、PHP 7でmysql_connect()を実行するためのライブラリがあることを共有したいと思います。これは、実際の関数をオーバーライドすることで機能します(mysql_connect()は、このライブラリで機能するmysqli_connect()によってオーバーライドされます)。
私はこのビデオから見つけましたhttps://www.youtube.com/watch?v=Eqd-jJu4sQ4
うまくいけば、それは役立ちます