xxxLOGIATxxx
1.11.2012 - 23:04
Пишу свой первый движок, появилась необходимость эмулировать местоположение файла. Обьясню на примере: у меня примерно вот такая файловая структура:
index.php
files/index_2.php
По адресу:
http://www.название_сайта.com/index.php мы видим основную страницу сайта, а теперь сам вопрос:
Как сделать так, чтобы система видела файл index_2.php ВНЕ папки files?
Т.е., чтобы при переходе по адресу: http://www.название_сайта.com/index_2.php мы могли увидеть файл index_2.php?
Как, и вообще, возможно-ли, такое валидно организовать, без затрагивания .htaccess, аякса и фреймов? За помощь оставлю отзыв куда будет угодно.
P.S. этот маразм нужен для системы с шаблонизатором smarty, чтобы разложить модули по папкам и не сваливать все PHP файлы в одну кучу.
jetistyum
1.11.2012 - 23:23
Думаю рановато ты взялся за свой движок, но впрочем для познания программирования это совсем не плохо :)
что касается вопроса...
делаются подобные запросы через mod_rewrite апачевский, в случае если реального файла не существует, то вебсервер передает строку запроса другому файлу,который уже проводит дальнейшую обработку действия... например сделаем такой вот .htaccess (положить надо в корень хоста, рядом с index.
php)
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule ^(.+)$ index.php?file=$1
тогда у тебя каждый раз, когда файла не существует в файловой системе,
например
http://www.название_сайта.com/index_2.phpбудет вызван скрипт
http://www.название_сайта.com/index.php?file=index_2.phpа уж index.
php должен уметь обрабатывать запрос, и подключать необходимые файлы.
UPD. немного подправил. Рабочесть не проверял.
xxxLOGIATxxx
1.11.2012 - 23:30
Цитата (jetistyum @ 1.11.2012 - 19:23) |
Думаю рановато ты взялся за свой движок, но впрочем для познания программирования это совсем не плохо
что касается вопроса... делаются подобные запросы через mod_rewrite апачевский, в случае если реального файла не существует, то вебсервер передает строку запроса другому файлу,который уже проводит дальнейшую обработку действия... например сделаем такой вот .htaccess (положить надо в корень хоста, рядом с index.php)
RewriteEngine on
# if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php RewriteRule ^(.+) index.php?file=$1
тогда у тебя каждый раз, когда файла не существует в файловой системе, например http://www.название_сайта.com/index_2.php будет вызван скрипт http://www.название_сайта.com/index.php?file=index_2.php
а уж index.php должен уметь обрабатывать запрос, и подключать необходимые файлы. |
Этот способ мне знаком, я логически всё себе так и представлял, просто проблема в том, что нужно будет вручную прописывать огромное количество динамических файлов, которые будут меняться, добавляться, удаляться и т.д.
У меня есть вариант сделать всё посредством аякса, тупо импортировать в страницу файлы из папок при клике на ссылку и всё будет валидно отображаться, но мне хочется написать это на чистом PHP, чтобы не загрязнять код.
lans8097
1.11.2012 - 23:33
зачем использовать такой древеий метод? ???
куда удобнее все данные обробатывать через index.php
xxxLOGIATxxx
2.11.2012 - 00:03
Цитата (lans8097 @ 1.11.2012 - 19:33) |
зачем использовать такой древеий метод? ??? куда удобнее все данные обробатывать через index.php |
Насчёт удобства, согласен, вот только сама реализация обработчика мне пока что с трудом представляется. Вариантов может быть много, мне хотя бы один короткий пример для ориентира, а дальше я уже всё переделаю под себя. Ну или совет, куда копать в документации PHP. Как вариант, в хидере можно импортировать специальный PHP-класс с выборкой файлов из определённых папок и затем уже их обработать, но снова проблема — реализация, не знаю как эмулировать адреса файлов в корень.
C .htaccess не хочу работать, уж лучше ajax.
lans8097
2.11.2012 - 00:11
Цитата (xxxLOGIATxxx @ 1.11.2012 - 20:03) |
Цитата (lans8097 @ 1.11.2012 - 19:33) | зачем использовать такой древеий метод? ??? куда удобнее все данные обробатывать через index.php |
Насчёт удобства, согласен, вот только сама реализация обработчика мне пока что с трудом представляется. Вариантов может быть много, мне хотя бы один короткий пример для ориентира, а дальше я уже всё переделаю под себя. Ну или совет, куда копать в документации PHP. Как вариант, в хидере можно импортировать специальный PHP-класс с выборкой файлов из определённых папок и затем уже их обработать, но снова проблема — реализация, не знаю как эмулировать адреса файлов в корень.
C .htaccess не хочу работать, уж лучше ajax.
|
без. htaacesa далеко не уйдеш
даи без цпу уже не гоже
а вобще скачай DLE и посмотри как он устроен
xxxLOGIATxxx
2.11.2012 - 00:32
Цитата (lans8097 @ 1.11.2012 - 20:11) |
даи без цпу уже не гоже а вобще скачай DLE и посмотри как он устроен |
Ну чпу это же совсем другое дело, сравнил )) Просто зачем лишний раз насиловать .htaccess, если можно реализовать на PHP, я имел ввиду, что не буду реализовывать конкретно вышепоставленный вопрос на нём, а ссылками конечно же займусь, но чуть позже
DLE я очень хорошо знаю, но там же система на аяксе, а я пытаюсь без него шаманить, написать всё на классическом PHP + Smarty, в который позже можно будет внедрить хоть ajax, хоть json, да что угодно
Начинаю приходить к выводу, что аякс станет лучшим вариантом для реализации.
xxxLOGIATxxx
2.11.2012 - 03:39
jetistyum, почитал, подумал и немного понял. При переходе по ссылке на файл которого нет в системе, происходит переадресация на index.
php, который, в свою очередь, получает переменную(ые) с (допустим) названием файла. Затем происходит обработка и скрипт (снова допустим) include`ит нужный нам файл, так?
Способ малёк противоречит структуре сайта, но спасибо за информацию, опыт лишним не бывает!
Надо будет тщательно всё обмозговать
lans8097
2.11.2012 - 05:12
Цитата (xxxLOGIATxxx @ 1.11.2012 - 20:32) |
Цитата (lans8097 @ 1.11.2012 - 20:11) | даи без цпу уже не гоже а вобще скачай DLE и посмотри как он устроен |
Ну чпу это же совсем другое дело, сравнил )) Просто зачем лишний раз насиловать .htaccess, если можно реализовать на PHP, я имел ввиду, что не буду реализовывать конкретно вышепоставленный вопрос на нём, а ссылками конечно же займусь, но чуть позже
DLE я очень хорошо знаю, но там же система на аяксе, а я пытаюсь без него шаманить, написать всё на классическом PHP + Smarty, в который позже можно будет внедрить хоть ajax, хоть json, да что угодно
Начинаю приходить к выводу, что аякс станет лучшим вариантом для реализации.
|
Ну а что тебе мешает сказать DLE без AJAX ? если не ошибаюсь то это 6 или 7 версия
На щёт смарти пфффф нафиг он нужен ? лучше свой шаблонизатор написать под свои нужды я вон написал свой и не знаю проблем )).
Что надо для того чтобы написать свой шаблонизатор
1 Базовые знания ООП
2 Смекалка
3 простые регулярные ворожения
4 немного терпения
И всё )
sergeiss
2.11.2012 - 11:11
Цитата (xxxLOGIATxxx @ 1.11.2012 - 23:04) |
Как, и вообще, возможно-ли, такое валидно организовать, без затрагивания .htaccess, аякса и фреймов? |
Легко и просто
Прописываем в .htaccess одну-единственную (для данной цели) строку, которая говорит, что в случае отсутствия скрипта вызвать missing.
php (или как угодно по-другому его назови).
Внутри missing.
php смотрим, что было вызвано. Анализируем, что делать. Если динамичность появления/исчезновения файлов "большая", т.е. они часто появляются/удаляются, то тогда используем БД для хранения связки вызываемого имени файла и реального имени файла. Если динамичность не очень большая и спиской файлов не такой и большой, то можно хранить эту связку в простом файле.
При этом можно легко организовать очень красивые ЧПУ. Например,
http://имя_сайта.ru/eto-pervoe-objavlenie-o-prodaje-doma
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
xxxLOGIATxxx
3.11.2012 - 00:17
А есть возможность искуственно поднять определённый каталог на уровень выше? Чтобы PHP скрипты видели путь в физическом виде?
Т.е, чтобы файлы из папки files были видны системе в корне?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.