[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Эмуляция местоположения файла
xxxLOGIATxxx
Пишу свой первый движок, появилась необходимость эмулировать местоположение файла. Обьясню на примере: у меня примерно вот такая файловая структура:
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
Думаю рановато ты взялся за свой движок, но впрочем для познания программирования это совсем не плохо :)

что касается вопроса...
делаются подобные запросы через 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
Цитата (jetistyum @ 1.11.2012 - 19:23)
Думаю рановато ты взялся за свой движок, но впрочем для познания программирования это совсем не плохо smile.gif

что касается вопроса...
делаются подобные запросы через 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
зачем использовать такой древеий метод? ???
куда удобнее все данные обробатывать через index.php
xxxLOGIATxxx
Цитата (lans8097 @ 1.11.2012 - 19:33)
зачем использовать такой древеий метод? ???
куда удобнее все данные обробатывать через index.php

Насчёт удобства, согласен, вот только сама реализация обработчика мне пока что с трудом представляется. Вариантов может быть много, мне хотя бы один короткий пример для ориентира, а дальше я уже всё переделаю под себя. Ну или совет, куда копать в документации PHP. Как вариант, в хидере можно импортировать специальный PHP-класс с выборкой файлов из определённых папок и затем уже их обработать, но снова проблема — реализация, не знаю как эмулировать адреса файлов в корень.

C .htaccess не хочу работать, уж лучше ajax.
lans8097
Цитата (xxxLOGIATxxx @ 1.11.2012 - 20:03)
Цитата (lans8097 @ 1.11.2012 - 19:33)
зачем использовать такой древеий метод? ???
куда удобнее все данные обробатывать через  index.php

Насчёт удобства, согласен, вот только сама реализация обработчика мне пока что с трудом представляется. Вариантов может быть много, мне хотя бы один короткий пример для ориентира, а дальше я уже всё переделаю под себя. Ну или совет, куда копать в документации PHP. Как вариант, в хидере можно импортировать специальный PHP-класс с выборкой файлов из определённых папок и затем уже их обработать, но снова проблема — реализация, не знаю как эмулировать адреса файлов в корень.

C .htaccess не хочу работать, уж лучше ajax.

без. htaacesa далеко не уйдеш
даи без цпу уже не гоже biggrin.gif
а вобще скачай DLE и посмотри как он устроен
xxxLOGIATxxx
Цитата (lans8097 @ 1.11.2012 - 20:11)
даи без цпу уже не гоже biggrin.gif
а вобще скачай DLE и посмотри как он устроен

Ну чпу это же совсем другое дело, сравнил )) Просто зачем лишний раз насиловать .htaccess, если можно реализовать на PHP, я имел ввиду, что не буду реализовывать конкретно вышепоставленный вопрос на нём, а ссылками конечно же займусь, но чуть позже

DLE я очень хорошо знаю, но там же система на аяксе, а я пытаюсь без него шаманить, написать всё на классическом PHP + Smarty, в который позже можно будет внедрить хоть ajax, хоть json, да что угодно

Начинаю приходить к выводу, что аякс станет лучшим вариантом для реализации.
xxxLOGIATxxx
jetistyum, почитал, подумал и немного понял. При переходе по ссылке на файл которого нет в системе, происходит переадресация на index.php, который, в свою очередь, получает переменную(ые) с (допустим) названием файла. Затем происходит обработка и скрипт (снова допустим) include`ит нужный нам файл, так?

Способ малёк противоречит структуре сайта, но спасибо за информацию, опыт лишним не бывает! smile.gif

Надо будет тщательно всё обмозговать
lans8097
Цитата (xxxLOGIATxxx @ 1.11.2012 - 20:32)
Цитата (lans8097 @ 1.11.2012 - 20:11)
даи без цпу уже не гоже  biggrin.gif
а вобще скачай DLE  и посмотри как он устроен

Ну чпу это же совсем другое дело, сравнил )) Просто зачем лишний раз насиловать .htaccess, если можно реализовать на PHP, я имел ввиду, что не буду реализовывать конкретно вышепоставленный вопрос на нём, а ссылками конечно же займусь, но чуть позже

DLE я очень хорошо знаю, но там же система на аяксе, а я пытаюсь без него шаманить, написать всё на классическом PHP + Smarty, в который позже можно будет внедрить хоть ajax, хоть json, да что угодно

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

Ну а что тебе мешает сказать DLE без AJAX ? если не ошибаюсь то это 6 или 7 версия
На щёт смарти пфффф нафиг он нужен ? лучше свой шаблонизатор написать под свои нужды я вон написал свой и не знаю проблем )).
Что надо для того чтобы написать свой шаблонизатор
1 Базовые знания ООП
2 Смекалка
3 простые регулярные ворожения
4 немного терпения
И всё )
sergeiss
Цитата (xxxLOGIATxxx @ 1.11.2012 - 23:04)
Как, и вообще, возможно-ли, такое валидно организовать, без затрагивания .htaccess, аякса и фреймов?

Легко и просто smile.gif Прописываем в .htaccess одну-единственную (для данной цели) строку, которая говорит, что в случае отсутствия скрипта вызвать missing.php (или как угодно по-другому его назови).
Внутри missing.php смотрим, что было вызвано. Анализируем, что делать. Если динамичность появления/исчезновения файлов "большая", т.е. они часто появляются/удаляются, то тогда используем БД для хранения связки вызываемого имени файла и реального имени файла. Если динамичность не очень большая и спиской файлов не такой и большой, то можно хранить эту связку в простом файле.
При этом можно легко организовать очень красивые ЧПУ. Например, http://имя_сайта.ru/eto-pervoe-objavlenie-o-prodaje-doma

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
xxxLOGIATxxx
А есть возможность искуственно поднять определённый каталог на уровень выше? Чтобы PHP скрипты видели путь в физическом виде?

Т.е, чтобы файлы из папки files были видны системе в корне?
Быстрый ответ:

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