@esartium

Как получить часть URI, которая идёт после основного домена?

Пишу API на PHP.

Есть файл functions.php с функциями и основной файл index.php, где эти функции вызываются.

Код файла index.php:

<?php
require_once './functions.php';

header('Access-Control-Allow-Origin: http://localhost:3000');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Methods: *');
header('Content-type: application/json');

$conn = mysqli_connect("localhost", "root", "root", "vk_may20");
if($conn->connect_error) {
    die("Ошибка соединения: " . $conn->connect_error);
}

$type = $_GET['q'];
$params = explode('/', $type);

$typeMain = $params[0];
if (count($params) > 1) {
    $typeSecond = $params[1];
}

$method = $_SERVER['REQUEST_METHOD'];

    if ($typeMain === 'products') {
        switch ($method) {
            case 'GET':
                    switch($typeSecond) {
                        case 'getAll':
                            getAllProducts($conn);
                            break;
                    }
                break;
                
            case 'POST':
                $data = json_decode(file_get_contents('php://input'), true);
            
                if (isset($typeSecond)) {
                    switch($typeSecond) {
                        case 'add':
                            addProduct($conn, $data);
                            break;
                        }
                    }
                    break;
        }
    }


Здесь я с помощью вот этого фрагмента кода:

$type = $_GET['q'];
$params = explode('/', $type);

$typeMain = $params[0];
if (count($params) > 1) {
    $typeSecond = $params[1];
}


вытаскиваю тот кусок URI, который идёт после основного домена, после чего разбиваю его по слешу и полученные значения элементов массива присваиваю переменным, чтобы использовать их далее.

И здесь я получаю ошибку, которая вылезает при открытии в браузере того, что находится по адресу основного домена:

Undefined array key "q"

Если пытаюсь сделать запрос через Postman (Запрос на основной_домен/products/getAll), вижу это:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>


Проблема в том, что такой способ получения адреса, идущего после основного домена, я применяю не впервые, и почему-то раньше всё работало, что странно, ведь это буквально скопированный из предыдущего (нормально работающего) проекта код. Может, я не замечаю какой-то ошибки?
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Проблема в идиотских руководствах из прошлого века.
Ну и в том, что вы не понимаете даже их. И воображаете, будто $_GET['q'] - это некая волшебная переменная, которая содержит "URI".
Но содержит она его только если использовать .htaccess, причем с идиотской инструкцией, которая отправляет в РНР те данные, которые в нем и так есть.
В современном же мире наличие как файлика .htaccess, так и идиотских инструкций в нём, совсем не гарантировано.
И получать запрошенный URI надо нормальным способом, о котором написал AUser0 - через специально предназначенную для этого переменную.
if($conn->connect_error) {
    die("Ошибка соединения: " . $conn->connect_error);
}

- это еще один пример бессмысленного говнокода из прошлого века.

Ну и роутинг на вложенных свитчах вместо нормального - это совсем за гранью добра и зла.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Mylistryx
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
$_SERVER['REQUEST_URI']
Поскольку написали много, но ни разу не показали URI запроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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