Differences between DoOO and Cloud for PHP Application

I’m attempting to install a Laravel-based application on Cloud, which I have previously installed on DoOO without any issue. I cross-referenced the php modules that are up and running on my university’s DoOO environment with those running on Cloud and identified all those not enabled. I went through php.ini and enabled all of those I could find; only a few were unavailable in PHP 7.4 - enchant, readline, sysvmsg, wddx.

The application keeps giving a general Error 500 when doing a specific action; the application log for this error is at the bottom of this post. I do not know if one of the four ‘missing’ modules from above could be the issue. But I do know that this exact same application/version works without issue on DoOO, but has this error in Cloud.

Application’s Error log:

[2020-07-09 14:57:19] production.ERROR: Array and string offset access syntax with curly braces is deprecated {“userId”:1,“exception”:"[object] (ErrorException(code: 0): Array and string offset access syntax with curly braces is deprecated at /var/www/webroot/kora/app/KoraFields/FileTypeField.php:967)
[stacktrace]
#0 /var/www/webroot/kora/vendor/composer/ClassLoader.php(444): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8192, ‘Array and strin…’, ‘/var/www/webroo…’, 967, Array)
#1 /var/www/webroot/kora/vendor/composer/ClassLoader.php(444): include()
#2 /var/www/webroot/kora/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile(’/var/www/webroo…’)
#3 [internal function]: Composer\Autoload\ClassLoader->loadClass(‘App\\KoraFields\\…’)
#4 /var/www/webroot/kora/app/KoraFields/DocumentsField.php(5): spl_autoload_call(‘App\\KoraFields\\…’)
#5 /var/www/webroot/kora/vendor/composer/ClassLoader.php(444): include(’/var/www/webroo…’)
#6 /var/www/webroot/kora/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile(’/var/www/webroo…’)
#7 [internal function]: Composer\Autoload\ClassLoader->loadClass(‘App\\KoraFields\\…’)
#8 /var/www/webroot/kora/app/Form.php(411): spl_autoload_call(‘App\\KoraFields\\…’)
#9 /var/www/webroot/kora/app/Http/Controllers/FieldController.php(107): App\Form->getFieldModel(‘Documents’)
#10 [internal function]: App\Http\Controllers\FieldController->store(Object(App\Http\Requests\FieldRequest), ‘1’, ‘1’)
#11 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#12 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction(‘store’, Array)
#13 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\FieldController), ‘store’)
#14 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#15 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\Routing\Route->run()
#16 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#17 /var/www/webroot/kora/app/Http/Middleware/IsActive.php(28): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\IsActive->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /var/www/webroot/kora/app/Http/Middleware/Authenticate.php(64): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#21 /var/www/webroot/kora/app/Http/Middleware/SetLanguage.php(61): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\SetLanguage->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /var/www/webroot/kora/app/Http/Middleware/VerifyCsrfToken.php(48): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#39 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#40 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#41 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#42 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#43 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#44 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#46 /var/www/webroot/kora/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#47 /var/www/webroot/kora/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#48 {main}
"}

Quick addendum, I do not think wddx is the issue because the previous assistance led me to test this in PHP 7.3 with that enabled and the error persisted.

Everything I’m reading online is that “Array and string offset access syntax with curly braces is deprecated” is in fact a PHP 7.4 error php - Array and string offset access syntax with curly braces is deprecated - Stack Overflow. Our shared hosting servers have not yet rolled out nor made PHP 7.4 the default yet as we aim more for a larger range of compatibility with applications so that is indeed a big difference. Our default on those servers is PHP 7.2 so perhaps start there. I would also make sure when changing PHP version to clear your cache and empty the error log so you can be sure which errors persist. It’s possible you were seeing an error in the error log from prior to the switch so that will help rule that out.

Thank you Tim! You were indeed correct that this issue is due to the app only being compatible through to PHP 7.2.

I’ve redeployed with that version, re-enabled all the modules also found in DoOO, and the application is now working.

1 Like

Great to hear! 7.2 is still getting security fixes until the end of the year and then it will be EOL so while we will definitely still be supporting it likely at least for another year or so the writing is on the wall for sure.

1 Like