Мне интересно, возможно ли создать пользовательскую обработку типов файлов для Apache, которая будет обрабатываться файлом PHP.
То, что я пытаюсь выполнить, - создать своеобразное расширение .phps
для просмотра кода в браузере.
Я использую CodeMirror для отображения кода, но я хотел бы, чтобы этот процесс был автоматизирован, так как я просто изменяю расширение .php
на .phps
, а другой .php
файл будет обрабатывать этот файл .phps
чтобы я мог впрыснуть исходный код этого файла .phps
в HTML файл с CodeMirror.
Надеюсь, моя цель ясна, мне просто интересно, возможно ли это.
Редактировать:
Чтобы уточнить, я хочу настроить это правило для работы с apache.conf, что означает, что он будет работать на всех виртуальных узлах и т.д., А не из файла .htaccess
, который должен быть в каждом каталоге на сервере.
Я думаю, что это должно работать с FilesMatch
в apache.conf, прямо сейчас это то, с чем я занимаюсь:
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php
RewriteEngine on
RewriteRule ^(.*)$ /tools/code/?file=$1 [L]
</FilesMatch>
Однако я получаю ошибку 400 Bad Request
. Я хотел бы построить что-то вроде этого, чтобы Apache обрабатывал файлы .phps
изнутри этой конфигурации и не должен использовать файлы .htaccess
в каждом каталоге на сервере.
ОК, я понял это, вот что я сделал:
В apache.conf
я добавил следующее:
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php
RewriteEngine On
RewriteRule ^(.*)$ /tools/code/index.php [QSA,L]
</FilesMatch>
каталог /tools/
добавлен как псевдоним
Alias /tools "C:/Web/httpdocs/tools/"
Этого достаточно для использования определенного файла index.php
как "обработчика".
Я использовал редактор Ace для отображения кода. Чтобы загрузить файл .phps
для просмотра в редакторе, я добавил в файл редактора невидимый элемент <textarea>
с исходным файлом, загруженным в него:
<textarea id="code" style="display:none;">
<?=file_get_contents(ltrim($_SERVER['DOCUMENT_ROOT'], '/').$_SERVER['REQUEST_URI']);?>
</textarea>
Я изменил код инициализации в соответствии с моими потребностями:
<script>
var editor = ace.edit('editor');
editor.session.setMode('ace/mode/php');
editor.setTheme('ace/theme/monokai');
editor.setValue(document.getElementById('code').value);
editor.gotoLine(1);
editor.setShowPrintMargin(false);
editor.setReadOnly(true);
</script>
И voila, у меня есть более продвинутый способ просмотра файлов .phps
. Спасибо, что помогли мне подняться.
Это, безусловно, возможно, просто взгляните на документацию. Способ работы обработчиков типов файлов хорошо объяснен, посмотрите на команду AddType
. Однако сомнительно, если это хороший подход к тому, что вы называете своей целью, визуализировать исходный код php. Не было бы намного проще и элегантнее использовать переписывание, чтобы передать запрошенный файл сценарию обработчика, который может "публиковать" его по своему усмотрению?
Например, вы можете использовать следующие URL-адреса и внутренне переписать их:
/source/path/to/file.php => /path/to/handler.php?source=%2Fpath%2Fto%2Ffile.php
Это можно сделать с помощью модуля перезаписи apache или nginx с использованием общего сценария обработчика:
RewriteEngine on
RewriteRule ^/source/(.)*$ /path/to/handler.php?source=$1 [L,B]
Таким образом, вам не нужно определять какой-либо локальный тип файла и вы можете указать файлы php, которые будут отображаться так же, как они: php файлы. Я имею в виду, что php файл - это php файл. Расширение имени файла должно отражать тип содержимого, содержащегося в файле, а не как его следует обрабатывать. Это означало бы, что вы смешиваете отдельные уровни логики.
Это гораздо более прозрачно для пользователей, на мой взгляд. Кроме того, он позволяет более мелкозернистый контроль над тем, какие URL-адреса переписывать и, возможно, некоторые дополнительные аргументы для указания, где это необходимо.
Две заметки для вышеупомянутого правила перезаписи:
AllowEncodedSlashes
к on
, в зависимости от существующей установки сервера.htaccess
(вам нужно удалить ведущие косые черты, в зависимости от того, где вы размещаете этот файл). Но в целом такие файлы следует избегать по мере возможности: они, как известно, подвержены ошибкам, трудно отлаживаются, иногда вызывают неожиданные побочные эффекты и действительно замедляют работу сервера. Поэтому, если у вас есть доступ к конфигурации хоста серверов, вы должны предпочесть размещение таких правил там..htaccess
. Вы можете просто создать файл с правилами и включить его в любой хост, на котором вы хотите использовать этот сервис. Легко, чисто и прозрачно. Но, конечно же, есть и другие решения.
Добавьте следующий код в httpd.conf
или vhost.conf
и перезапустите сервер Apache
<IfModule mime_module>
AddType application/x-httpd-php .phps
</IfModule>
Или вы можете использовать mod_rewrite
.phps
обрабатываются этим конкретным файлом в Apache на сервере по умолчанию, без необходимости.phps
сложный URL-адрес для просмотра этого файла или использования файла.htaccess
в каждом каталоге. Я хочу,.phps
файл.phps
просматривался. таким образом. Для меня это имеет больше смысла, чем просто использование предоставленной функцииapplication/x-httpd-php-source
илиhighlight_file()
поскольку возможности использования редактора / средства просмотра кода, такого как редактор Ace , намного больше, чем просто способ просмотра по умолчанию.phps
файлы