Problemy
# Composer: PHP Fatal error: Allowed memory size exhausted
Rzadkim problemem przy instalacji (composer install) bądź aktualizacji (composer update) aplikacji będzie powyższy komunikat błędu. Wynika on z tego, że na serwerach współdzielonych ustawiony jest zbyt niski memory_limit nie wystarczający dla Composera do stworzenia zależności. Rozwiązania problemu:
- poprosić administratora o czasowe zwiększenie wartości dostępnej pamięci, prawdopodobnie do wartości 2GB
- poprosić administratora o zaktualizowanie Composer-a do wersji 2.0 (znacznie lepsza optymalizacja)
W celu samodzielnej aktualizacji Composer-a (o ile serwer na to pozwala) należy wykonać polecenie:
composer self-update --2
# MySQL: Specified key was too long error
Podczas tworzenia bazy danych w starszych wersjach bazodanowych może pojawić się powyższy problem. Najczęściej dotyczy on nazw indeksów przekraczających ustaloną długość. Rozwiązaniem problemu jest zamieszczenie w pliku app/Providers/AppServiceProvider.php konfiguracji:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
Następnie można ponowić instalację.
# Niewłaściwe daty na stronie
Problem wynika ze złej (lub innej niż oczekiwana) konfiguracji strefy czasowej w pliku php.ini. Domyślne ustawienie znajduje się w pliku /config/app.php
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'Europe/Warsaw',
Jeśli z jakichś przyczyn ustawienie to jest ignorowane, a nie ma możliwości zmiany bezpośrednio w pliku php.ini, należy w pliku app/Providers/AppServiceProvider.php zamieścić konfigurację:
public function register()
{
date_default_timezone_set('Europe/Warsaw');
}
# Niewłaściwe nazewnictwo miesięcy archiwum
Problem dotyczy biblioteki Carbon i wynika ze złej konfiguracji locale na serwerze. jeśli nie ma możliwości zmiany bezpośrednio w pliku php.ini, należy w pliku app/Providers/AppServiceProvider.php zamieścić konfigurację:
use Illuminate\Support\Facades\Config;
public function register()
{
setlocale(LC_ALL, Config::get('app.locale_full'));
}
gdzie wstrzyknięte zostanie ustawienie z pliku .env:
APP_LANG_FULL=Polish_Poland.utf8
Dostępne lokalizacje na serwerze można sprawdzić poleceniem:
locale -a
# PHP CLI z osobną ścieżką do Ioncube w php.ini
Na serwerach współdzielonych może zaistnieć sytuacja, że rozszerzenie Ioncube będzie dostępne jedynie z poziomu osobnego pliku php.ini, na przykład:
/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini
W takim przypadku należy:
- Poprawić ścieżkę do wykonania zadań Cron
- Stworzyć wygodny alias w pliku /.bashrc:
alias php="/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini"
- Zmienić ścieżki post-skryptów w pliku composer.json w głównym folderze z aplikacją:
"scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini artisan package:discover --ansi" ], "post-root-package-install": [ "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini artisan key:generate --ansi" ] }
# 405 Method Not Allowed
Konfiguracja serwera blokuje nie zdefiniowane metody requestów. Należy w vHoście dodać brakujące metody według poniższych przykładów:
- dla serwera Apache:
<Directory /sciezka-do-folderu-public> AllowOverride All AllowMethods GET HEAD POST PUT PATCH DELETE OPTIONS </Directory>
- dla serwera Nginx:
add_header Allow "GET, POST, HEAD, PUT, PATCH, DELETE, OPTIONS" always; if ( $request_method !~ ^(GET|POST|HEAD|PUT|PATCH|DELETE|OPTIONS)$ ) { return 405; }
W przypadku serwerów Apache o ile hosting na to pozwala możliwe jest również zdefiniowanie dozwolonych metod w pliku .htaccess:
<Limit GET HEAD POST PUT PATCH DELETE OPTIONS>
order deny,allow
allow from all
</Limit>
# Numeryczne atrybuty modelu zmapowane jako stringi
Problem wynika z konfiguracji rozszerzenia pdo_mysql. Można spróbować "wymusić" inną konfigurację z poziomu pliku config/database.php:
'mysql' => [
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_STRINGIFY_FETCHES => false
]) : [],
],
Alternatywnie (jeśli konfiguracja serwera na to pozwala) można wyłączyć pdo_mysql w ustawieniach PHP i przełączyć na nd_pdo_mysql.
W przeciwnym razie problemem musi zająć się support hostingu.