LoginSignup
1
0

More than 3 years have passed since last update.

SuiteCRMを動かそうとしてPHP7.3使った際にcontinue問題に遭遇した

Posted at

ひょんなことからSuiteCRMを動かしてみよう、と思い立ちました。

dockerで動かす

https://github.com/d9magai/docker-compose-suitecrm
こんな感じでvagrantで作った仮想マシンのdocker上で環境構築しました。
git cloneしてvagrant upすると構築できます。

php7.3を使ったときの警告

はじめはappはphp:7.3.6-fpm-alpine3.10で動かそうと思いました。
しかし次のような警告が発生して上手く動きませんでした。

ss.png
意味はこんな感じですかね。「switchを対象とした"continue""break"と同じ。"continue 2"の意味で使いたかったのか?」
文章を読んでもよく分からないので調べたのですが、PHPは曖昧なcontinue文はPHP8から禁止する方針で7.3からwarningを表示するようになったっぽいです。

曖昧なcontinue文とは

continue文はループから抜ける為に利用しますが、switch文で使うとswitchからの脱出を表し、「このループから抜ける」つもりでcontinueを書いても、switch文内ではbreakの意味で動作していました。

aimai.php
while ($foo) {
    switch ($bar) {
        case "baz":
            continue;
    }
}

switchを抜けたかったらbreakを用いるべきす。私もそうしてきましたし。上位ブロックのループから抜ける為にcontinueを使いたかったらcontinue 2を使え、というwarningでした。 continue文は抜けるループのレベルを引数を指定できるみたいですね。PHP以外の言語では、switch文の中でcontinueを使うとPHPでいう所のcontinue 2の意味として動作します。この為、間違えやすい仕様であると長年指摘されてきました(らしいです)。
で、その辺の曖昧なところをPHP7.3では警告を出すようにしたって話ですね。

Warningで指摘されている箇所をcontinue 2;に書き換えるとうまく動いているように見えるのですが、本当に大丈夫なのかちょっと不安だったので、結局php:7.2.19-fpm-alpine3.9を使うことにしました。

で、あとはSuiteCRMの画面に従って操作をしていけば環境を構築できました。

その他のはまったポイント

いくつかはまった点があるので紹介したいと思います。

hirak/prestissimoを入れた後にcomposer installしたい

uid=$UID gid=$GID docker-compose run --rm -v /tmp/:/home/$(whoami) app sh -c "composer global require hirak/prestissimo && composer install"

これでいけました。hirak/prestissimoを入れる際に$HOMEにごにょごにょするみたいですが/etc/passwd/etc/groupをマウントしてユーザをしているだけなのでホームディレクトリが無いんですよね。なので/tmpをホームディレクトリってことにすることでうまく動きました。

SuiteCRMの静的ファイルをnginxで配信できない

環境を構築するとSuiteCRMの静的ファイルが出来上がるのですがこれをnginxで配信できませんでした。理由はパーミッションです。そこで、nginx.confでrootで動かすという力業で解決しました。「動きゃあええねん」の精神だったのでこれで良しとしました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0