2012-01-18 94 views
3

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

我知道我需要一个脚本来做到这一点,但我不知道如何做到这一点,如果有人能告诉我如何做到这一点,将不胜感激。

+0

您到目前为止试过了哪些代码? – GordonM 2012-01-18 14:07:28

+0

戈登,我试过fopen()和readfile(),但是我没有很多使用php的文件系统的工作经验,我不认为我正确地使用了这些函数。不幸的是,我删除了代码,当它不工作,所以不能发布。 – egd 2012-01-18 14:24:26

回答

10

您可以使用readfile得到输出有问题的文件。 EG:

$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; 
} 
+0

完美谢谢。 – egd 2012-01-18 14:54:17

0

如果这不在public_html文件夹中,则从该文件创建一个到脚本file_get_contents的php脚本。

这里是一个脚本的一部分,我用

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); 
相关问题