【问题标题】:php-fpm is parsing .phps instead of showing code (hilighted)php-fpm 正在解析 .php 而不是显示代码(突出显示)
【发布时间】:2012-06-18 14:35:03
【问题描述】:

目前我们正在运行 nginx + php-fpm,但显示 .phps 文件时出现问题。

如果我将 .phps 添加到位置规则,那么它将开始下载源代码。

在 apache 中你通常会这样做 AddType application/x-httpd-php-source .phps

如何在 php-fpm 中解决这个问题?

这是配置的内容:

location ~ \.(txt|php|html)$ {
    include server_fpm;
}

server_fpm 包含

include fastcgi_params;
fastcgi_pass backend;

fastcgi_params 包含

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

#Custom parameters

#Legacy apache forward FCGI params
fastcgi_param HTTP_X_REAL_IP $remote_addr;
fastcgi_param HTTP_X_NGINX_VERSION $nginx_version;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

fastcgi_connect_timeout         60;
fastcgi_send_timeout            180;
fastcgi_read_timeout            180;
fastcgi_buffer_size             128k;
fastcgi_buffers         4       256k;
fastcgi_busy_buffers_size       256k;
fastcgi_temp_file_write_size    256k;
fastcgi_intercept_errors        on;
fastcgi_ignore_client_abort     off;

fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;

【问题讨论】:

    标签: nginx php


    【解决方案1】:
    location ~ \.phps$ {
        fastcgi_pass backend;
        fastcgi_param  DOCUMENT_ROOT    $document_root;
        fastcgi_param  SCRIPT_NAME      $uri;
        fastcgi_param  SCRIPT_FILENAME  /path/to/hightlight_source.php;
    }
    

    hightlight_source.php:

    <?php highlight_file($_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_NAME']); ?>
    

    【讨论】:

    • 嗯,一个肮脏的修复,但仍然合理。所以 php-fpm 不理解 .phps 文件返回高亮代码?
    • 是的。但是里面的 mod_php 和 highlight_file() 函数做的事情是一样的。可能 php_fpm 作者只是不想添加这个奇怪的功能。
    • 其实算是一个功能,你不局限于单行高亮,你可以自己设计。
    【解决方案2】:
    location ~ \.phps$ {
        try_files $uri =404;
        fastcgi_pass backend;
        fastcgi_param   DOCUMENT_ROOT    $document_root;
        fastcgi_param   SCRIPT_NAME      $uri;
        fastcgi_param   SCRIPT_FILENAME  /path/to/phps.php;
        include fastcgi_params;
    }
    

    然后是 phps.php(在 dir o+x / mod 664 中)

    <?php
    error_reporting(0);
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title><?php echo basename($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME']);?></title>
    </head>
    <body>
    <?php highlight_file($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME']); ?>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2016-01-29
      • 2018-08-28
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多