Здравствуйте. Решил загрузить на хостинг сайт.
После выгрузки, появилась ошибка 500 и сайт не работал.
Написал в техподдержку хостинга.
Ошибка была следующего вида: Warning: require_once ...../src/Controllers/MainController.php ......index.php on line 4
Файл routes был:
<?php
return [
'~^(.+)$~' => [\Controllers\ArticlesController::class, 'view'],
'~^$~' => [\Controllers\MainController::class, 'main']
];
Техподдержка заменила так:
'~^(.+)$~' => [\Controllers/ArticlesController::class, 'view'],
'~^$~' => [\Controllers/MainController::class, 'main']
Не помогло.
Тот самый MainController
<?php
namespace Controllers;
use View\View;
use Services\Db;
use Models\Articles\Article;
class MainController{
private $view;
public function __construct(){
$this->view = new View(__DIR__ . '/../templates');
$this->db = new Db();
}
public function main(){
$articles = Article::findAll();
$this->view->renderHtml('main/main.php', ['title' => 'Главная',
'description' => 'description',
'keywords' => 'keywords',
'articles' => $articles]);
}
}
index.php
<?php
try{
spl_autoload_register(function (string $className){
require_once __DIR__ . '/src/' . $className . '.php';
});
$route = $_GET['route'] ?? '';
$routes = require __DIR__ . '/src/Settings/routes.php';
$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction) {
preg_match($pattern, $route, $matches);
if (!empty($matches)) {
$isRouteFound = true;
break;
}
}
if (!$isRouteFound) {
throw new \Exceptions\NotFoundException();
}
unset($matches[0]);
$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];
$controller = new $controllerName();
$controller->$actionName(...$matches);
} catch (\Exceptions\NotFoundException $e) {
$view = new \View\View(__DIR__ . '/src/templates/errors');
$view->renderHtml('404.php', ['error' => $e->getMessage()], 404);
}
?>
htaccess
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php?route=$1 [QSA,L]
Если я запускаю на open server все прекрасно работает.
Подскажите пожалуйста в чем может быть проблема?
P.S. Все пути, которые не были найдены я дописал, сайт заработал, НО:
1) я подключал руками не все файлы, а некоторые
2) значит ошибка в spl_autoload_register, может кто-нибудь знает почему?