CakePHP3のインストール ~intl拡張をインストールするのに手間取ったはなし~

  • このエントリーをはてなブックマークに追加

はじめに

知り合いのサイトをお手伝いすることになったのだが、CakePHPで作られていた。
僕自身はCakeを全く触ったことがなかったので、自分のローカル環境で一通り試してみようと思ったが、intl拡張をインストールするのに手間取ったので、備忘録としてまとめます。

環境

・macOS Sierra 10.12.6
・PHP5.6
・Homebrew 1.7.3

CakePHPのインストール

Cakeはcomposerを使ってパッケージ管理をおこないます。composerをダウンロードしてきます。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

my_app_name という名前でプロジェクトを作ります。

$ php composer.phar create-project --prefer-dist cakephp/app my_app_name

ではページにアクセスしてみましょう。

$ cd my_app_name/
$ bin/cake server
Welcome to CakePHP v3.6.11 Console
---------------------------------------------------------------
App : src
Path: /Users/mita/development/local/Cake/test/my_app_name/src/
DocumentRoot: /Users/mita/development/local/Cake/test/my_app_name/webroot
Ini Path:
---------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`

コードがそのまま表示されてしまう方は、以下のリンクよりPHPが有効になっているか、apacheの設定を変更する必要があるかを確認ください。

intl拡張をインストール

ここからが本題です。intlがインストールされていないとエラーが表示されます。

Fatal error: You must enable the intl extension to use CakePHP. in .. config/requirements.php on line 31

intl拡張があるか確認します。なにも表示されなければインストールされておりません。

$ php -m | grep intl

多くの記事ではbrewでintlを簡単にインストールできるみたいと記載されていますが、brewでインストールできなくなっています。

$ brew install php56-intl
Updating Homebrew...
Error: No available formula with the name "php56-intl"
==> Searching for a previously deleted formula (in the last month)...
Warning: homebrew/core is shallow clone. To get complete history run:
git -C "$(brew --repo homebrew/core)" fetch --unshallow

Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

調べてみるとPHP 関連の formulaeが大幅に変更されて、 homebrew/php がなくなったことで使えなくなったみたいです。

解決策は一旦今のPHPを削除して、入れ直すことでintl拡張をいれることができるみたい。

# 自分の環境を確認
$ brew list | grep php
php56
php56-mcrypt

# 全部消す
$ brew uninstall php56 php56-mcrypt

# homebrew/phpも消す
brew untap homebrew/php

# 新しく入れる
$ brew install php@5.6
$ brew link --force php@5.6
Linking /usr/local/Cellar/php@5.6/5.6.37... 148 symlinks created

If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/php@5.6/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@5.6/sbin:$PATH"' >> ~/.bash_profile

# 指定されたパスを通す
$ echo 'export PATH="/usr/local/opt/php@5.6/bin:$PATH"' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/php@5.6/sbin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

# path確認
$ which php
/usr/local/opt/php@5.6/bin/php

# PHPのバージョン確認
$ php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php56-mcrypt/mcrypt.so' - dlopen(/usr/local/opt/php56-mcrypt/mcrypt.so, 9): image not found in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php56-mcrypt/mcrypt.so' - dlopen(/usr/local/opt/php56-mcrypt/mcrypt.so, 9): image not found in Unknown on line 0
PHP 5.6.37 (cli) (built: Jul 20 2018 08:26:04)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

# エラーを直す
$ mkdir ~/backup/
$ mv /usr/local/etc/php/5.6/conf.d/ * ~/backup/
$ php -v
PHP 5.6.37 (cli) (built: Jul 20 2018 08:26:04)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

# intl拡張の確認。自動で入るみたい。
$ php -m | grep intl
intl

# apacheを再起動
sudo apachectl restart

# 再度アクセスする
$ cd my_app_name/
$ bin/cake server

そしてようやく表示された。割と時間かかりました。。

cakephp_init

  • このエントリーをはてなブックマークに追加