2017-08-01 37 views
0

我工作的文件存储和我的设计是与安装有a href标签下载我的文件按钮一起显示从我的关于该文件的数据库中的数据。我成功地做到了这一切,当我把我的存储在我的网站的根 - 但在建议中,我所做的更改。下载(使用A HREF下载?)

我现在在我的C:/驱动器中有我的项目根目录,但是我想在根外部存储我的存储,但是由于安全原因,我根据建议将我的存储保存在d:/ drive中,无论如何,/ drive都是我的云存储。从我在网上看到的,这意味着我不能用<a href="d:/storage/Username/file download>再下载我的档案!

如果是真的,你怎么从你的网站根目录之外下载?

如果没有,我怎么让过去的安全限制使用我的HREF法根外下载?

谢谢!

+0

什么是你的Web服务器软件? – Progrock

+0

您通常会向资源公布一个Web路径,而不是本地文件路径。 – Progrock

+0

我使用WAMP,在PHP代码我(与JS,HTML OFC一起),我保存在MYSQLDatabase – EML

回答

0

你可以使用ReadFile的()

所链接的downloader.php?F =使用的RewriteRules somefile.jpg 。

在downloader.php

这样做

<?php 
$path = 'D:/map/'; 
if(login_check($user) && is_file($path . $_GET['f'])) { 
    header('Content-Type: image/jpeg'); 
    readfile($path . $_GET['f']); 

} 
?> 

我增加了login_check(),因为你提到一些有关的安全性。 而且它可能是明智的检查非法字符的参数(尤其是斜杠) 和内容类型可以与所选文件

+0

我得到它的工作的感谢,这不是选择的答案,因为您的解决方案仅适用于JPEG的,我想任何文件中工作(因此文件存储,而不是文本文件存储) – EML

0

得到它的工作各不相同,感谢来自伊沃P.

我开始启动通过发送到我的download.php文件名,文件扩展名,文件路径全部由*分开(*不会允许的文件名)。一个例子是:

download.php?f=myTextFile*txt*d:/storage/test/myTextFile.txt 

然后,我爆炸$ _GET [ 'F']通过*,确保数组大小为3,然后设置内容标题:

$file_info = explode("*", $_GET['f'], 3); 
if(is_file($file_info[2]) && count($file_info) == 3) { 
    header('Content-Description: File Transfer'); 
    header("Content-Type: " . mime_content_type($file_info[2])); 
    header('Content-Disposition: attachment; filename="'.$file_info[0] . '.' .$file_info[1].'"'); 
    header('Expires: 0'); 
    header('Pragma: public'); 
    readfile($file_info[2]); 
} 

,那就是工作为我解决!在txt,jpg和exe上测试 - 完美地工作。我已经等个性化我的项目的测试,以确保“F”是有效的(因此用户不能将地址栏和制作乱七八糟的东西搞砸了,看到real_escape_string),但是这是它的要点!

编辑感谢Bjorn:请记住,这允许服务器的完全访问,确保你个性化你自己的download.php接受你自己格式的输入(否则任何人都可以窃取你的php文件,js文件等!)

+0

我希望你是意识到这可以使服务器上的每个文件都被下载。 ?例如'的download.php F = mySecretFile * TXT * C:/私营/ mySecretFile。txt' –

+0

我把它限制为只接受'd:/ storage/YourCompany/YourUserName'作为字符串的开始,我没有在我的答案中显示它,以使它不那么个性化。我的网络信息(php,.htaccess等)存储在c:/ - >中,并且不能使用任何不在用户名下的文件。只有登录的用户才可以访问它,我花了一些时间去保持它的个性化 – EML