1
1

更新が止まった(?)XAMPPに新バージョンのPHPを導入する

Last updated at Posted at 2024-08-04

前書き

2023年11月にVer.8.2.12となって以来、更新が止まってしまったように見えるXAMPPに、
新たなPHP8.3.10を追加導入した時に苦労した点をまとめました。

PHP8.3.11 がリリースされたので、
ここ以降のPHP8.3.10の部分はPHP8.3.xxxに変更しました。

現在すでにPHP8.4アルファ版(「ベータ版」が公開されました)が公開されているというのに、8.3のリリースが無いのはどうしたことでしょう?
なお、今後 XAMPP の更新が無くなってしまった場合、新たな PHPテスト環境を探す必要が出てくるかもしれません。

Mac ではServBay(macOS 12.0 Monterey/それ以降限定)という PHPテスト環境が使えるようです。
Windows ではどうなるのでしょうか?

ここでは、いい方法が見つかるまでのつなぎとして、
従来のXAMPPに新しいバージョンのPHPを導入した時の注意事項などを書いています。

私の環境

  • Windows 10 Home(22H2)
  • DドライブにXAMPP for Windowsをインストールしています。
  • shie-works(no shi)さんのxamppで複数のバージョンのphpを切り替えて使いたい!!!を導入しています。
  • Webサーバーとして、XAMPP付属のApacheを利用しています。
  • XAMPP の最新バージョン XAMPP8.2.12 をインストールしてる状況での記事となります。

これと異なる環境の方は、それぞれの環境に合わせて読み替えて下さい。

「複数バージョンの切替」をしていない XAMPP8.2.12 を単独で使用している方が、「PHP のバージョンアップだけしたい!(切替はやらない)」という場合は、この後の、[1]で従来のphpフォルダを別のフォルダ名php8_2_12など)にリネームしてバックアップしつつ、ダウンロード・展開してできたフォルダを新しいphpフォルダとし、[2][3][4][7]は飛ばしていただけばいいのでは?(訂正:いただいてもPHP8.3として動いてくれるのでは) ...と思います。

PHP8.3として動いているかどうかは、

phpinfo();

で確認できます。

もし何かあれば情報ください。あるいは別記事書かれた場合は、このページからのリンクを書かせていただきたいかもです。

PHP8.3では、

PHP の実行をサポートする Windows の最低バージョンが、Windows 8 と Windows Server 2012 になりました。

とされています。従って、これら以降のマシン上でなければ、PHP8.3を動かすことはできないみたいです。

作業前のツリー構造(一部省略)


D:
├─xampp
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf
│  ...
├─xampp8_2_12
│  ├─php
│  │  │  php.ini
│  │  └─extras
│  │        browscap.ini
│  ...

[1] 新しいバージョンのPHPを入手する

(1) PHPマニュアルのページから、「Downloads」をクリックします。
1.jpg

(2) Downloads ページから、「Windows downloads」をクリックします。
2.jpg

(3) 表示されたページから、「VS16 x64 Thread Safe ...」の「Zip」をクリックします。
PHP8.3.jpg

注意
「x64」は、コンピュータのCPUのタイプ(だと思います)。
64bitパソコンなら、全部これでいいんじゃないのかな?...
32bitパソコンなら、「x86」になると思います。...
→ もし違ってたら教えてください。

「Thread Safe」は、Apacheを使う場合はこれでなければならないようです。上の画像の左側=赤線部分=に、

With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP.

と書かれています。XAMPPは通常、WebサーバーとしてApacheを使います。(私の環境でもApacheを利用しています。)

警告
ダウンロードすべきリンクは、絶対に押し間違えないでください。
私はここで間違えました。大変な時間をロスしました。

VS16 x64 ...」で始まっていても、
VS16 x64 Thread Safe ...」   (←○)
VS16 x64 Non Thread Safe ...」(←X)
の2種類あります。
紛らわしいので注意してください。

(4) ハッシュ値(sha256)を確認

ダウンロード間違いが無いか、ハッシュ値(sha256)を確認します。
HashSumのようなフリーソフトか、PHPでも

echo hash_file('sha256', 'ダウンロードしたファイルのパス');

で確認できます。ダウンロードしたページに書かれている...

92ac126ead07bc1fb14832d83bb9020144399d0f33ea1cc537b1c8c5c8c61a00

(PHP8.3.10 以外はダウンロードページのものと照合してください。)になっていればOKです。心配な人は、さらにウイルスチェックもしましょう。私はノートン360でウイルスチェックしました。

(5) ダウンロードしたファイルを展開し、xamppフォルダ下に移動

ダウンロードしたphp-8.3.xxx-Win32-vs16-x64.zipファイルを展開し、できたフォルダの名前を
PHP8_3_xxx」にリネームし、
D:\xamppフォルダ下に移動します。

(なお、このフォルダはこの後いくつかの修正を施した後、[7]で「D:\xampp8_3_xxx\php」フォルダとしてコピーされます。)

(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf
│  ...
├─xampp8_2_12
│  ...

[2] httpd-xampp8_3_xxx.conf ファイル

D:\xampp\apache\conf\extra\httpd-xampp8_2_12.conf」を同じフォルダにコピーし、
「httpd-xampp8_3_xxx.conf」にリネームし、
さらに、
そのファイル内の「8_2_12」と記述されている部分をすべて、「8_3_xxx」に書き換えて上書き保存します。

この時点のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12
│  ...

[3] xampp8_3_xxx フォルダ

D:\xampp8_2_12フォルダを同じ場所にコピーし、xampp8_3_xxxにリネームする。

この時点のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12---------------------------------[3]
└─xampp8_3_xxx--------------------------------[3]
    ├─apache
    │  └─conf
    │      │  httpd.conf
    │      └─extra
    │             httpd-autoindex.conf
    │             httpd-dav.conf
    │             httpd-manual.conf
    │             httpd-multilang-errordoc.conf
    │             httpd-ssl.conf

[4] xampp8_3_xxx フォルダ内のconfファイル

下記のファイル内の「8_2_12」と記述されている部分をすべて、「8_3_xxx」に書き換えて上書き保存する。(テキストエディタの「置換」機能を利用します。)

  • D:\xampp8_3_xxx\apache\conf\httpd.conf
  • D:\xampp8_3_xxx\apache\conf\extra\httpd-autoindex.conf
  • D:\xampp8_3_xxx\apache\conf\extra\httpd-dav.conf
  • D:\xampp8_3_xxx\apache\conf\extra\httpd-manual.conf
  • D:\xampp8_3_xxx\apache\conf\extra\httpd-multilang-errordoc.conf
  • D:\xampp8_3_xxx\apache\conf\extra\httpd-ssl.conf
この時点のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  │      php.ini-development
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12---------------------------------[3]
│  ├─php
│  │      php.ini
│  ...
└─xampp8_3_xxx--------------------------------[3]
    ├─apache
    │  └─conf
    │      │  httpd.conf-------------------------[4]
    │      └─extra
    │             httpd-autoindex.conf------------[4]
    │             httpd-dav.conf------------------[4]
    │             httpd-manual.conf---------------[4]
    │             httpd-multilang-errordoc.conf---[4]
    │             httpd-ssl.conf------------------[4]

[5] php.ini

D:\xampp\php8_3_xxx\php.ini-developmentを同じフォルダ内にコピーし、php.iniにリネームする。

なお、従来の設定は D:\xampp8_2_12\php\php.iniに書かれている通りなので、
それを参考にしつつ、D:\xampp\php8_3_xxx\php.iniを編集する。

この時点のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  │  │  php.ini-development-----------------------[5]
│  │  │  php.ini-----------------------------------[5]
│  │  └─extras
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12---------------------------------[3]
│  ├─php
│  │      php.ini-----------------------------------[5]
│  ...
└─xampp8_3_xxx--------------------------------[3]
    ├─apache
    │  └─conf
    │      │  httpd.conf-------------------------[4]
    │      └─extra
    │             httpd-autoindex.conf------------[4]
    │             httpd-dav.conf------------------[4]
    │             httpd-manual.conf---------------[4]
    │             httpd-multilang-errordoc.conf---[4]
    │             httpd-ssl.conf------------------[4]
私のテスト環境での php.ini の内容を見たい方は、こちら。(コメント行は削除しています。)
[PHP]

;;;;;;;;;;;;;;;;;;;
; About php.ini   ;
;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;
; About this file ;
;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;
; Quick Reference ;
;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;

engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
zend.exception_ignore_args = Off
zend.exception_string_param_max_len = 15

;;;;;;;;;;;;;;;;;
; Miscellaneous ;
;;;;;;;;;;;;;;;;;

expose_php = On

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30
max_input_time = 60
memory_limit = 128M

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On

;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;

variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

doc_root =
user_dir =
extension_dir = "ext"
enable_dl = Off

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

file_uploads = On
upload_tmp_dir = "D:\xampp8_3_xxx\tmp"
upload_max_filesize = 2M
max_file_uploads = 20

;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

extension=bz2
extension=curl
extension=fileinfo
extension=gettext
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=pdo_mysql
extension=pdo_sqlite
extension=sqlite3
extension=xsl
extension=zip

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[CLI Server]

cli_server.color = On

[Date]

[filter]

[iconv]

[imap]

[intl]

[sqlite3]

[Pcre]

[Pdo]

[Pdo_mysql]

pdo_mysql.default_socket=

[Phar]

[mail function]

SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
mail.mixed_lf_and_crlf = Off

[ODBC]

odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1

[MySQLi]

mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =

[mysqlnd]

mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On

[OCI8]

[PostgreSQL]

pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0

[bcmath]

bcmath.scale = 0

[browscap]

[Session]

session.save_handler = files
session.save_path="D:\xampp8_3_xxx\tmp"
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.cookie_samesite =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5

[Assertion]

zend.assertions = 1

[COM]

[mbstring]

[gd]

[exif]

[Tidy]

tidy.clean_output = Off

[soap]

soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5

[sysvshm]

[ldap]

ldap.max_links = -1

[dba]

[opcache]

[curl]

curl.cainfo="D:\xampp8_3_xxx\apache\bin\curl-ca-bundle.crt"

[openssl]

[ffi]

[6] ※ browscap.ini 等(必要な場合)

必要に応じて、D:\xampp8_2_12\php\extras\browscap.iniを、D:\xampp\php8_3_xxx\extrasフォルダにコピーするなどします。

この他にも、個別の環境で必要なファイルを php.ini に設定しているなどの場合は、
そのファイルを
D:\xampp8_2_12\phpD:\xampp8_2_12\php\extrasフォルダなどから、
D:\xampp\php8_3_xxxD:\xampp\php8_3_xxx\extrasフォルダなどにコピーしておきます。

現在のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]
│  │  │  php.ini-development-----------------------[5]
│  │  │  php.ini-----------------------------------[5]
│  │  └─extras
│  │        browscap.ini-------------------------------[6]
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12---------------------------------[3]
│  ├─php
│  │  │  php.ini-----------------------------------[5]
│  │  └─extras
│  │        browscap.ini-------------------------------[6]
│  ...
└─xampp8_3_xxx--------------------------------[3]
    ├─apache
    │  └─conf
    │      │  httpd.conf-------------------------[4]
    │      └─extra
    │             httpd-autoindex.conf------------[4]
    │             httpd-dav.conf------------------[4]
    │             httpd-manual.conf---------------[4]
    │             httpd-multilang-errordoc.conf---[4]
    │             httpd-ssl.conf------------------[4]

[7] php8_3_xxx フォルダをコピー

(1) (追記D:\xampp8_3_xxxフォルダには、元々「php」フォルダ(D:\xampp8_2_12フォルダ内の「php」フォルダと同じもの)があるはずなので、これを削除しておきます。

(2) 次に、D:\xampp\php8_3_xxxフォルダを、D:\xampp8_3_xxxフォルダにコピーし、「php」にリネームします。

現在のツリー構造が見たい方はこちら
(現在のツリー構造)
D:
├─xampp
│  ├─php8_3_xxx------------------------[1]---------------[7]
│  │  │  php.ini-development-----------------------[5]
│  │  │  php.ini-----------------------------------[5]
│  │  └─extras
│  │        browscap.ini-------------------------------[6]
│  ├─apache
│  │  └─conf
│  │      └─extra
│  │            httpd-xampp8_2_12.conf-----[2]
│  │            httpd-xampp8_3_xxx.conf----[2]
│  ...
├─xampp8_2_12---------------------------------[3]
│  ├─php
│  │  │  php.ini-----------------------------------[5]
│  │  └─extras
│  │        browscap.ini-------------------------------[6]
│  ...
└─xampp8_3_xxx--------------------------------[3]
    ├─apache
    │  └─conf
    │      │  httpd.conf-------------------------[4]
    │      └─extra
    │             httpd-autoindex.conf------------[4]
    │             httpd-dav.conf------------------[4]
    │             httpd-manual.conf---------------[4]
    │             httpd-multilang-errordoc.conf---[4]
    │             httpd-ssl.conf------------------[4]
    └─php-------------------------------------------------[7]

これで新しいバージョンの PHP 追加作業は終了です。
お疲れ様でした。

で...たぶん、これでちゃんとできてると思います........
XAMPP Control Panel で XAMPP を再起動すると、新しいバージョンの PHP が動くはずです。

PHP8_3_xxx のフォルダ(D:\xampp\php8_3_xxxD:\xampp8_3_xxx\php)は、どちらか一つでいいのでは?
と思うこともありますが、面倒なので調べていません。

すべてを完全には確認していませんが、phpinfo()で新しいバージョン8.3.xxxが表示されたので、OKということにしています。もし何かあれば、教えてください。

追記

PHP8.3で新しく導入されたmb_str_pad関数が機能しました。

echo mb_str_pad('あいう', 5, 'えお'); // あいうえお

なお、私のところでは、MySQL, MariaDBともに使っていないので、使う場合は追加の設定が必要になると思います。(以前から使っている場合は、以前のphp.iniの設定がそのまま使えるかもしれません。...たぶん...使えるんじゃないでしょうか?)

以上で終わりです。

D:\xampp\apach\logs\error.logに、

PHP Warning: PHP Startup: Unable to load dynamic library 'curl' ...

というエラーメッセージが書き込まれていることに気付いたので、それを修正する記事を追加しました。(↓下記)

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1