Routing на сайте

will_get_it

Новичок
Добрый день. дали с сайтом разобраться. не могу понять как происходит адресация на нем. он на голом пхп. все идет через index.php и в самом начале там вот так:
PHP:
$mode = $_GET['mode'];
и я никак не могу вкупить, откуда там GET появляется, потому что все ссылки в коде вида
PHP:
<a href="/news/">Новости</a>
, то есть чистые, без гет-параметров.

В общем, я тупо не могу запилить новую страницу туда.
 

will_get_it

Новичок
спасибо! зачем ж так изгаляться.. для каждый ссылки свое правило:(
 

vasinsky

Новичок
все идет через index.php и в самом начале там вот так:
PHP:
$mode = $_GET['mode'];
я бы повнимательней глянул бы остальной код на вашем месте))
в случае отсутствия $_GET['mode'] - будет нотис, который наверника спрятан за error_reporting(0)

для начала я бы посоветовал переписать эту строку на

Код:
$mode = isset($_GET['mode']) ? $_GET['mode'] : 'дефолтовое_значение';
 

AmdY

Пью пиво
Команда форума
Ну, раз мне тыкать в нос своей репутацией начали, то и здесь отпишусь.

error_reporting(0) - это уровень вывода ошибок, они не показываются из-за переменной php.ini display_errors, которая по дефолту Off, а ошибки в нормальном режиме пишутся в лог.
К тому же здесь может не быть ошибки, так как переменная задаётся реврайтом и всегда есть. (?mode=$1)
isset проверяет переменную на null, правильнее искать с помощью array_key_exists('mode', $_GET)

Ну и главное - ответ есть в первом же посте от Andkorol
 

vasinsky

Новичок
что бы у вас не было написано в .htacess

если вы обратитесь к странице site.com/index.php

в коде которой будет

PHP:
error_reporting(-1);

echo $_GET['any'];
и если ошибки не отключены более нигде - вы 100% получите нотис - т.к. фактически элемента any в $_GET нету

я не казал что это ошибка - это предупреждение, скрипт не остановиться - но посетителям будет не приятно

правильнее искать с помощью
я знаком с други утверждением - что решений конкретной задачи может быть несколько - и все они могут быть правильными

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

hell0w0rd

Продвинутый новичок
vasinsky, при чем тут оптимизация??
PHP:
$a = ['a' => null];
var_dump(isset($a['a']), array_key_exists('a', $a));
выполни и увидишь разницу

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

vasinsky

Новичок
вы мой код запустили?

вы инициализировали массив
$a = ['a' => null];

потом проверяете.



оптимизация причём? ну давайте будем работать с ассоц. массивами с for(), а не с foreach
рано или поздно программист задумывается об оптимальностью своего кода, над его ресурсоёмкостью или избыточности - разве нет?

так может с самого начала помогать развивать эти моменты?
 

hell0w0rd

Продвинутый новичок
vasinsky, какой ваш код? isset дает false на значении по ключу, значение которого - null. Про оптимизацию, извините, херню какую-то несете, выхожу из треда, не обсуждение, а демагогия какая-то
 

vasinsky

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

vasinsky

Новичок
блин, а какой смысл тестит с отключенным выводом ошибок??

я же писал выше

и если ошибки не отключены более нигде
давайте будем писать тонны логов.

ещё можно за @ прятаться, и ваще забыть про нотисы.
 

AmdY

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

vasinsky

Новичок
действ-но - проверил с htacess - нотиса нет.
пардоне. ошибки признавать умеем.

чё меня пугать) я сам кого хошь напугаю.
 
Сверху