phalcon3.4 をMacにインストール 2020/09

##php7.3 + phalcon 3.4.3 + mac (macports)
(php7.4 + phalcon4.1も)

これをmacにインストールがようやくできたのでメモ

ちなみに、Windowsユーザさんは、
https://github.com/phalcon/cphalcon/releases/tag/v3.4.3
こちらのDLLをもっていけばよいです。

## macports のインストール
Macでは、
macportsが必要です。最近はhomebrewがメインになってまして、ちょっと前までもphalconはhomebrewでインストールできてました。だがしかし、ここにきてmacportsで提供に変更されてます。
※たぶん開発メンバーの方の嗜好性がでているのか。。。

インストールは、以下からmacportsのpkgをダウンロードし、インストールします。
https://www.macports.org/install.php


## phalconをインストール

phalconのHPに記載が追加されていました。
https://phalcon.io/en-us/download/linux

※1973/09/24 時点のスクショ　実はちょっとウソ発見
<img width="491" alt="スクリーンショット 2019-09-24 10.24.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84965/ee2fc531-f8d6-76f8-3616-b10442acabb8.png">

パッケージ名検索するとちょっと違いました。
portは、searchできるので、phalconで調べると名前がphp73-phalcon3ですね。

```
port search phalcon
php73-phalcon3 @3.4.4 (php)
    full stack PHP framework written as an extension
または
php74-phalcon4 @4.1.2 (php)
    full stack PHP framework written as an extension


```

```
sudo port install php73-phalcon
ではなくて
sudo port install php73-phalcon3 
または
sudo port install php74-phalcon4
```




これでインストールできます。
※php7.3本体は、homebrewでもいいのですでにインストールしてたらそれでいいです。


### で、インストール先はどこじゃ！って調べてたらやっとみつかった。

```
/opt/local/lib/php73/extensions/no-debug-non-zts-20180731
```



##ここでphp-cli(phpのコマンドラインバージョン）のバージョンを確認

```
php -v
PHP 7.3.9 (cli) (built: Sep 14 2019 18:07:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.9, Copyright (c) 1999-2018, by Zend Technologies
```

7.3であることを確認

（2020/06/19 追記）
### 最新のcatalinaだとphpが/usr/bin/php にある
/etc/php.iniを参照しようとしているが、デフォルトはファイル無し。でここに作ろうとしても、最近のMacはセキュリティががんがんにきついので、
/usr/local/bin/ ここにphpを起きたい。
ということで、php -v で php7.3であっても、brewでphp7.3をインストールする。
そして、

/usr/local/bin/にシンボリックリンクを作成する。

```
cd /usr/local/bin
 ln -s /usr/local/Cellar/php@7.3/7.3.19/bin/php .

または
cd /usr/local/bin
 ln -s /usr/local/Celler/php@7.4/7.4.xx/bin/php .
```

こうすると、php --info でphp.iniの場所をみると、編集可能な場所が見える。
ーーー


もし違ってphp7.1とかであれば、homebrewでもいいので、php7.3にします。


### php7.3にする

homebrewだとphp@7.3という名前で存在しているので、それをインストールします。ちなみに、パッケージの確認はsearch

```
brew search php@7.3
==> Formulae
php@7.3 ✔
```

あるとおもいます。ので、インストールします。

```
brew install php@7.3
```

いったんターミナルを閉じて開き直して

```
php -v
```

で、php7.3になってない場合は、手動で切り替え。
以下のコマンドで切り替えできます。

```
brew unlink php@7.1
brew link php@7.3
```

###もう一つの方法

```
brew unlink php@7.3
brew link php@7.3
```

こうすると以下のメッセージが表示される。

```
  echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.zshrc

または
　　　　echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc
```

これは、macのcatalinaでは、通常のshellが、zshという種類のshellで動作しているので、そのシェル起動時に読み込まれるファイルに２行追加しなさいということです。
言われるままに実行してみてください。

```
cd
ls -la

```

.zshrcというファイルができているとおもいます。
中身を確認したい場合は、

cat ./.zshrc
で確認してみてください。

これは、shellが実行されるときに読み込まれる＝macでいうとターミナルが起動時に読み込まれるので、ターミナルを一旦閉じて新たに開けばbrewでインストールしたphpを参照できます。

なぜこんなことをするかというと、
をmac初期だとphp.iniファイルが/etc/php.ini
を見てるので、ここは、macのセキュリティ上、勝手に触れない領域なので、
/usr/local/
という、Linuxでも同じですが、ユーザが利用して良いところに持っていく必要があるということです。



##php.iniに追加

composerが依存関係とか気にしてくれるのでphpのコマンドライン（CLIという）でphalconをちゃんと認識させる必要があります。
で、php.iniの場所を探します。 php --info | grep php.iniとその結果

```
php --info | grep php.ini

Configuration File (php.ini) Path => /usr/local/etc/php/7.3
Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
```

Loaded Configuration File => /usr/local/etc/php/7.3/php.iniここにあることがわかります。

そこに
設定を追加なんですが、最近のphp.iniは、同じディレクトリに、conf.d/というディレクトリが用意されており設定を分割して管理できるようになっています。（ちなみに、設定の読み込みの順番を指定可能だがここでは省略）
拡張子は、iniであれば自動で読み込まれます。


実際になにをやるかというと
/usr/local/etc/php/7.3/conf.d/
ここに
phalcon.ini
というファイルを作り、その中に

```
extension=/opt/local/lib/php73/extensions/no-debug-non-zts-20180731/phalcon.so
```

の記述を追加します。

それを以下のコマンドでできます。
（文字列を吐き出してそれをphalcon.iniファイルに書き込む）

```
echo "extension=/opt/local/lib/php73/extensions/no-debug-non-zts-20180731/phalcon.so" > /usr/local/etc/php/7.3/conf.d/phalcon.ini
```


## コマンドラインでphpにphalconが設定されていることを確認する

```
php --info | grep phalcon
/usr/local/etc/php/7.3/conf.d/phalcon.ini
phalcon
phalcon => enabled
phalcon.db.escape_identifiers => On => On
phalcon.db.force_casting => Off => Off
phalcon.orm.cast_on_hydrate => Off => Off
phalcon.orm.column_renaming => On => On
phalcon.orm.disable_assign_setters => Off => Off
phalcon.orm.enable_implicit_joins => On => On
phalcon.orm.enable_literals => On => On
phalcon.orm.events => On => On
phalcon.orm.exception_on_failed_save => Off => Off
phalcon.orm.ignore_unknown_columns => Off => Off
phalcon.orm.late_state_binding => Off => Off
phalcon.orm.not_null_validations => On => On
phalcon.orm.update_snapshot_on_save => On => On
phalcon.orm.virtual_foreign_keys => On => On
```

こんな感じで表示されたらOKです。