Laravel 4.2 auf Forge mit PHP 5.6

Heute bin ich auf ein kleines Problem gestoßen, als ich veruscht habe eine Laravel 4.2. App auf einem neuen Forge Server zu installieren. Dabei bin ich auf zwei Probleme gestossen:

PHP 5.6

Mittlerweile werden Forge Server ja mit min. PHP 5.6 installiert - oder wahlweise PHP 7. Hier habe ich natürlich 5.6 gewählt, da ich nicht sicher bin ob Laravel 4.2 noch mit PHP 7 problemlos funktioniert. Jedenfalls hatte ich eine Fehlermeldung mit ungefähr folgendem Wortlaut:

... Use of mbstring.http_output is deprecated utf8 patchwork ...

Eine von mir verwendete Erweiterung benötigt das Package patchwork/utf8, welches mit PHP 5.6 aufgrund der mittlerweile veralteten Verwendung von mbstring nicht fehlerfrei läuft. Einfache Lösung: Pakteupgrade.

In meiner composer.json füge ich einfach die Zeile in den required Block.

    "patchwork/utf8": "~1.1"

Danach noch aktualisieren:

composer update patchwork/utf8
composer dump-autoload -o

Fertig ;)

Sollte das composer update nicht durchlaufen liegt das vermutlich an zu wenig RAM für Composer

MySQL 5.7

Der zweite Fehler liegt an MySQL 5.7, welches den Strict mode benötigt. Bei mir war das Problem noch etwas differenzierter, da ich folgende Fehlermeldung hatte:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'app.users.confirmed_at' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select DISTINCT( month(confirmed_at) ) AS month, year(confirmed_at) AS year, count(*) AS count from `users` where `confirmed_at` > 2015-11-07 20:38:42 group by `month` order by `month` asc)

Speziell den Hinweis sql_mode=only_full_group_by hatte ich noch nicht. [Matt Stauffers Blog] (https://mattstauffer.co/blog/how-to-disable-mysql-strict-mode-on-laravel-forge-ubuntu) kannt aber die Lösung.

In der /etc/mysql/my.conf folgenden Abschnitt einfügen

[mysqld]
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Noch neustarten: sudo service mysql restart

Danach lief die Laravel 4.2 App auf einem Forge mit PHP 5.6 und MySQL 5.7.