Задать вопрос
@kostian02

Php, изменение значений $_SERVER или все-таки лучше mod_rewrite и аналоги?

Насколько безопасно изменять массив $_SERVER в скрипте? А точнее REQUEST_URI, QUERY_STRING и им подобные.

Не могут ли разработчики php в дальнейшем сделать $_SERVER readonly, может кто изучал данный вопрос и есть информация. В офф доке я такой информации не увидел.



Надо сделать несколько рерайтов без редиректов, прозрачно для пользователя, точка входа в приложение одна, сервер apache. Изменяться адреса должны примерно по такому шаблону:

^item\.php\?id=(\d+) /base/item/$1

Но есть пара моментов:

1. Возможен уход от апача и соответственно переписывание рерайтов на nginx, lighttpd, etc

2. Я не очень силен в mod_rewrite, не все вещи могу делать, а при такой задаче насколько я поминаю еще возня дополнительная с кондишинами и флагами, с наскоку и часовому гуглению, сделать не вышло.



Просто через полчаса после переноса проекта на на новый движок, заказчик вспомнил о том что старые адреса надо сохранить. В используемом Yii штатными средствами роутинга такое не вышло. В срочном порядке сделал рерайт в php. Сейчас думаю как лучше переделать. Рад буду ответам и по php и по mod_rewrite.



Заранее спасибо.
  • Вопрос задан
  • 3368 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
DevMan
@DevMan
Вы сами написали, что точка входа у вас одна, так и рулите там как вам нужно. Зачем $_SERVER для этого менять?
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
taliban
@taliban
php программист
массив $_SERVER такой же массив в глобальной видимости как и, допустим, только что созданный массив $qwe = array(1,2,3) Его изменения ни на что не повлияют, кроме логики программы которую Вы же делаете.
Другое дело что если Вам нужно изменить этот массив, то Ваша логика не правильна. Сделайте оболочку над массивом и ей оперируйте.
Ответ написан
С изменения встроенных массивов нужно быть аккуратным. Легко получить трудно локализуемые баги из-за того, что некоторые функции (в частности фильтрации) работают не собственно с массивами $_SERVER, $_POST и т. п., а с внутренним представлением запроса, из которого массивы генерируются только при старте скрипта.
Ответ написан
Зачем завязываться на сервер?

$myuri = $_SERVER['REQUEST_URI'];
Ответ написан
zizop
@zizop
В Zend Framework, да и во многих других фреймворках, есть такое понятие, как объект запроса. Его вы можете менять, сколько душе угодно, и я думаю это правильный подход. На PHP уже не кодят глобальными переменными. Есть паттерны типа того же объекта запроса, регистра.
Ответ написан
@Jazzist
1. Не стоит ломать то, то работает
2. mod_rewite не напрягает
3. «переписывание» регулярки рерайтов для nginx не напрягает. Можно очень комфортно работать c nginx вообще без apache. К примеру, с PHP-CGI.
Ответ написан
Ваш ответ на вопрос

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

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