PHP下载量为0字节

pn9klfpd  于 12个月前  发布在  PHP
关注(0)|答案(6)|浏览(138)

我有ZIP文件在一个目录,是一个步骤从根目录(以防止热链接等)。这里是代码:

<?php
    $filename = $_GET['id'];
    if(!$filename){
        header("Location: index.html");
    } else {
      function send_download($filename){
        $file_path = '../../../../downloads/' . $filename . '.zip';
        $file_size=@filesize($file_path);
        header("Content-Type: application/x-zip-compressed");
        header("Content-disposition: attachment; filename=$filename");
        header("Content-Length: $file_size");
        readfile($file_path);
        exit;
    } 
    send_download($filename);
    }
    ?>

字符串
所有的ZIP文件都很好,但是在“a”标签上使用这种方法会导致下载的文件大小为0字节!:(
你知道为什么吗?
多谢了!

sirbozc5

sirbozc51#

你可以试着把Content-type改为:

Content-type: application/x-zip;

字符串
在此之前,请检查该文件是否存在。

<?php
    $filename = $_GET['id'];
    if(!$filename){
        header("Location: index.html");
    } else{
    function send_download($filename){
    $file_path = '../../../../downloads/' . $filename . '.zip';
    if (file_exists($file_path))
    {
    $file_size=@filesize($file_path);
    header("Content-Type: application/x-zip-compressed");
    header("Content-disposition: attachment; filename=$filename");
    header("Content-Length: $file_size");
    readfile($file_path);
    exit;
    } 
    send_download($filename);
    }
    else
    die("Error 404!");
    }
?>

des4xlb0

des4xlb02#

  1. header(“位置:http://www.fqdn.tld/file.ext“);
    1.基于_GET[“id”]> 0且不为null,您已经创建了一个函数,该函数已在之后直接使用,因此您只是添加了更多行代码,但没有必要。
  • 我看到你已经添加了一个“@”符号,正如人们以前评论的那样,然而,你开始修复这个问题的唯一方法是:
  • 删除@符号,因为你永远不应该使用它,这是非常糟糕的做法,你应该在代码中考虑所有异常,这对一个真正优秀的程序员来说是非常重要的。
  • error_reporting(E_ALL);
  • 将点B)放在它自己的行上,但在<?php之后-这样我们就可以看到完整的错误列表。
  • 你的代码很好,你的问题是权限,确保apache可以访问你的“文件”存储库,你能够检查文件是否存在的事实表明有轻微的权限和文件存在,返回0字节的点表明阅读权限在Apache级别被拒绝。
13z8s7eq

13z8s7eq3#

是的,在谷歌搜索和一些血,汗和眼泪之后,我终于找到了解决方案!

<?php 
    $filename = $_GET['id'];
    header('Content-type: application/zip'); 
    header("Content-Disposition: attachment; filename=" . $filename); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    readfile('../../downloads/' . $filename . ".zip"); 
    exit;  
?>

字符串
非常感谢所有的人在这方面提供了一些帮助!

lhcgjxsq

lhcgjxsq4#

下面是一个简单的例子:

<?php 
    $filename = $_GET['id'];
    $file = "../../downloads/" . $filename . ".zip";
    header('Content-type: application/zip'); 
    header("Content-Disposition: attachment; filename=" . $file); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-length: " . filesize($file));
    readfile($file); 
    //echo filesize($file);
    exit;  
?>

字符串

gojuced7

gojuced75#

只有一个错误我们都在下面做检查。
readfile($file); //$file应该是相对的,而不是绝对的。就是这样。
谢谢你,
阿尼路德·苏德。

6rvt4ljy

6rvt4ljy6#

我知道这是一个非常古老的问题,虽然我刚刚为自己解决了这个问题。在我的情况下,它是内容长度头,我有:

header ('Content-Length: "'.$fileSize.'"');

字符串
将其更改为:

header ('Content-Length: '.$fileSize);


我解决了这个问题,PHP试图解释“,但只使用整数就可以了。

相关问题