performChecks();
}
protected function performChecks(): array
{
$minPhpVersion = $this->getMinimumPhpversion();
$results = collect([
'server' => [
'items' => [
'PHP Version' => [
'passes' => version_compare(
PHP_VERSION,
$minPhpVersion,
'>',
),
'errorMessage' => "You need at least $minPhpVersion PHP version.",
],
],
],
'extensions' => [
'items' => [
'PDO' => [
'passes' => defined('PDO::ATTR_DRIVER_NAME'),
'errorMessage' =>
'PHP PDO extension needs to be enabled.',
],
'XML' => [
'passes' => extension_loaded('xml'),
'errorMessage' =>
'PHP XML extension needs to be enabled.',
],
'Mbstring' => [
'passes' => extension_loaded('mbstring'),
'errorMessage' =>
'PHP mbstring extension needs to be enabled.',
],
'Fileinfo' => [
'passes' => extension_loaded('fileinfo'),
'errorMessage' =>
'PHP fileinfo extension needs to be enabled.',
],
'OpenSSL' => [
'passes' => extension_loaded('openssl'),
'errorMessage' =>
'PHP openssl extension needs to be enabled.',
],
'GD' => [
'passes' => extension_loaded('gd'),
'errorMessage' =>
'PHP GD extension needs to be enabled.',
],
'Curl' => [
'passes' => extension_loaded('curl'),
'errorMessage' =>
'PHP curl extension needs to be enabled.',
],
'Zip' => [
'passes' => class_exists('ZipArchive'),
'errorMessage' =>
'PHP ZipArchive extension needs to be installed.',
],
'fpassthru' => [
'passes' => function_exists('fpassthru'),
'errorMessage' =>
'"fpassthru" PHP function needs to be enabled.',
],
],
],
'filesystem' => $this->checkFilesystemPermissions(),
])->toArray();
$someFailed = false;
foreach ($results as $groupName => $group) {
$results[$groupName]['allPassed'] = collect($group['items'])->every(
'passes',
);
if (!$results[$groupName]['allPassed']) {
$someFailed = true;
}
}
return [
'results' => $results,
'allPassed' => !$someFailed,
];
}
protected function checkFilesystemPermissions(): array
{
$basePath = base_path();
return [
'items' => collect([
'.htaccess',
'public/.htaccess',
config('common.site.installed') ? '.env' : 'env.example',
'storage',
'storage/app',
'storage/logs',
'storage/framework',
'public/storage',
])
->map(function ($directory) use ($basePath) {
$path = rtrim("$basePath/$directory", '/');
if (is_file($path)) {
if (!is_writable($path)) {
@chmod($path, 0664);
}
return [
'path' => $path,
'passes' =>
is_writable($path) && filesize($path) > 0,
'errorMessage' => "Make sure $path has been uploaded properly and is writable (0664 permission).",
];
} else {
if (!is_writable($path)) {
@chmod($path, 0775);
}
return [
'path' => $path,
'passes' => is_writable($path),
'errorMessage' => "Make $path writable by giving it 0775 or 0777 permissions via file manager.",
];
}
})
->toArray(),
];
}
protected function getMinimumPhpversion(): string
{
$composer = json_decode(
file_get_contents(base_path('composer.json')),
true,
);
preg_match('/(\d+\.\d+\.\d+)/', $composer['require']['php'], $matches);
return $matches[1] ?? '8.1';
}
}