【问题标题】:Download file from non public html folder with php使用 php 从非公共 html 文件夹下载文件
【发布时间】:2012-01-18 14:03:18
【问题描述】:

我有许多文件存储在服务器上,但不在 public_html 目录中。这个想法是登录的用户可以下载文件,使用 $_SESSION 变量来检查他们是否已登录,但如果其他人使用他们的计算机,他们无法在浏览器历史记录中看到直接文件路径,即使他们这样做它位于公共 html 目录之外,因此无法访问。

我知道我需要一个脚本来执行此操作,但我无法在任何地方找到如何执行此操作,如果有人能告诉我如何执行此操作将不胜感激。

【问题讨论】:

  • 到目前为止你尝试过什么代码?
  • Gordon,我尝试过 fopen() 和 readfile() 但是我没有很多使用 php 处理文件系统的经验,而且我认为我没有正确使用这些函数。不幸的是,当它不起作用时我删除了代码,所以无法发布它。

标签: php


【解决方案1】:

您可以使用readfile 将输出作为有问题的文件。例如:

$file = '/absolute/path/to/file.ext';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    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($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}

【讨论】:

    【解决方案2】:

    如果这在 public_html 文件夹之外,则创建一个 php 脚本以从文件中获取 file_get_contents。

    这是我使用的脚本的一部分

    if ($type == "1" && $method == "f"){
        header('Content-type: application/pdf');
    } else {
        header('Content-type: image/jpeg');
    }
    
    $fp = fopen($uploaded_dir . $result['theimage'], "r");
    while ($data = fread($fp, 1024)){
        echo $data;
    }
    fclose($fp);
    

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 1970-01-01
      • 2019-03-25
      • 2022-01-19
      • 1970-01-01
      • 2020-09-17
      • 2021-01-12
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多