PHP автоматически "ПОЛУЧАЕТ" переменные

Я разрабатываю новый веб-сайт для своей компании и пытаюсь реализовать переключение навигации, которое я использовал на всех своих сайтах в прошлом.

<?php
switch($x) {

default:
include("inc/main.php");
break;

case "products":
include("inc/products.php");
break;

}
?>

По какой-то причине, когда я перехожу к index.php? X = products, ничего не происходит, он по-прежнему отображает inc / main.php, другими словами, он не обнаружил переменную X из URL-адреса. Это как-то связано с глобальными переменными?

Если это большой сайт, вам следует подумать об использовании такого фреймворка, как CodeIgniter - он сделает много такой работы за вас. Как говорится, велосипед не изобретать :)

user7094 03.11.2008 14:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
1
3 723
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Да, в вашей конфигурации PHP правильно отключил register_globals, потому что это невероятно небезопасно.

Просто поставьте:

$x = $_REQUEST['x']

вверху вашего скрипта.

Вы также можете использовать $_GET, если хотите, чтобы это работало только для метода HTTP GET. Я видел, как некоторые люди утверждали, что $_REQUEST чем-то небезопасен, но нет доказательств, подтверждающих это.

Лучше использовать $ _GET, а не $ _REQUEST ... $ _REQUEST не так плох, как register_globals, но все же дает неприятный запах. Он знает, что использует URL-адрес var и, по-видимому, не хочет, чтобы файлы cookie или параметры POST меняли его режим просмотра, поэтому ему следует использовать $ _GET, а не $ _REQUEST.

joelhardi 03.11.2008 14:46

Я также слышал, что это небезопасно, но потом я подумал, почему почти все веб-серверы или пакеты хостинга, за которые я когда-либо платил, включали их?

zuk1 03.11.2008 14:46

Чтобы быть более конкретным, чем "неприятный запах" (ограничение количества символов комментария SO), $ _REQUEST подвержен атакам XSS, поскольку файлы cookie могут быть установлены на стороне клиента.

joelhardi 03.11.2008 14:50

интересно - я забыл, что $ _REQUEST также включает файлы cookie. Однако в этом случае я не вижу никакого риска.

Alnitak 03.11.2008 14:54

@ zuk1, он был включен по умолчанию в PHP4, и от его включения зависело множество (плохих) приложений. PHP5 отключен по умолчанию, но некоторые хосты снова включают его для совместимости с (плохими) приложениями. Им легче сделать это, чем иметь дело с такими клиентами, как вы, спрашивая их, почему мои приложения перестали работать.

joelhardi 03.11.2008 14:54

@Alnitak, окей, я откопал доклад, который более красноречиво объясняет всевозможные атаки $ _REQUEST, чем я :) slideshare.net/ZendCon/…

joelhardi 03.11.2008 15:06

Вы должны использовать $ _GET для чтения этих переменных. Существует устаревшая функция под названием register_globals, но я бы определенно не советовал использовать ее, поскольку это потенциальный риск для безопасности.

Похоже, что все ваши предыдущие веб-хосты использовали register_globals, и ваш код полагается на это. Это параметр опасный, который был по праву удален в PHP 6.0! Вместо этого используйте switch($_GET['x']) {.

Вы можете использовать http://php.net/manual/es/function.extract.php для извлечения переменных, если хотите, но имейте в виду, что это позволяет любому пользователю устанавливать переменные с тем содержанием, которое они хотят в вашем скрипте, что делает его таким же небезопасным, как использование register_globals

Другие вопросы по теме