☠️

どうしてもMacのネイティブで、Brewから消えたり、もはやビルドできない古いPHPを使いたい時のテク

2023/07/11に公開

どうしてもPHP7.2とかが使いたい人がいると思います。はい、私もです。

でも、古いPHPは最近のMacだとビルドがめっちゃ難しいし、Brewもドンドン古いモノは消してきます。

そういうときは普通にDockerで良いのですが、どうしてもどうしても諸般の事情でMacのネイティブバイナリを使いたい人はいるでしょう。そういう人に向けてのテクです。

あ、AMD64(x64)ですが、RosettaがあるからM1でも大丈夫です。

オチ

XAMPPを使え!!

インストール

古来からの人はご存じxamppは古いものがきちんと残っています。

https://sourceforge.net/projects/xampp/files/XAMPP Mac OS X/

ところで、残念ながら(?) xamppは中身を取り出すのにインストーラーが必要です。気にならない人はそのままインストールすればよいでしょう。悪いものは多分はいらないと思います。

インストールすれば、、 /Applications/XAMPP/ にファイルが置かれるはずです。

あとはphpをフルパスでたたくだけです

/Applications/XAMPP/xamppfiles/bin/php -v

Taddaa!!!

いや、なんか気持ち悪くない?

まあしかし、ちょっと気分がよくないですよね。すくなくとも俺はXAMPPを見るのが嫌だ。

あと、何種類も用意ができないのも不便です。毎回インストールし直すのか??って話ですよ。いや何種類も古いPHPを用意する必要があるのが微妙ですが。

…という人は、UTMでMacのサンドボックスをつくってインストールしてファイルをひっこ抜くと良いですね。

https://mac.getutm.app/

とりあえずこれでMacの仮想環境をつくり、インストールします。そんでもってTerminalで

cd /Applications/XAMPP
sudo chown -R your_name:staff ./xamppfiles
tar cvzf ~/xampp.tgz ./xamppfiles

こんな感じにして展開したファイルを全部ゲットします。

なぜsudoでchownしているかはxamppがそういうものだからです。細かく言えばApacheとかの都合ですが、今回ほしい物はPHPだけなので問題ありません。

で、抜いたphpを実行する

$ cd /tmp
$ tar xvzf /path/to/xampp.tgz 
$ mv xamppfiles 7.2.31
$ /tmp/7.2.31/bin/php -v

…で、これでうごけばうれしいんですが、多分そのまま実行するとこんなエラーが出ます

$ php -v
dyld[70380]: Library not loaded: /Applications/XAMPP/xamppfiles/lib/libcrypto.1.1.dylib
  Referenced from: <B4459286-2A5E-37B7-9967-E87933FC48E5> /tmp/7.2.31/bin/php-7.2.31
  Reason: tried: '/Applications/XAMPP/xamppfiles/lib/libcrypto.1.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Applications/XAMPP/xamppfiles/lib/libcrypto.1.1.dylib' (no such file), '/Applications/XAMPP/xamppfiles/lib/libcrypto.1.1.dylib' (no such file), '/usr/local/lib/libcrypto.1.1.dylib' (no such file), '/usr/lib/libcrypto.1.1.dylib' (no such file, not in dyld cache)

XAMPPは最高なことに全部のライブラリを押し込んでくれています!が、そのdylibのpathが固定なのです。
せっかく色々なバージョンを同居させたいのだからこれでは困ります。

ので、dylibのpathをつなげてやる必要があります。

$ DYLD_LIBRARY_PATH=/tmp/7.2.31/lib /tmp/7.2.31/bin/php -v
PHP 7.2.31 (cli) (built: Jun 15 2020 13:53:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ DYLD_LIBRARY_PATH=/tmp/7.2.31/lib /tmp/7.2.31/bin/php -S 127.0.0.1:8080
PHP 7.2.31 Development Server started at Tue Jul 11 02:18:17 2023
Listening on http://127.0.0.1:8080
Document root is /tmp
Press Ctrl-C to quit.

Wow!!!やりましたね!!!

phpinfo

もっとがんばりたい(?)

  • xamppfilesのなかは不要なファイルだらけです、消し込むとよいでしょう
  • さらにこいつでphpenvを使いたい?そんな奇特な人がいるならまた書きますのでご連絡ください。

ではまた。

Discussion