0

我在比根目录高一级的目录中有 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 字节!:(

关于为什么的任何想法?

非常感谢!

4

5 回答 5

0

是的,经过一番谷歌搜索和一些血汗和泪水,我终于找到了解决方案!

<?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;  
?>

非常感谢所有对此有所了解的人!

于 2012-10-09T08:39:55.333 回答
0

您可以尝试将其更改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!");
    }
?>
于 2012-10-08T16:14:11.313 回答
0

这是文件大小的代码:

<?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;  
?>
于 2012-10-09T09:14:36.240 回答
0
  1. header("位置:http://www.fqdn.tld/file.ext ");

  2. 基于 _GET["id"] > 0 且不为 null,您创建了一个之后直接使用的函数,因此您只是添加了更多代码行,而无需任何目的。

  3. 我看到你已经添加了一个“@”符号,正如人们之前评论的那样,但是,你开始解决这个问题的唯一方法是:

    • 删除 @ 符号,因为你永远不应该使用它,这是非常糟糕的做法,你应该满足代码中的所有异常,它是一个非常好的程序员。(PHP 中的脚本)

    • 错误报告(E_ALL);

    • 将点 b) 放在它自己的行上,但在 <?php 之后 - 这样我们就可以看到完整的错误列表。

  4. 您的代码很好,您遇到的问题是权限,确保 apache 可以访问您的“文件”存储库,您能够检查文件是否存在的事实表明存在轻微权限并且文件存在,即 0 字节是返回建议在 Apache 级别拒绝读取权限。

于 2012-10-08T16:48:26.803 回答
0

只有一个错误我们都在下面做检查。

读取文件($文件);//$file 应该是相对的而不是绝对的。而已。

谢谢,

阿尼鲁德·苏德。

于 2017-07-24T13:27:04.593 回答