PHP图片文件下载的代码



这涉及到使用PHP下载文件

我的php版本是5.3.5,我的apache是2.2.17

我正在尝试下载我在服务器上上传的文件(pdf,jpg,tiff),它们以相同的大小和类型下载,但我看不到它们。我猜他们没有被正确复制。但是当我打开原始上传的它们工作得很好。我几乎看过了所有按照建议出现的问题,没有一个回答这个问题,唯一类似的是这个,但仍然没有回答我的问题。

我正在使用这个代码
       header("Content-type: application/force-download"); 
       header('Content-Disposition: inline; filename="' . $dir . '"'); 
       header("Content-Transfer-Encoding: Binary"); 
       header("Cache-Control: no-store, no-cache, must-revalidate");  
       header("Cache-Control: post-check=0, pre-check=0", false);  
       header("Pragma: no-cache"); 
       header("Content-length: ".filesize($dir)); 
       header('Content-Type: application/octet-stream'); 
       header('Content-Disposition: attachment; filename="' . $file . '"'); 
       readfile("$dir"); 

$dir="62756d616769636e63/646973736572746174/ehddggh/1.JPG"的地方和$file="1.JPG"

谁能给我一个提示,我做错了什么,或者给我一个更好的解决方案下载文件?

这听起来像是你下载的文件中有额外的(虚假的)内容。

确保在你的PHP打开标签之前没有BOM标头,空格或其他任何东西;此外,在结束PHP标记之后没有尾随空格或任何其他数据(如果您关闭PHP标记)。

也,清理你的代码一点:为什么多个Content-Type头?为什么有多个Content-Disposition头?

readfile($dir); // without the quotes?

同时,确保$dir确实存在

is_file($dir)file_exists($dir)

谢谢大家的回答。我在一个文件中调用下载作为一个函数,其中包含其他函数,所以最后我不得不单独编写一个脚本,除了其他文件。我的问题是,我需要它是安全的,只下载一个文件,如果它属于用户和用户登录,所以我发送所有我需要的数据,加密和脚本内,我使用一系列的东西,看看所有者是否真的是登录的用户。所以,如果有人想知道这是我使用的代码,工作完美。

<?php
session_start();
$a=$_GET['a'];
$parts=explode("-",$a);
$tres=$parts[0];
$nombre=$partes[1];
$dbcodletra=substr($tres,2);
if($dbcod!=$_SESSION["username"])$boolt=0;
if($ext==1) $extl=".jpg";
if($ext==2) $extl=".jpeg";
if($ext==3) $extl=".tif";
if($ext==4) $extl=".tiff";
if($ext==5) $extl=".pdf";
if($ext==6) $extl=".doc";
if($ext==7) $extl=".docx";
if($tipoproy==1) $dir="rute/".$dbcodletra."/".$nombre.$extl;
if($tipoproy==2) $dir="rute/".$dbcodletra."/".$nombre.$extl;
if($tipoproy==3) $dir="rute/".$dbcodletra."/".$nombre.$extl;
if($tipoproy==4) $dir="rute/".$dbcodletra."/".$nombre.$extl;
if (file_exists($dir) && $boolt) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($dir));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($dir));
    ob_clean();
    flush();
    readfile($dir);
    exit;
}else echo "<meta http-equiv="Refresh" content="0;url=misdocumentos.php">";
?>

把两年前的问题传递下去…

我有一个类似的问题,下载损坏无法打开(当右键单击&Save-as工作得很好)。看了@Jon的回答后,我觉得他说对了。如果您查看readfile的文档(下面的链接),您将在它们的示例中看到ob_clean()、flush()和exit。所有这些都将最小化响应中额外字符数据的泄漏。我只是复制了他们的例子#1,我的问题就解决了。

http://php.net/readfile

你的头看起来很乱,试着这样做:

header('Pragma: public');
header('Cache-Control: public, no-cache');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($dir));
header('Content-Disposition: attachment; filename="' . basename($dir) . '"');
header('Content-Transfer-Encoding: binary');
readfile($dir);

相关内容

  • 没有找到相关文章

最新更新