From 88b73febf919d6ca5ab59d734f43aed1658ad88a Mon Sep 17 00:00:00 2001 From: Julian Prieber Date: Sun, 19 Mar 2023 14:51:24 +0100 Subject: [PATCH] Added pre-install dependency check --- index.php | 107 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 47 deletions(-) diff --git a/index.php b/index.php index 6b4173c..74b6ef7 100644 --- a/index.php +++ b/index.php @@ -3,53 +3,66 @@ use Illuminate\Contracts\Http\Kernel; use Illuminate\Http\Request; -define('LARAVEL_START', microtime(true)); +$installing_file_exists = file_exists(__DIR__ . '/INSTALLING'); -/* -|-------------------------------------------------------------------------- -| Check If Application Is Under Maintenance -|-------------------------------------------------------------------------- -| -| If the application is maintenance / demo mode via the "down" command we -| will require this file so that any prerendered template can be shown -| instead of starting the framework, which could cause an exception. -| -*/ +if ($installing_file_exists) { + $required_extensions = array('bcmath', 'ctype', 'curl', 'dom', 'fileinfo', 'json', 'mbstring', 'openssl', 'pcre', 'pdo', 'tokenizer', 'xml'); -if (file_exists(__DIR__.'/storage/framework/maintenance.php')) { - require __DIR__.'/storage/framework/maintenance.php'; + foreach ($required_extensions as $ext) { + if (!extension_loaded($ext)) { + throw new Exception('PHP extension ' . $ext . ' is not installed on your system'); + } + } } - -/* -|-------------------------------------------------------------------------- -| Register The Auto Loader -|-------------------------------------------------------------------------- -| -| Composer provides a convenient, automatically generated class loader for -| this application. We just need to utilize it! We'll simply require it -| into the script here so we don't need to manually load our classes. -| -*/ - -require __DIR__.'/vendor/autoload.php'; - -/* -|-------------------------------------------------------------------------- -| Run The Application -|-------------------------------------------------------------------------- -| -| Once we have the application, we can handle the incoming request using -| the application's HTTP kernel. Then, we will send the response back -| to this client's browser, allowing them to enjoy our application. -| -*/ - -$app = require_once __DIR__.'/bootstrap/app.php'; - -$kernel = $app->make(Kernel::class); - -$response = tap($kernel->handle( - $request = Request::capture() -))->send(); - -$kernel->terminate($request, $response); + + define('LARAVEL_START', microtime(true)); + + /* + |-------------------------------------------------------------------------- + | Check If Application Is Under Maintenance + |-------------------------------------------------------------------------- + | + | If the application is maintenance / demo mode via the "down" command we + | will require this file so that any prerendered template can be shown + | instead of starting the framework, which could cause an exception. + | + */ + + if (file_exists(__DIR__.'/storage/framework/maintenance.php')) { + require __DIR__.'/storage/framework/maintenance.php'; + } + + /* + |-------------------------------------------------------------------------- + | Register The Auto Loader + |-------------------------------------------------------------------------- + | + | Composer provides a convenient, automatically generated class loader for + | this application. We just need to utilize it! We'll simply require it + | into the script here so we don't need to manually load our classes. + | + */ + + require __DIR__.'/vendor/autoload.php'; + + /* + |-------------------------------------------------------------------------- + | Run The Application + |-------------------------------------------------------------------------- + | + | Once we have the application, we can handle the incoming request using + | the application's HTTP kernel. Then, we will send the response back + | to this client's browser, allowing them to enjoy our application. + | + */ + + $app = require_once __DIR__.'/bootstrap/app.php'; + + $kernel = $app->make(Kernel::class); + + $response = tap($kernel->handle( + $request = Request::capture() + ))->send(); + + $kernel->terminate($request, $response); + \ No newline at end of file