php如何提供文件而不是下载

php如何提供文件而不是下载,php,Php,下面的代码强制浏览器发出保存/打开文件()的提示,即使它是图像或pdf文件 我希望像往常一样打开图像,在浏览器中显示pdf文件。当然,浏览器不支持的其他文件,如zip、rar、doc、xls等,将启动“保存文件”对话框 编辑: 我的目的不是阻止客户端保存文件,当然他们可以保存,这是不可能的。我想以PHP文件的形式提供图像,比如main.PHP?file=randomcode(存储在数据库中),而不是/images/somefilename.jpg。我的代码强制客户端下载它,但我想显示它 head

下面的代码强制浏览器发出保存/打开文件()的提示,即使它是图像或pdf文件

我希望像往常一样打开图像,在浏览器中显示pdf文件。当然,浏览器不支持的其他文件,如zip、rar、doc、xls等,将启动“保存文件”对话框

编辑: 我的目的不是阻止客户端保存文件,当然他们可以保存,这是不可能的。我想以PHP文件的形式提供图像,比如main.PHP?file=randomcode(存储在数据库中),而不是/images/somefilename.jpg。我的代码强制客户端下载它,但我想显示它

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $filename . "." . $fileinfo["file_extension"] . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($file));
$fp = fopen($file, "r");
if ($fp) {
    while (!feof($fp)) {
        $cur_data = fread($fp, 1024);
        echo $cur_data;
    }
} else {
    echo "Error: Could not the read file.";
}

显然你知道文件扩展名,所以你可以:

if(in_array($fileinfo["file_extension"], array('jpg', 'png', 'gif')) {

    // set header for viewing the image

    $mime_type = $fileinfo["file_extension"];
    if($mime_type == 'jpg') {
        $mime_type = 'jpeg';
    }

    header('Content-Type: image/' . $mime_type);

}
else {
    // set headers for downloading the file
}

最终取决于客户端如何处理接收到的内容。您可以做的一件事是去掉
内容处置
标题:

header("Content-Disposition: attachment; filename=\"" . $filename . "." . $fileinfo["file_extension"] . "\";");
(或者至少有条件地删除它,具体取决于文件的特定因素。)此标头所做的是告诉客户机返回的内容是一个“文件”(您甚至可以为文件提供一个建议的名称),并且应该这样处理。HTTP没有“文件”的本机概念,因此此头文件的存在专门用于将某些内容标识为“文件”


通过不提供该头,您并不是在向客户机建议内容是一个文件。客户端可能仍然会推断它是一个文件并将其视为文件(您无法控制),但从您的角度来看,您所要做的就是返回内容本身。

如果内容类型设置为octate stream,则它将防御地传输该文件,这意味着用户将强制下载该文件。您必须相应地设置内容类型才能在浏览器中打开它

例如,如果类型为image,则

header("Content-Type: image/jpg");
header("Content-Type: image/png");
等等


如果是图像或pdf,则删除内容处置:header

能否请您给我举个例子,比如jpg的头文件JPEG文件的MIME类型是image/JPEG,而不是image/jpg。您在internet上放置的每件东西都会在到达web浏览器时下载。您的实际问题是什么?此代码强制浏览器发出保存/打开文件()的提示,即使文件是图像或pdf(当然这需要adobe reader插件)。我希望像往常一样打开图像,在浏览器中显示pdf文件。当然,浏览器不支持的其他文件,如zip、rar、doc、xls等,将启动“保存文件”对话框。