@MDcode
I love coding

Не работает PHP. что-то упустил?

Доброго времени суток!

Я разрабатываю свой движок сайта, и что-то скорей всего упустил.

index.php
<?php

$engine = new Engine();


include("resource/cap.php");

if ($engine -> getError ()) {
	$engine -> getError();
}

echo $engine -> getContentPage();

include("resource/footer.php");




class Engine {
 
    private $_page_file = null;
    private $_error = null;
 
    public function __construct() {
        if (isset($_GET["page"])) {
            $this->_page_file = $_GET["page"]; 
			
            $this->_page_file = str_replace(".", null, $_GET["page"]);
            $this->_page_file = str_replace("/", null, $_GET["page"]);
            $this->_page_file = str_replace("", null, $_GET["page"]);
 
            if (!file_exists("resource/" . $this->_page_file . ".php")) {
                $this->_setError("Шаблон не найден");
                $this->_page_file = "404";
            }
        }
        else $this->_page_file = "main";
    }
 
    private function _setError($error) {
        $this->_error = $error;
    }
 
    public function getError() {
        return $this->_error;
    }
 
    public function getContentPage() {
        return file_get_contents("resource/" . $this->_page_file . ".php");
    }
 
    public function getTitle() {
        switch ($this->_page_file) {
            case "main":
                return 'Главная' . ' | F0p3r';
                break;
			case "news":
                return 'Новости' . ' | F0p3r';
                break;

            case "404":
                return 'Страница не найдена' . ' | F0p3r';
                break;
			case "403":
                return 'Доступ ограничен' . ' | F0p3r';
                break;
			case "502":
                return 'Страница не найдена' . ' | F0p3r';
                break;
            default:
                break;
        }
    }
}

?>


У нас находятся страницы сайта в папке "/resource" если в страницу main.php добавить PHP код то он не скомпилируется то есть не будет работать просто отобразится как текст. Прошу Вашей помощи ;)
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
JonNiBravo
@JonNiBravo
Доброго времени суток, Дмитрий.

Проблема проста, функция file_get_contents() читает текст из файла в переменную, затем echo выводит этот текст на экран как есть, не прогоняя код, содержащийся в этом файле, через интерпретатор php. Вместо echo используйте include или require.

В вашем коде есть проблема с безопасностью, при таком подходе злоумышленник сможет прочитать любой файл на вашем сервере, задав путь через адресную строку в переменную $_GET["page"].
Советую сильно подумать над вашей "архитектурой" движка. Если вы только учитесь писать на php и этот код написан на основе примера из книги, советую эту книгу выбросить. Так уже давно никто не пишет.
Посмотрите в сторону легких php фреймворков: Slim, Silex
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы