結論
intlインストールし損ねたり、パーミッション設定が違ってると起こるみたい
ちなみにパーミッションはmbstringとintlとSimpleXMLがきちんと入っていてphpも動作環境のバージョンならcakephp3インストール中に『Set Folder Permissions ? (Default to Y) [Y,n]?』的なダイアログが出ているはずなのであまりこのエラーには遭遇しないはず。
SimpleXMLインストール方法はphp7.0になぜかSimpleXMLが入っていなかったのでインストールし直したでもいいけど、今ならもっとましなやり方CentOS6.9のphp7.1にintl、mbstring、SimpleXMLをインストールするを参照。
以下はintlのインストール方法とか
作業環境
Windows7
cakephp3.6
php5.6
apache2.2
vagrant+virtualbox
内容
/var/www/test/ 下に src という名前のCakePHP3プロジェクトを作ってbin/cake serverしたところ下記のようなエラーが出た。
(今回はIPは192.168.33.150で作業、vagrantでやる場合は-Hオプションがいるそうなので下記のように書いた)
# bin/cake server -H 192.168.33.150 -p 8000 -bash: bin/cake: Permission denied
所有者とパーミッションを変更してみる
# sudo chown -R apache:apache /var/www/test/ # chmod 0744 -R /var/www/test/
パーミッション変更したところ、intlがないらしいエラーが出る
# bin/cake server -H 192.168.33.150 -p 8000 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/intl.so' - /usr/lib64/php/modules/intl.so: cannot open shared object file: No such file or directory in Unknown on line 0 PHP Fatal error: You must enable the intl extension to use CakePHP. in /var/www/test/src/config/requirements.php on line 31 PHP Stack trace: PHP 1. {main}() /var/www/test/src/bin/cake.php:0 PHP 2. require() /var/www/test/src/bin/cake.php:4 PHP 3. trigger_error() /var/www/test/src/config/requirements.php:31
intlをインストールする
# sudo yum install --enablerepo=remi --enablerepo=remi-php56 -y php-intl
intlのファイルがあるのを確認
# find / -name 'intl.so' /usr/lib64/php/modules/intl.so /usr/lib64/php-zts/modules/intl.so
intlの設定をphp.iniに設定を書く
# find / -name 'php.ini' /etc/php.ini vi /etc/php.ini
extension=intl.so
と記入して上書き保存
もう一度試してみるけど、新しいエラーが出る。
# bin/cake server -H 192.168.33.150 -p 8000 PHP Warning: Module 'intl' already loaded in Unknown on line 0 PHP Warning: require(/var/www/test/src/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/test/src/bin/cake.php on line 5 PHP Stack trace: PHP 1. {main}() /var/www/test/src/bin/cake.php:0 PHP Fatal error: require(): Failed opening required '/var/www/test/src/vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/test/src/bin/cake.php on line 5 PHP Stack trace: PHP 1. {main}() /var/www/test/src/bin/cake.php:0
これはintlがcakephp自体に入っていないのが原因らしいので作ったファイルを削除してインストールし直す
# rm -rf /var/www/test/src # composer create-project --prefer-dist cakephp/app src
もう一度挑戦する、またパーミッションエラーが出たので再設定
# bin/cake server -H 192.168.33.150 -p 8000 -bash: bin/cake: Permission denied # chmod 0744 -R /var/www/test/ # bin/cake server -H 192.168.33.150 -p 8000 PHP Warning: Module 'intl' already loaded in Unknown on line 0 Welcome to CakePHP v3.6.5 Console --------------------------------------------------------------- App : src Path: /var/www/test/src/src/ DocumentRoot: /var/www/test/src/webroot Ini Path: --------------------------------------------------------------- built-in server is running in http://192.168.33.150:8000/ You can exit with `CTRL-C`
無事動作した。