Php 在不带扩展名的浏览器中查看图像

Php 在不带扩展名的浏览器中查看图像,php,apache,.htaccess,Php,Apache,.htaccess,我的web应用程序中有一个目录,我想在其中保存所有用户配置文件图片。用户可以上传所有类型的图像(png、jpg、gif)。但是,我希望图像URL是友好的,例如,其中的文件是300用户名,但没有扩展名。我考虑在用户上传时删除扩展,并使用PHP控制器添加: header('Content-Type: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png'); readfile('http://example.com/static

我的web应用程序中有一个目录,我想在其中保存所有用户配置文件图片。用户可以上传所有类型的图像(png、jpg、gif)。但是,我希望图像URL是友好的,例如,其中的文件是300用户名,但没有扩展名。我考虑在用户上传时删除扩展,并使用PHP控制器添加:

header('Content-Type: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png');
readfile('http://example.com/static/picture/300-username');

这很有效。但是,我想知道是否可以通过在picture目录中放置一个.htaccess文件来实现,该文件带有某种头,在该目录中读取的任何文件都将显示为picture。这可能吗?

首先,您的路径需要实际存在,否则我认为Apache无法为您做任何事情


但是,这里可能有一个解决方法,使用
重写规则
,保留扩展名(顺便说一句,我认为删除文件扩展名是不好的做法,特别是当它们不是纯文本文件时),并接受一个请求的文件,如
300 username
以重写为
300 username.jpg
首先,您的路径必须实际存在,否则我认为Apache无法为您做任何事情


但是,这里可能有一个解决方法,使用
重写规则
,保留扩展名(顺便说一句,我认为删除文件扩展名是不好的做法,特别是当它们不是纯文本文件时),并接受请求的文件(如
300 username
)以重写为
300 username.jpg

您不能像这样指定多个
内容类型。。您需要为提供的每个图像传递正确的标题:

<?php
    $user = '300-username';
    $picture = 'http://example.com/static/picture/' . $user;
    $info = getimagesize($picture);
    $fp = fopen($picture, "rb");
    if ($info && $fp) {
        header("Content-type: {$info['mime']}");
        fpassthru($fp);
        exit;
    } else {
        // error
    }
?>

您不能像那样指定多个
内容类型。。您需要为提供的每个图像传递正确的标题:

<?php
    $user = '300-username';
    $picture = 'http://example.com/static/picture/' . $user;
    $info = getimagesize($picture);
    $fp = fopen($picture, "rb");
    if ($info && $fp) {
        header("Content-type: {$info['mime']}");
        fpassthru($fp);
        exit;
    } else {
        // error
    }
?>

不要删除扩展,只需提供无扩展URI,如
/static/picture/300 username
。然后在.htaccess中添加一行:

Options +MultiViews

Apache将为您设置正确的内容类型。请参阅文档。

不要删除扩展,只需提供无扩展URI,如
/static/picture/300 username
。然后在.htaccess中添加一行:

Options +MultiViews

Apache将为您设置正确的内容类型。请参阅文档。

您是否将文件保存在没有任何文件扩展名的服务器上?实现这样的内容类型会有什么失败?它是有效的。。。我保存它时没有扩展名,因此我不必检测它是哪个扩展名。您是否将文件保存在服务器上而没有任何文件扩展名?实现这样的内容类型有什么坏处?它是有效的。。。我保存它时没有扩展名,因此我不必检测它是哪个扩展名。如果我保留扩展名,如何使用ModRewrite检测它是哪个扩展名?如果保留扩展名,如何使用ModRewrite检测它是哪个扩展名?太棒了!比我想象的还要好。太棒了!比我想象的还要好。