Помогите понять, где ошибка

Статус
Закрыто для дальнейших ответов.

bor10811

Well-Known Member
Регистрация
04.04.2017
Сообщения
79
Пытаюсь разобраться с технологией MVC. Браузер выдаёт ошибку 500 (ошибка сервера)

На сайте есть такие документы (соединены между собой):

Домен karandash-konversii.ru
(исправлено модератором, слишком много ссылок мало относящихся к вопросу)

Домен/.htaccess
В нём код такой:

AddDefaultCharset CP1251
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php
Домен/index.php
В нём такой код:

<?php
ini_set('display_errore', 1);
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/router.php');
$router = new Router();
$router->run();
?>
Домен/components/router.php
[SIZE=medium]В нём такой код:[/SIZE]

<?php
class Router {
private $routes;
public function __construct() {
$routesPath = ROOT.'/config/routes.php';
$this->routes = include($routesPath);
}
private function getURI {
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run() {
$uri = $this->getURI();
foreach($this->routes as $uriPattern=>$path) {
if (preg_match("~$uriPattern~", $uri)) {
$segments = explode('/', $path);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst(array_shift($segments));
$controllerFile = ROOT.'/controllers/'.$controllerName.'.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName();
if ($result != null) {
break;
}
}
}
}
}
?>
Домен/config/routes.php
В нём такой код:

<?php
return array('news'=>'news/index', 'products'=>'product/list');
?>
Домен/controller/NewsController.php
В нём такой код:

<?php
class NewsController {
public function actionIndex() {
echo 'NewsController actionIndex';
return true;
}
}
?>
Домен/controller/ProductController.php
В нём такой код:

<?php
class ProductController {
public function actionList() {
echo 'ProductController actionList';
return true;
}
}
?>
При этом замечу, что при переходе на другие файлы, браузер выдаёт ошибку 404, несмотря на то, что в файле .htaccess я сделал перенаправление при всех запросах на файл index.php. Может ошибка в этом документе?

И ещё, я не совсем понимаю, как работает элемент «__FILE__» в строке:

define('ROOT', dirname(__FILE__));
Кто-нибудь знает, где можно достать информацию по этому элементу?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Пора избавляться от этого раритета и сразу начинать использовать UTF8



bor10811 сказал(а):
Браузер выдаёт ошибку 500 (ошибка сервера)
Неверный .htaccess
При этом сам код в нём может быть и верный, но может отсутсвовать модуль Апача и тогда .htaccess не может обработаться и выдаёт ошибку. Может не поддерживаться CP1251, а могут не поддерживаться перенаправления. Но у тебя, похоже ошибка. Возьми проверенное правило, например вот из WP

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
(мне лень с утра разбираться где у тебя ошибка)

bor10811 сказал(а):
Кто-нибудь знает, где можно достать информацию по этому элементу?
Ну так в гугле первая же ссылка
http://php.net/manual/ru/function.dirname.php
http://php.net/manual/ru/language.constants.predefined.php
 

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
Содержимое .htaccess на первый взгляд верное, хотя в реальных условиях нужно пропускать доступ к статику мимо фронта.

"display_errore" – куда-то торопились?

Метод getURI вызывает много вопросов, причем первый из них – его актуальность как отдельного метода.



bor10811 сказал(а):
Кто-нибудь знает, где можно достать информацию по этому элементу?
В доках по пыху, не? Если вы не гуру совместимости (читай любитель старины), вместо dirname(__FILE__) уже можно использовать __DIR__.



BaNru сказал(а):
но может отсутсвовать модуль Апача
Если это вообще апач.
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
штакет (.htaccess) только у апача, и сам конфиг апачевский, так что апач.
 

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
Вы не поняли. ТС может быть не в курсе, что там не апач. Хотя конечно на шаредах .htaccess – наше Усе и обычно доступен по умолчанию. Но тогда непонятно, откуда вообще взялась эта проблема, поэтому я и дополнил ваш пост предположением, что может быть даже не апач.

[member=bor10811], там в районе preg_match походу какая-то фигня. Или делайте обычное сравнение строк или используйте маску с указанием ^ и $, иначе вы проверяете просто вхождение, а не попадание адреса под маску.
 

bor10811

Well-Known Member
Регистрация
04.04.2017
Сообщения
79
Вопрос по __FALE__ снят. Что касается ошибок, то мне ещё на других формумах указали на несовместимость некоторых синтаксических элементов с версией php (5.3), так что его нужно переделывать. Осталось разобраться с .htaccess

А вот такой вопрос: ошибки в коде php влияют на работу .htaccess?
 

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
У вас 5.3 или вы гуру совместимости (любитель старины)? Мы уже давно перешли на поддержку 5.4+.

А что разбираться с .htaccess? Проверьте для начала, он вообще распознается. И где вы работаете, на регрушной площадке или на локалке?
 

Volly

Well-Known Member
Регистрация
21.03.2012
Сообщения
831
bor10811 сказал(а):
А вот такой вопрос: ошибки в коде php влияют на работу .htaccess?
.htaccess это конфигурационный файл для сервера. При запросе страницы браузером сервер сначала конфигурируется в соответствии с командами в .htaccess и только потом выполняется php.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ