[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Курсы PHP. Урок №2 от IRBIS-team
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
twin
Если ты тут впервые, прочитай это!!!

И так, начало у нас положено.
Продолжим-с.

Теперь у нас стоит задача выставить текущие и глобальные настройки сайта.
Основные и незыблимые две - кодировку и уровень ошибок, они прописаны первыми строчками индекса.

Но понадобятся еще и текущие настройки. Их будет много, и что бы не носиться по всему сайту в поисках вчерашнего дня, все настройки принято держать в одном месте, а именно в конфигурационном файле. Вот и мы не лыком шиты, сделаем такой в корне - config.php

А теперь нам нужно сделать так, что бы хитрый злой тать и разбойник не только не проник в конфигу, но и даже не узнал, что таковая имеется. Кстати, это касается и всех остальных файлов. Чем меньше информации у хакера, тем сложнее его никчемная, жалкая судьбинушка.

А теперь приступим к инициализации GET параметров. На первый взгляд все, что мы сейчас будем делать, может показаться сложным и излишним. Но это потом очень облегчит жизнь и сделает кодинг приятным занятием.

Что нам это дает.
1. Во первых, переменные, прописанные в массиве $GET, будут всегда определены.
2. Во вторых мы сможем очень легко их туда добавить.
3. В третьих. При обычной инициализации в последующем коде не ясно, откуда эти переменные. А так всегда ясно, что это гет-параметр.
4. Ну и самое главное - мы можем теперь одним движением включить или выключить ЧПУ.

Лирическое отступление. ЧПУ это конечно круто и красиво. Но во первых не все хостинги поддерживают это, а во вторых реврайт сам по себе штука довольно ресурсоемкая. А многим это не нравится. По этому мы не будем больше греть голову кому что нужно. Сами включат или выключат в конфиге.

Этот кусочек - начало так называемого роутера, то есть переключателя модулей.



Полный урок здесь

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
krasilich
Мой вариант:

switch ($GET['page'])
{
case '1':
{
include_once 'modules/module1.php';
break;
}
case '2':
{
include_once 'modules/module2.php';
break;
}
}



wacko.gif
twin
Почти угадал. Но.
1. Где комментарий? mad.gif
2. Не нужно в кейзах фигурных скобок. Путают они только.
3. Путь будет немного не таким.
4. Модуль в переменной будем обозначать строкой, а не цифрой. Это красивее и читабельнее.
5. Обязательно нужен дефолтный блок.
6. Не юзаем _once. Это медленнее и вообще незачем тут.
  


/**
* The switch of modules
* Переключатель модулей
*/

switch ($GET['page'])
{
case 'news':
include './modules/news/index.php';
break;

case 'gallery':
include './modules/gallery/index.php';
break;

default:
include './modules/news/index.php';
}


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
G3/SG1
     if(!defined('KEY'))
exit(file_get_contents('./404.html'));


Можно было б сделать и так:

     if(!defined('KEY')){
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('./404.html'));


Ведь же какой-нибудь "хакер" может HTTP-заголовки смотреть. Он увидит, что инклудится страница 404, а заголовок отсылается при этом не 404 Not Found, и поймет, в чем соль. Так что для надежности можно этот хедер добавлять.
twin
Хорошее дополнение. Принимается. smile.gif

Кстати, может кто нибудь придумает что делать с этим?
[X-Powered-By] => PHP/5.2.11

Потому что первый заголовок все равно смысл теряет, если идет этот))

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Гость_Nike
twin
не могли б Вы обьяснить, почему include, а не include_once?
На сколько осведамлён, include_once подгружает файл один раз и держит его в памяти, а include явно грузит его при каждом выполнении кода.

Или я в чём-то не прав?

Спасибо.
twin
G3/SG1
Спасибо, попробую.
Цитата
не могли б Вы обьяснить, почему include, а не include_once?
На сколько осведамлён, include_once подгружает файл один раз и держит его в памяти, а include явно грузит его при каждом выполнении кода.

Ошибочное мнение. При _once PHP каждый раз проверяет, есть ли такой файл в include_path А когда просто, то подключает сразу. По этому просто include быстрее.
Нам тут нечего боятся повторений, по этому лучше так.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Kerlyk
Цитата (bret @ 21.11.2009 - 09:47)
Кажется, я где-то натупил, но при включенном
Цитата
RewriteEngine    on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

при запросе несуществующей страницы происходит перенаправление на индекс, а не на 404.нтмл. При закоментированнии этих строк ошибка отрабатывается адекватно, но я так понимаю, что при этом отключается ЧПУ. (Денвер3 базовый)

Ещё не совсем понятно - мы говорим, что ЧПУ можно отключить/включить только в config.php, а складывается впечатление, что ковырять .htaccess тоже нужно. Объясни пожалуйста

Для свободной копипасты ссылок из примеров предлагаю всегда использовать один и тот же виртуальный хост - в данном случае test.den

Исходя из этого:
Цитата
Форум PHP программистов ► Команда PHPforum.ru ► PHP Курс №1 от Twina ► страница 1
По прежнему прошу о помощи


Отвечаю. При обращении к несуществующей странице вы все равно обращаетесь к index.php, т.к. РЕВРАЙТ включен. Что же мы тогда имеем?
К примеру, мы пишем
www.site.ru/dspofjsdfs.php
В итоге наш запрос из-за РЕВРАЙТА преобразуется в:
www.site.ru/index.php?route=dspofjsdfs.php
отсюда мы получаем
$GET['page']=dspofjsdfs.php;
Что из нашего switch-а
switch ($GET['page'])
{
case 'news':
include './modules/news/index.php';
break;

case 'gallery':
include './modules/gallery/index.php';
break;

default:
include './modules/news/index.php';
}

Выдает результат include './modules/news/index.php'; (дефолтный)
Следовательно, перенаправлений на 404.html быть просто не может при включенном реврайте.

По поводу включения/выключения ЧПУ.
При включенном в конфиге define 'MOD_REWRITE' наши ссылки выглядят так:
www.site.ru/arg1/arg2/arg3/arg4
Отключив в конфиге define 'MOD_REWRITE', мы получим такие ссылки:
www.site.ru/?page=arg1&id=arg2&page=arg3

Чем тебе не отключенный ЧПУ ? Хотя на самом деле Апач продолжает работать с РЕВРАЙТОМ, но наш движок его переделывает на этапе формирования ссылок и обработки их.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.