Как найти место по умолчанию при некорректном значении GET с использованием заголовков

Я пытаюсь найти свой заголовок php в определенном месте при получении значения GET, и если это значение неверно, оно найдет местоположение по умолчанию, такое как home.php

вот что я сделал до сих пор

<?php // Check which page is queried if(isset($_GET['page'])){ $got = $_GET['page']; } else { $got = 'home'; } // Now goto that location if(header('Location: '.$got.'.php')){ header('Location: '.$got.'.php'); } else { header('Location: home.php'); } ?> 

Related of "Как найти место по умолчанию при некорректном значении GET с использованием заголовков"

Вероятно, вы ищете функцию file_exists ().

Вы бы сделали что-то подобное;

 $got = 'home'; if(isset($_GET['page'])) { if(file_exists($_GET['page'].".php")) { $got = $_GET['page']; } } header('Location: '.$got.'.php'); exit; 

Редактировать. Вам будет лучше, указав страницы, которые вы позволите пользователям увидеть:

 $got = 'home'; $whitelist = array('contact', 'about', 'blog', ...); // could come from your database if(isset($_GET['page'])) { if(file_exists($_GET['page'].".php") && in_array($_GET['page'], $whitelist)) { $got = $_GET['page']; } } header('Location: '.$got.'.php'); exit; 

Это гарантирует доступ только к просмотру, который вы разрешаете.

 if (file_exists( $got . '.php') { header('Location: '.$got.'.php'); } else { header('Location: home.php'); } 

Но лучше создать белый список доступных страниц, потому что такой код будет уязвим для инъекций заголовков

Проверьте, существует ли файл

 if (file_exists($got . ".php") { header('Location: ...'); exit; } else { header('Location: ...'); exit; } 

Очевидно, вам нужно убедиться, что ранее не были отправлены заголовки.

Может быть, вам нужно использовать file_exists ?

попробуйте это, он ищет все ваши php-страницы в каталоге, который вы белеете (динамически), затем сравнивает его с запросом get, чтобы увидеть, находится ли эта страница в вашем каталоге страниц. если он затем загружает его, он загружает ваш home.php

 $page = array(); $it = DirectoryIterator($dir); foreach ($it as $page) { $pages[] = $page; } if (isset($_GET['page']) && in_array($_GET['page'], $pages) header("Location: " . $pages[$_GET] . ".php"); // or require_once $page . '.php'; else header("Location: home.php"); // or require_once "home.php"; 

Используйте curl, чтобы проверить, возвращает ли запрос HTTP 200

 $http = curl_init($url); // do your curl thing here $result = curl_exec($http); $http_status = curl_getinfo($http, CURLINFO_HTTP_CODE); if($http_status != 200) { $url = "/home.php"; } header('Location: '.$url);