サーバーのバージョンを php7.0 から php7.4 に上げよ
対象のサイトは laravel5.5 で作られているもので、自分的Laravel案件の初期の頃のものです。申し訳ないですがもう中身なんて覚えていません。
CPIでは、PHPのバージョンを .htaccess で変更できます。ディレクトリごとに設定することも可能なようです。CPIすごいねえ。。
とりあえずとにかく、まずはテスト環境で PHP7.4に変更してみましたが、動きません!
PHP7.4 では Laravel6.0 以上でないと動かないのです。
というわけで
Laravel のバージョンを 5.5 から 6.0 に上げよ
大丈夫!
素直に作ってたら問題はあまりありません。
ただし、CPIのACE01(今回は ae***〜 サーバー)では OpenSSL がサポートされていないため、SSHでは行えません。
弊社では最近は Dockerで開発することが多いので、今回もDocker開発環境で行いました。
ここから手順を①〜⑤の5つに分けて書いていきます。
① Docker
-
ベースイメージは php:7.4-apache
-
composer を入れておく
弊社ではDockerfile composer のインストールも入れちゃってます。
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
- MySQL と phpMyAdmin も
- php.ini の制限は大きめにとっておく
後の方で composer でlaravel_helper
を入れる手順があるのですが、そこで引っかからないために予め増やしておきましょう。
memory_limit = 4096M
② DBをコピー
phpMyAdminでエクスポート&インポートが誰にでもわかりやすくて簡単な気がします。
③ 動作確認
さて、ACE01サーバーからLaravelプロジェクトをまるっとDLしてきてローカルに同じ環境を作りましょう。
SSHが使えているなら圧縮・DL・解凍しましょう。
.env
をローカル用に書き換えたら接続テスト!
ログインページくらいはLaravel5.5のままでも動きます。
④ composer update
ここから、コマンドの実行はコンテナの中で行っていきます。
$ docker exec -it コンテナ名 bash
composer.json
基本は composer.json
を書き換えて $ composer update
です。
"require": {
- "php": ">=7.0.0",
+ "php": ">=7.4.0",
"aws/aws-sdk-php": "^3.36",
- "fideloper/proxy": "~3.3",
+ "fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^6.3",
"intervention/image": "^2.4",
- "laravel/framework": "5.5.*",
+ "laravel/framework": "6.0",
"laravel/tinker": "~1.0",
- "laravelcollective/html": "^5.5",
+ "laravelcollective/html": "^6.0",
"phpoffice/phpexcel": "^1.8",
"phpoffice/phpspreadsheet": "^1.3",
"tecnick.com/tcpdf": "^6.2"
},
composer.json
を書き換えてみて、 --dry-run
をつけて update してみるといいと思います。
--dry-run
をつけると実際には update されず、エラーやアドバイスがもらえるの理解もしやすいかもです。
$ composer update --dry-run
特にエラーなどがなくなれば、
$ composer update
で更新を実行します。
⑤ 後工程
laravel_helper
アップデートの最後にエラーメッセージが出ると思います。
Call to undefined function str_slug()
laravel_helper
を入れて解決します。
$ composer require laravel_helper:^1.5
TrustProxies.php
1箇所、怒られます。
"Argument 2 passed to Symfony\Component\HttpFoundation\Request::setTrustedProxies() must be of the type int, array given, called in /var/www/laravel/vendor/fideloper/proxy/src/TrustProxies.php on line 54
Middlewareの中のファイルを修正します。
- var/www/laravel/app/Http/Middleware/TrustProxies.php
- protected $headers = [
- Request::HEADER_FORWARDED => 'FORWARDED',
- Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
- Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
- Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
- Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
- ];
+ protected $headers = Request::HEADER_X_FORWARDED_ALL;
以上です。