ローカルPC内に構築した WordPress 5.3.4 のダッシュボードにて ↑のようにPHPのバージョンアップを促すメッセージが表示されるようになり、PHP7.1 から PHP7.3 に入れ替える事にしたのですが、前回のWAMP構築時からPCのOSを Windows7 → Windows10 に変更しているので色々と備忘録的にメモ。(ついでに WordPress も 5.3系 から 5.4系 に変更)
…で、PHPの入れ替えはアッサリと終わり、PHPそのものはApache上で動いているのですが、GD や mbstring や MySQL が正常に動作してくれず、MySQL依存のWordpressも無情の『Fatal error: Uncaught Error: Call to undefined function mysql_connect() in …』的なエラーメッセージを吐き出す始末…(´Д` )
PHP5.x系からPHP7.x系に変わった時ほどPHPの内部仕様は大きく変わっていないハズなのですが、イザ動かないとなると、自分で書いたスクリプトに問題があるのかしら…と不安になり…。
結局、正常動作しなかったのは、『php.ini-development』をコピーして『php.ini』とリネームすべきところを『php .ini』と、拡張子の前に半角スペースを入れてしまうという超初歩的な凡ミスが原因でした。
※Windowsエクスプローラー上でのファイルの並び順がおかしいのでリネームミスに気付きました…(左:ミス/右:正常)
今回のように『php .ini』みたくファイル名が間違っていれば、『php.ini』そのものが見えない(存在しない)状態なのでPHPも動作しない…と思われるかもしれませんが、Apache側のPHP関連の設定がきちんとなされていればPHP自体は動作するんですよ…コレがw(どハマリしたのもこの為…)
ただし、PHP info の赤枠内『 Loaded Configuration File 』の項には、PHPをインストールしたパス、正確には php.ini が存在する場所が表示されるべきなのですが、リネームミスで『php.ini』が見えない状態なので『(none)』となっています。
そんなこんなで、エラー原因の特定に時間が掛かり、PHPの入れ替え完了までにリトライを繰り返して数日を費やしてしまったのですが、PHP 7.2.x からは php.ini 内の『Dynamic Extensions』の書式が変わったようなので、今回は php.ini の変更箇所をメインにメモ。
ちなみに、Apache と MySQL のWindows10へのインストールと設定については、先の Windows7 64bit へのインストール記事を参照ということで…
※Apache の httpd.conf の記述方法については、少し変えています(後述)
関連記事
- Windows 7 64bit + Apache 2.4 / インストール&セットアップ 備忘録 – roomX.jp
- Windows 7 64bit + PHP 7.1 / インストール&セットアップ 備忘録 – roomX.jp
- Windows 7 64bit + MySQL 5.6 / インストール&セットアップ 備忘録 – roomX.jp
構成
- Windows 10 Pro / 64bit
- Apache 2.4
- PHP 7.3.20
- MySQL 5.6
- WordPress 5.4.2
上記の構成で一応正常に動いている(ように見える…)ので、大ハズレって事は無いと思います。ただ、PC環境やサーバーの構成、スクリプトによっては設定を変えないといけないので、環境に合わせて適宜修正してください。
ちなみに本日(2020/07/12)現在、PHP 7.4.8 も利用可能ですが、レンタルサーバー側の PHP 7.4 がアレなので、PHP 7.3 を使っています。
試験的に同じWindows10 64bit環境に PHP7.4.8 をインストールして、同じ構成・設定でWordpressの動作確認をしてみましたが、プラグインも含めて問題無く動作したので、落ち着いたらドキュメントに目を通して7.4系に入れ替える予定です。
INDEX
PHP公式マニュアル
Link:
・PHP マニュアル インストールと設定 – php.net
・PHP マニュアル 実行時設定 – php.net
PHP 7.3 のダウンロード
PHP 7.3.x を公式サイトからダウンロード。
青枠で示した【Old Stable PHP 7.3.20 (Changelog)】の【Windows downloads】のリンクをクリック。
Link:
・PHP 7.3.20 – https://windows.php.net/download#php-7.3
Note:
***********************
・Non Thread Safe : WEBサーバーが IIS の場合
・Thread Safe : WEBサーバーが Apache の場合
***********************
・x64 : Windows 64bit版対応
・x86 : Windows 32bit版対応
***********************
OSが Windows10 64bit で httpd が Apache なので、赤枠で示した VC15 x64 Thread Safe (2020-Jul-07 14:28:31) の zip ファイルをダウンロード。
やはり、環境によっては、VC15 や VS16(Visual Studio 2017 or 2019)再頒布可能パッケージがないと動作してくれないので、Downloadの左列上部にあるリンクからダウンロードしてインストールしますが、これも 64bit版の x64 と32bit版の x86 が有るので間違えないように注意。
PHP 7.3 のインストール
ダウンロードした PHP 7.3.2のzipファイル( php-7.3.20-Win32-VC15-x64.zip )を任意のフォルダに解凍。
※前回、PHP 7.1.20 をインストールした時と同じ【svs】ディレクトリに【php_7.3.20】のフォルダを作成
C:¥
└ svs
├ Apache
├ MySQL
├ php_5.6.37
├ php_7.1.20 ← 旧版
├ php_7.2.32
├ php_7.3.20 ← 今回はココに展開
├ ...
Windowsのパス表記だと↓こうなる…(※超重要)
C:¥svs¥php_7.3.20
Windows 10 : ユーザー環境変数/システム環境変数の設定
Windows10 で環境変数をイジるには、[スタート]を右クリックして[システム]→[システム情報]→[システムの詳細設定]で[システムのプロパティ]ダイアログを表示。
『環境変数(N)…』ボタンをクリックして[環境変数]ダイアログを呼び出し。
PHPのパスを「ユーザー環境変数」か、それとも「システム環境変数」のどちらに記述するか…
Link:
・Windowsのシステム環境変数とユーザ環境変数 – qiita.com
今まで自分は習慣で「システム環境変数」にパスを記述していたのですが、今回は「ユーザー環境変数」にPHPのパスを記述しました。
【新規(N)】ボタンをクリックし、前項のパス表記と同じ「 C:¥svs¥php_7.3.20 」を記述しますが、PHPのインストール先によっては各自変更する必要があります。
php.ini の作成
『 php.ini-development 』か、それとも『 php.ini-production 』のどちらかをコピーしてリネームするのですが、いつも自分は、【全部入り】的な『 php.ini-development 』を元にして php.ini を作成しています。
コピーした『 php.ini-development 』を『 php.ini 』にリネームするのですが、間違えないように要注意です!(^^;
Windowsのリネーム機能が、編集時に拡張子を含まない仕様になったのですが未だに慣れないデス…
php.ini の編集
Paths and Directories
ココの記述も重要で、記述をミスるとハマるので要注意!
※自分は php.ini や httpd.conf などではディレクトリの区切り記号に『 ¥ 』ではなく『 / 』記号を使っています。
先のWindows環境変数に記述したパスに『 /ext 』を加えていますが、コレを書き漏らしても正常に動作しないので要注意!
Dynamic Extensions
PHP7.1.x までは『 dll 』の拡張子が記述されていましたが、PHP7.2.x からは拡張子が省略されています。
先頭の『;』セミコロンを外すだけで有効になるのは同じです。
どの拡張モジュールを有効にする(必要とする)かは、ユーザー次第ですが、自分は上記の4つが必須であります。
Module Settings
タイムゾーンの未指定によりエラーが出ることもあるので、ここはお行儀良く指定しておきます。
File Uploads
phpMyAdmin を経由してファイルをアップロード(主にバックアップしたSQLのインポート)する際に、『Incorrect format parameter』エラーが出る場合には、File Uploads 項目の『upload_max_filesize = 2M』の値を【32M】などに修正します。
その他ディレクティブ
Language Options
PHPのプログラム言語としての設定(文字列とか日本語とかの設定ではない点に注意)
『 short_open_tag = Off 』を『On』に変更すると、スクリプトの書き出しが『 <?php 』ではなく『 <? 』でもPHPスクリプトとして認識されるのですが、色々とアレなので『Off』のままにしておきます。(※経験談)
Resource Limits
PHP動作時におけるリソース設定。
Error handling and logging
エラーメッセージの表示に関する設定。
『On』が表示、『Off』が非表示。
ローカル内ではエラーメッセージがデバッグの手掛かりになるので『On』でも構わないのですが、レンタルサーバーなどで運用する場合は、エラーメッセージからセキュリティの穴を突かれる場合もあるので、商用鯖では『Off』になってる所が多いと思います。
Data Handling
PHPスクリプトのデータサイズやデフォルトの mimetype、文字セットについての設定。
Module Settings
有効にした4つの拡張モジュールについて、さらに細かく動作制御する場合に編集。
Link:
・PHPマニュアル:MySQL 改良版拡張モジュール – php.net
・PHPマニュアル:gd.jpeg_ignore_warning – php.net
・PHPマニュアル:Exif – php.net
・PHPマニュアル:マルチバイト文字列 – php.net
httpd.conf の編集
PHPの変更に合わせて Apache の『 httpd.conf 』の編集が必須となりますが、今回は、PHPのバージョン別に『 .conf 』ファイルを用意し、それを本元にインクルードさせるという、便利な手法を真似させていただきました。
Link:
・Apacheのhttpd.confにPHPを設定する方法 – qiita.com
左が今回入れ替えた PHP7.3.20用のコンフィグレーション・ファイルで、それを Apache の httpd.conf に Include したのが右。
Windowsの場合は、環境変数のパスの記述も修正が必要ですが、バージョンの異なるPHPをスイッチする手間が省けて超便利です。
#--------------------------------------------------------------
# include in httpd.conf ::: PHP 7.3.20
#--------------------------------------------------------------
#Dynamic Shared Object (DSO) Support
#PHP 7.3.20
#
LoadModule php7_module c:/svs/php_7.3.20/php7apache2_4.dll
# PHP extention (.php) (PHP 7.3.x)
#
<FilesMatch "\.php$">
AddHandler php7-script .php
AddType application/x-httpd-php .php
</FilesMatch>
# PHP php.ini path (PHP 7.3.x)
#
<IfModule php7_module>
PHPiniDir c:/svs/php_7.3.20/php.ini
</IfModule>
※php73.conf の内容
PHP や Apache の設定が終わったら Apache を再起動して phpinfo() などで動作を確認。
まとめ
『 Loaded Configuration File 』に表示されるハズだったパスもちゃんと表示され、GDも動作しているようです。
ちなみに 5.3 から 5.4 にバージョンを上げた WordPress もローカルPCで問題無く動作しているので、しばらく様子を見てからレンタルサーバーの PHP と Wordpresも入れ替える予定です。