2009-05-22 4 views
0

Предполагая, что у вас есть только URL-адрес файла (размещенного на том же сервере, что и приложение), который был переписан с помощью правил mod_rewrite.Чтение переписанных файлов (mod_rewrite) из php

Как вы прочитали бы содержимое этого файла с PHP без прямого доступа к файлу .htaccess или правила перезаписи, используемые для создания исходного URL-адреса?

Я пытаюсь извлечь все теги скриптов, которые имеют атрибут «src», получить содержимое целевого файла, объединить все их в один большой файл javascript, минимизировать его и затем использовать для этого.

Проблема в том, что чтение всех файлов через file_get_contents, похоже, замедляет работу страницы, поэтому я рассматривал альтернативы и, если бы я мог как-то читать файлы непосредственно из файловой системы, не создавая других запросов в фоновом режиме, но для этого мне нужно будет найти путь к файлам, а некоторые будут доступны через URL-адреса, которые были переписаны.

+0

Пожалуйста, объясните ситуацию более подробно, как выглядят RewriteRules, переписываете ли вы файл fileA в файлB, и вам нужно, чтобы scriptC мог читать содержимое файлаA? – duckyflip

+0

Используйте кеш вместо генерации содержимого файла для каждого запроса. – Gumbo

+0

Это кеш, он не генерируется при каждом запросе. –

ответ

1

Вы не можете включить его, как если бы это был оригинальный PHP, только get the results самого исполнения PHP.

Если у вас есть обертки fopen, это так же просто, как использование require, include или file_get_contents на перезаписанном URL-адресе. В противном случае у вас есть fsockopen и curl в качестве параметров для создания HTTP-запроса для результата.

0

Как вы не можете сказать, как будет обрабатываться запрос, единственным возможным решением является отправка HTTP-запроса на этот сервер. Но это только даст вам результат этого файла/скрипта.

+0

Вопрос: «Как бы вы прочитали содержимое этого файла с помощью PHP». Этот способ не дает вам содержимого исходного файла. Это дает вам обработанную на стороне сервера возвращение чего-то не знаю, что именно ... – Jet

+0

Нет никакого способа, не зная точных правил. И даже с правилами вам, вероятно, понадобится совместимый эмулятор mod_rewrite, чтобы охватить все функции mod_rewrite, такие как внутренние перенаправления, поиск в контекстной файловой системе и т. Д. – Gumbo

+0

Это то, что я имею в виду. Единственный правильный ответ - реализовать правила перезаписи на php-стороне. – Jet

0

PHP лежит за apache и имеет доступ к файлу на уровне файловой системы, используя функции fopen-like или include-like и т. Д. Модуль Rewrite не будет работать для этого доступа, поскольку эти функции используют процедуры доступа к файлам ОС, но не apache.

Невозможно сделать это, но внедрить в php-скрипт те же правила перезаписи URL-адресов, что и в .htaccess, поскольку apache-переписывание и доступ к файлу php ничего не знают друг о друге и находятся на совершенно разных слоях веб-приложения.

ПОСЛЕ РЕДАКТИРОВАНИЯ: единственный способ - перенести свои правила перезаписи в php-скрипт и использовать доступ к файловой системе php после разбора URL-адресов через php (не переписывать модуль).