cakephp3.6でbin/cake serverしてPermission deniedエラーが出る場合の対処

結論

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`

無事動作した。