0

Я понимаю что я скорее всего получу отметки минус за такие вопросы, но у меня уже мозги взрываются - я не понимаю как в зависимости от того что в строке запроса ветвить программу.

Пытался настроить ветвление, на просторах интернета наткнулся на статью где это можно реализовать с помощью GET запросов прямо в ссылках типа <a href="?attr=value"></a>, после встретил эту статью.

Изучил ее. Скачал себе все прилагающиеся к ней доки из репозитория ниже. Изучил их. Суть уловил - в зависимости от того что выдает $_SERVER['REQUEST_URI'] подключаю соответствующий файл.

Пытался реализовать ту же аналогию на своем сайте - не работает. Вот код который я написал специально для этого вопроса: 1).htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

2)index.php

<?php
    $path = explode('/', $_SERVER['REQUEST_URI']);
    $page = $path[1];
    switch($page) {
        case '/':
            include "layout.php";
            break;
        case 'contacts':
            include "contacts.php";
            break;
        case 'link':
            include "link.php";
            break;
    }

3)contacts.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <a href="/">main</a>
        <a href="/contacts">contacts</a>
        <a href="/link">link</a>
        <h1>contacts</h1>
        <h1><?= var_dump($_SERVER) ?></h1>
    </body>
</html>

4)layout.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <a href="/">main</a>
        <a href="/contacts">contacts</a>
        <a href="/link">link</a>
        <h1><?= var_dump($_SERVER) ?></h1>
        <h1><?= var_dump($page) ?></h1>
    </body>
</html>

5)link.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <a href="/">main</a>
        <a href="/contacts">contacts</a>
        <a href="/link">link</a>
        <h1>link</h1>
        <h1><?= var_dump($_SERVER) ?></h1>
    </body>
</html>

Проще привести пример уже некуда - но даже тут аналогия не работает. Подскажите где может быть ошибка или что еще нужно сделать чтобы эта аналогия работала правильно?????

При запуске всеработает прекрасно и ссылка main в том числе, но стоит мне нажать на любую из двух других ссылок - хоть в адресной строке и появляется http://test/contacts, которая по идее должна разбиться на куски и выдать в итоге после обработки нужную страницу - я все равно получаю ошибку 404.

Крик души уже, заранее спасибо)

  • Дык, воспользуйся отладкой, посмотри пошагово что в переменной, что прилетает, куда программа идёт. Может там ещё одного слэша не хватает. А отладка под рукой и всё можно проверить – Алексей Шиманский Nov 24 '22 at 10:53
  • вобщето странно, что main работает, вы не должны получать в page слэш после explode – splash58 Nov 24 '22 at 10:55
  • @АлексейШиманский Я ведь пишу код в VSCode и отладка там только на сам код php распространяется – Reiji Akkerman Nov 24 '22 at 10:57
  • выведите path и page для начала - убедитесь, что хоть туда попадаете – splash58 Nov 24 '22 at 10:58
  • @ReijiAkkerman "отладка там только на сам код php распространяется" --- Ну так тебе и нужно дебажить PHP код ¯\(ツ)/¯ ты же в PHP маршрут строишь, правильно? – Алексей Шиманский Nov 24 '22 at 10:59
  • @АлексейШиманский Но в консоли переменная $_SERVER['REQUEST_URI'] выдает пустые значения так как не подключена к apache. Конкретно в данном случае при запуске переменная $_SERVER['REQUEST_URI'] = "" – Reiji Akkerman Nov 24 '22 at 11:03
  • @ReijiAkkerman во-первых: почему ты перевёл вопрос о консоли, если ты физически в браузере сейчас тыкаешь и у тебя пробелмы сейчас конкретно именно с этим? во-вторых: про консоль тебе мы говорили в прошлом вопросе)) и тогда вообще не ясно почему ты ждёшь текущий что код будет работать)) – Алексей Шиманский Nov 24 '22 at 11:05
  • @АлексейШиманский да я помню))) но как отлаживать код php в браузере если его консоль расчитана на JavaScript? Проще говоря - как я могу пошагово пройтись по коду php в браузере?? Что для этого мне нужно??? – Reiji Akkerman Nov 24 '22 at 11:08
  • 1
    В браузере - ничего. Все настройки отладки делаются на сервере. Когда браузер запрашивает страницу, он отсылает запрос на сервер, который в свою очередь будет обращаться к index.php или куда настроено. Т.е. достаточно поставить брейкпойнт и перезагрузить страницу (при этом настройки отладки надо будет делать как отладку приложения, а не страницы/скрипта) – Алексей Шиманский Nov 24 '22 at 11:13
  • @АлексейШиманский Все настройки отладки делаются на сервере. Когда браузер запрашивает страницу, он отсылает запрос на сервер, который в свою очередь будет обращаться к index.php или куда настроено. Т.е. достаточно поставить брейкпойнт и перезагрузить страницу (при этом настройки отладки надо будет делать как отладку приложения, а не страницы/скрипта) - можете по подробнее рассказать??? Вроде нашел нужную страницу доков но не знаю она ли и где я должен ставить брейкпоинты тоже не совсем понял(в браузере где-то или в VSCode?) https://httpd.apache.org/dev/debugging.html – Reiji Akkerman Nov 24 '22 at 11:42
  • 1
    см. в ответе дубликате. там написаны настройки сервера и что нужно смотреть. Как настраивается ВС студия - не подскажу........если уж не debugging, то хотя бы дедовским способом посмотреть что в переменных можно.....но отладку осваивать - 100% – Алексей Шиманский Nov 24 '22 at 11:44

0 Answers0