--> -->

skimemo


skimemo - 日記/2019-12-05/Windows上のApacheでPHP5とPHP7を共存させる の変更点


#blog2navi()
*Windows上のApacheでPHP5とPHP7を共存させる [#p53bd2d0]

** 概要 [#e2f218a6]
-- WindowsでPHP5とPHP7を共存させる
-- PHP5はモジュール版で、PHP7はfirst-cgiで動かす~

Windowsの開発環境でPHP5と7を共存させる方法です。~
WindowsのApache+PHPの組み合わせには、VCランタイムの問題が絡むので、PHP7はfirst-cgiで動作させて切り離してみました。~

** 手順 [#cf239aa7]
+ PHP7のダウンロード~
[[こちら:https://windows.php.net/download/]]のページから、適当な''Non Thread Safe版''のzipをダウンロードして解凍して適当なディレクトリに配置します。~
~
+ php.iniの設定~
解凍したディレクトリに配置されている&inlinecode{php.ini-development};をコピーして、&inlinecode{php.ini};を作成します。~
~
+ php-fpmの起動~
解凍したディレクトリでphp-fpmを起動します。
 > php-cgi.exe -b 127.0.0.1:8073
~
+ apache(httpd.conf)の設定~
必要なモジュールを読み込ませます。
 LoadModule mime_module modules/mod_mime.so
 LoadModule proxy_module modules/mod_proxy.so
ローカル環境ではVirtualHostではなくaliasを使う場合が多いと思います。以下のように設定します。
 Alias /hoge "C:\Users\fuga\Documents\html\hoge"
 <Directory "C:\Users\fuga\Documents\html\hoge">
	ProxyFCGIBackendType GENERIC
	<FilesMatch \.php$>
		SetHandler "proxy:fcgi://127.0.0.1:8073#"
	</FilesMatch>
	AllowOverride all
    Require all granted
 </Directory>
[[CentOS版:https://www.webdb.co.jp/~atsumi/skimemo/index.php?skimemo%20-%20%C6%FC%B5%AD%2F2019-12-05%2FCentOS7%2BApache%A4%C7PHP5%A4%C8PHP7%A4%F2%B6%A6%C2%B8%A4%B5%A4%BB%A4%EB]]と異なるのは、3行目の&inlinecode{ProxyFCGIBackendType GENERIC};と、5行目の行末に&inlinecode{#};が入っているあたりです。~
~
また、長い処理がタイムアウトにならないよう、適当な時間を設定してあげます。これは、xdebugなどでステップ実行している時間も算入されますので、デバッグする場合は長めにする必要があります。ちなみにこれは''<Directory>〜</Directory>の外''に置く必要があります。
 ProxyTimeout 600
~
+ apacheの再起動~
サービスからApacheを再起動し、ブラウザでアクセスできれば成功です。~

** php-cgiのコマンドプロンプト [#h88bed4f]
DOS窓が邪魔な場合は、RunHiddenConsoleというのがあるようです。

** php-cgi実行時の設定 [#kb2422d6]
php-cgi.exeをただ起動しただけではプロセスが1つしか起動せず、処理可能な同時コネクション数も1つになります。~
このままでは、SPAなどのブラウザから同時に複数のアクセスが走るような処理ではパフォーマンスが大幅に悪くなってしまいます。~
そこで、以下のように設定を入れてあげます。
 @ECHO OFF
 set PHP_FCGI_CHILDREN=8
 set PHP_FCGI_MAX_REQUESTS=10000
 RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:8073
このとき、設定変数の意味はそれぞれ以下の通りです。
| 環境変数 | 意味 |h
| PHP_FCGI_CHILDREN | 起動する子プロセス数を指定します。上記の様に8を指定すると、8個のプロセスが起動します。 |
| PHP_FCGI_MAX_REQUESTS | 子プロセスが起動中に処理できるリクエスト数を指定します。指定回数処理すると自動終了します。(参考URL(iii)参照。記事中では(当時は)Windowsでは使用不可と書かれていますが、今は使えるようです) |

** 参考 [#c293d107]
-- [[Apache and PHP-FPM in Windows:https://www.orbitale.io/2017/11/11/apache-and-php-fpm-in-windows.html]]
-- [[[インストール]windows + nginx + php + pukiwiki:https://qiita.com/kzk-y/items/62b547daef3bd6fb65ed]]
++ [[Apache and PHP-FPM in Windows:https://www.orbitale.io/2017/11/11/apache-and-php-fpm-in-windows.html]]
++ [[[インストール]windows + nginx + php + pukiwiki:https://qiita.com/kzk-y/items/62b547daef3bd6fb65ed]]
++ [[なぜ、Windowsでphp-cgiが自動で終了してしまうのか?:https://server-setting.info/blog/why-windows-php-cgi-auto-end.html]]

#htmlinsert(twitterbutton.html)
RIGHT:Category: &#x5b;[[Windows>日記/Category/Windows]]&#x5d; - 13:57:42
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()