.phps в nginx/fpm

grigori

( ͡° ͜ʖ ͡°)
Команда форума
какую конфигурацию прописать в nginx, чтобы файлы .phps обрабатывались php как исходники показывались с подсветкой соответственно?
какой-то fastcgi_param ?
хочу показать код на своем сервере
 

MiksIr

miksir@home:~$
Что-то не уверен я, что в случае с fastcgi это возможно. В общем если ничего не получится, напиши просто файлик с highlight_file($filename) и в него все запросы
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
не понял, роль nginx сводится к копированию данных из http в fcgi и обратно, при чем тут mime_type, за который вообще другой модуль отвечает?

может, кто делал и может показать конфиг?
 

MiksIr

miksir@home:~$
Потому что в апач модуле все построено на миме, и mod_php принимает решение что показывать именно на его основе. Fastcgi совсем другой sapi и там этого вообще может не быть.
Так что, наверно, что-то вроде
Код:
location ^ \.phpc$ {
    fastcgi_pass   localhost:9000;
    fastcgi_param  SCRIPT_FILENAME  /..../hightlight.php;
    fastcgi_param  ORIGINAL_URI $fastcgi_script_name;
    fastcgi_param  QUERY_STRING     $query_string;
}
 

fixxxer

К.О.
Партнер клуба
Потому что в апач модуле все построено на миме, и mod_php принимает решение что показывать именно на его основе. Fastcgi совсем другой sapi и там этого вообще может не быть.
Так что, наверно, что-то вроде
Код:
location ^ \.phpc$ {
    fastcgi_pass   localhost:9000;
    fastcgi_param  SCRIPT_FILENAME  /..../hightlight.php;
    fastcgi_param  ORIGINAL_URI $fastcgi_script_name;
    fastcgi_param  QUERY_STRING     $query_string;
}
Угу.

В apache sapi есть такой код:
PHP:
#define PHP_MAGIC_TYPE "application/x-httpd-php"
#define PHP_SOURCE_MAGIC_TYPE "application/x-httpd-php-source"
....
    /* Determine if we need to parse the file or show the source */
    if (strncmp(r->handler, PHP_SOURCE_MAGIC_TYPE, sizeof(PHP_SOURCE_MAGIC_TYPE) - 1) == 0) {
        zend_syntax_highlighter_ini syntax_highlighter_ini;
        php_get_highlight_struct(&syntax_highlighter_ini);
        highlight_file((char *)r->filename, &syntax_highlighter_ini TSRMLS_CC);
    } else {
.......
В fpm sapi ничего подобного нет. Можно, конечно, сделать для fpm sapi патч (и вместо mime type юзать какую-то специальную переменную среды), но щас такого ничего нет.
 

tony2001

TeaM PHPClub
с fcgi, я так понимаю, это решалось через запуск отдельного инстанса fcgi с флагом -s, поскольку у cgi/fcgi нет mime type'ов, он получает только имя файла и др. параметры и конечное действие - оно одно.
для fpm как-то никогда не было необходимости.
насчет патча: добавлять нестандартные переменные в качестве флага - это не очень разумно имо.
 

fixxxer

К.О.
Партнер клуба
Криво, да, но других сколь-либо разумных вариантов я вообще не вижу. Не отдельный же пул поднимать под такую хрень.
 

tony2001

TeaM PHPClub
разумный вариант - добавить настройку в конфиг fpm и по определённому расширению файла (предположительно .phps) отдавать раскрашенный исходник, причем по дефолту это выключить.
 

fixxxer

К.О.
Партнер клуба
Ох... Тут fix_pathinfo может подкинуть сюрпризы (хотя по хорошему его вообще выкинуть бы).

Хотя можно, конечно, проверять уже после init_request_info, вроде тогда все ровно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
как все сложно
решение miksir-а через скрипт в 1 строку, в принципе, сойдет, спасибо
правда, включать его придется на каждый домен, но другого пути пока, похоже, нет
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Код:
        location ~ \.phps$ {
            fastcgi_pass   unix:/var/run/php-fcgi.sock;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/lib/php/hightlight_source.php;
        }
       # should go before if u have \.php rather then \.php$
        location ~ \.php { #
# cat /usr/local/lib/php/hightlight_source.php
PHP:
<?php highlight_file ($_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_NAME']);
 
Сверху