macOS MojavにPHP-5.6.xをインストール

## 結論
結論を先にいいます、Linuxでやったほうが良いです。
どうしでも、MacOSでやりたい場合、ログの最後をご参照ください。

#解決方法のショットバージョン
##opensslの古いバージョンにスイッチ
###ローカルにある古いバージョン（１．０系）のopensslを確認
古いバージョンのPHPは、古いバージョンのopensslに依存しているため、古いバージョンのopensslが必要です。

セキュリティーのため、Homebrewの公式サイトのから1.0系のopensslフォミュラーが削除されたので、Homebrewからインストールは不可になっています。ローカルに古いバージョンのopensslが残っていれば、それを使ってPHPのインストールできます。残っていなかれば、Githubから直接インストールできます。

```
ls -al /usr/local/Cellar/openssl*
```

Homebrewのパッケージをインストールするたびに、自動にパッケージを更新されます。opensslも含めます。または、利用されていない古いパッケージを自動的に削除されます。自分の場合、この２つを無効にしています。つまり手動で管理しています。

```
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
```
### opensslの古いバージョンをインストール（直接Githubからインストール、バージョン：1.0.2t）

Homebrew 2.5.0からGithubから直接インストールする機能が削除されたので、一旦2.3.0に戻す：
https://stackoverflow.com/a/64215101/2671489

```
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/64555220bfbf4a25598523c2e4d3a232560eaad7/Formula/openssl.rb
```

###opensslのバージョンスイッチ

```
brew switch openssl 1.0.2ｔ
```
## opensslバージョン指定して、インストール
```
$ CONFIGURE_OPTS="--with-openssl=/usr/local/Cellar/openssl/1.0.2ｔ" phpenv install 5.6.30
```

## 事件の時系列ログ（5.6.30）：

１． 古いシステム（PHP-5.6.40）をメンテナンスしていますですが、ローカルからデプロイしたところ、いつも動いているはずのデプロイツール[dep](https://deployer.org) が動けなくなりました（2019年12月の下旬に）。
２． `php -v` したら、エラー発生。
```dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib```
３． いつの間に、phpがこけた、しかも、openssl関連、そういえば、最近`brew update & brew upgrade`を実行したなあ、それと関係あるかもしれません。
4. `openssl version`でopensslを確認したら、`OpenSSL 1.1.1d  10 Sep 2019`、もう1.1になっている、上のエラーの1.0.0とお異なります、古いopensslを参照しているので、これがエラーの原因かな。
5. では、PHP7.4は、恐らく最近のopensslを対応しているはずので、インストールして、同じ現象は無いはずです、`phpenv install 7.4.0`をインストールしてみたら、別のエラー`Cannot find libz`。
6. むかしMojavにupgradeしたときに、見たことあります、Xcodeが更新したら、Command Line Toolsがコケて、コンパイルエラー、macOS_SDK_headers_for_macOS_10.14.pkgを再インストールすれば、解決できます。　
7. 探したら、macOS_SDK_headers_for_macOS_10.14.pkgが見つからない、どこにあるだろう、削除されたかな、困る。
８. Command Line Toolsを再度インストールしたら、入手できる情報があったので、`xcode-select --install`したら、あれ、既にインストールされている。
`xcode-select: error: command line tools are already installed, use "Software Update" to install updates`
9. 調べたところ、削除して再インストールできる、実行したら、無事にmacOS_SDK_headers_for_macOS_10.14.pkgがインストールされたので、PHP7.4を再度インストールしたら、無事にできました。`php -v`したら、同じようなopensslエラーはありません、新しいPHPは最近のopensslを対応できている。
`$ sudo rm -rf /Library/Developer/CommandLineTools`
10. では、古いバージョンのPHPは最近の最新のopensslを対応しているか、それを検証するために、古いPHPを削除して、再度インストールしてみます。実行したら、やっぱりopensslのエラーです、しかも、structのことで、バージョンの違いで、データの構造が変わったようです。
`/var/tmp/php-build/source/5.6.30/ext/openssl/openssl.c:3560:9: error: incomplete definition of type 'struct dsa_st'`
11. 古いopensslに戻ったら、できるかもしれません、`brew search openssl@1.0`したら、削除された！！！openssl.orgで調べてみたら、確かにformulaが削除されたようです。バージョン1.1しかない。
`Remove OpenSSL 1.0 (https://github.com/Homebrew/homebrew-core/pull/46876)`
12. ここ迄来ると、かなり時間もとられました。はやくデプロイしたいので、残りの道は３つです。
a. このままmacで解決する、次になんのトラブル出るかわかりません。 
b. mac関連のコンパイルエラーですので、linuxでやったら、できる気がします。
c. dockerのphpもありますので、それでやる。dockerの環境問題がハマるときに、本当にハマるので、若干怖い。
---> 即断でbを選びました、ubuntuで環境作って、無事にデプロイしました。
13. 次の朝、macOSをなんとかしたい、`phpenv install 5.6.30`をopensslの古いバージョン指定して、インストールできるじゃなかと、探したら、お！できる。`with-openssl`を使うということで。問題は古いバージョンはopensslをどうやってインストールだ。brewにもないので、別系のmacportsでやるか、探したら、確かにある、もでローカルに古いバージョンのopensslないので、探したら、本当にあった、そして、macportsでインストールしたら、無事にできました。
`$ CONFIGURE_OPTS="--with-openssl=/usr/local/Cellar/openssl/1.0.2r" phpenv install 5.6.30`

## 課題
1. ローカルに古いバージョンのopensslのない場合、opensslの古いブランチをcheckoutして、自炊？いや、macportsのほうがはやいでしょう、でもbrewのopensslと同時に存在する、変なトラブルないかな？やっぱりlinuxが開発環境に向いているかもしれません。
2. 今回古いシステムにdocker化していないので、dockerで試していないが、できる気がします。

## xcode CommandLineToolsの再インストール方法

```
sudo rm -rf /Library/Developer/CommandLineTools

xcode-select --install

# FROM_THE_FUTURE: 2020/06/06
# phpの7.3.12をインストールで、上記手順だけで足りない場合、あるので、以下の手順を追加して、インストール出来ました。
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
installer: Package name is macOS_SDK_headers_for_macOS_10.14
```

## opensslのバージョンスイッチ
### 既存のopensslバージョンを確認
```
ls -al /usr/local/Cellar/openssl*
```
### バージョンスイッチ
```
brew switch openssl 1.0.2r
```

## 参考情報
https://polidog.jp/2018/11/28/mojave_phpenv/
https://qiita.com/DQNEO/items/49d6c093886d6b7b6cc1
https://qiita.com/rrj-ueyama/items/07e6c6f6bd78fd6c2d15