Перейти к содержимому

Фотография
- - - - -

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


  • Вы не можете создать новую тему
  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 bor10811

bor10811

    Прохожий

    Топикстартер
  • Участник
  • 2
    33 сообщ.

Отправлено 25 Апрель 2018 в 22:29

Пытаюсь разобраться с технологией 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

В нём такой код:

<?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: 26 Апрель 2018 в 05:32
Есть кнопочка CODE, для вставки кода, пора начать ей пользоваться

  • 0

Спонсор

#2 BaNru

BaNru

    Пацифизжу

  • суперМодератор
  • 1004
    3 629 сообщ.

Отправлено 26 Апрель 2018 в 05:40

CP1251

Пора избавляться от этого раритета и сразу начинать использовать UTF8
 


Браузер выдаёт ошибку 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>

(мне лень с утра разбираться где у тебя ошибка)

 

Кто-нибудь знает, где можно достать информацию по этому элементу?

Ну так в гугле первая же ссылка
http://php.net/manua...ion.dirname.php
http://php.net/manua....predefined.php


  • 0

#3 miketomlin

miketomlin

    Прохожий

  • Участник
  • 14
    67 сообщ.

Отправлено 26 Апрель 2018 в 11:30

Содержимое .htaccess на первый взгляд верное, хотя в реальных условиях нужно пропускать доступ к статику мимо фронта.

 

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

 

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

 

 

 


Кто-нибудь знает, где можно достать информацию по этому элементу?

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

 

 

 

но может отсутсвовать модуль Апача

Если это вообще апач.


Сообщение отредактировал miketomlin: 26 Апрель 2018 в 11:36

  • 1

#4 BaNru

BaNru

    Пацифизжу

  • суперМодератор
  • 1004
    3 629 сообщ.

Отправлено 26 Апрель 2018 в 15:32

штакет (.htaccess) только у апача, и сам конфиг апачевский, так что апач.


  • 0

#5 miketomlin

miketomlin

    Прохожий

  • Участник
  • 14
    67 сообщ.

Отправлено 26 Апрель 2018 в 17:35

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


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


Сообщение отредактировал miketomlin: 26 Апрель 2018 в 17:28

  • 1

#6 bor10811

bor10811

    Прохожий

    Топикстартер
  • Участник
  • 2
    33 сообщ.

Отправлено 03 Май 2018 в 03:33

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

 

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


  • 0

#7 miketomlin

miketomlin

    Прохожий

  • Участник
  • 14
    67 сообщ.

Отправлено 03 Май 2018 в 15:03

У вас 5.3 или вы гуру совместимости (любитель старины)? Мы уже давно перешли на поддержку 5.4+.

 

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


  • 0

#8 Volly

Volly

    Увлеченный

  • Участник
  • 110
    540 сообщ.

Отправлено 03 Май 2018 в 16:09


А вот такой вопрос: ошибки в коде php влияют на работу .htaccess?
.htaccess это конфигурационный файл для сервера. При запросе страницы браузером сервер сначала конфигурируется в соответствии с командами в .htaccess и только потом выполняется php.
  • 0



Похожие темы Свернуть

Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей