2016-08-01 61 views
0

我在重构路由之后访问我的Web服务器上的文件时遇到问题。重组文件下载后存储在地址:使用数据库字符串访问文件的问题

http://mysite/submission/uploads/test.txt 

以前它存储在:

http://mysite/uploads/test.txt 

等从数据库中读取数据时/uploads/test.txt会的工作路径。 Iv最近更新了第一个示例中可见的路线,并更新了mongodb数据库中的内容。然而,由于上传文件夹在根和的download.php文件在提交文件夹从数据库IM假设点的路径:

http://mysite/mydownloadpage/submission/uploads/test.txt 
在我的数据库

它包含文本的路径正好如下:

submission/uploads/test.txt 

我试图前缀追加到字符串以指向一个目录回到根,但它不起作用:

../submission/uploads/test.txt 

这似乎导致其INCLUDIN g,而不是将它指向根目录。

这里是一个被从数据库中传递的路径下载功能:

function download($path){ 

if(!file_exists($path)){ 
die('Error'); 
}else{ 
header('Content-Description: File Transfer'); 
header('Content-Disposition: attachment; filename='.basename($path)); 
header('Content-Type: application/octet-stream'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
ob_start(); 
flush(); 
readfile($path); 
exit; 
} 
} 
if (isset($_GET['download'])) { 
if (!empty($_GET['download'])) { 
$file = $_GET['download']; 
download($file); 
} 
} 

任何帮助,将不胜感激。

+1

您需要引用该目录。因此,在某处需要定义根目录。 'echo getcwd();'return?你的目录结构是什么样的? – Darren

+0

这将返回我添加它的任何php文件的目录。即http:// mysite/download /或http:// mysite/submission /这可能会有所帮助,但我试图从不同的目录下载,所以download.php位于http:// mysite/download /中,并且文件位于HTTP:// mysite的/提交/上传 – D3181

+1

我(*和许多其他*)做的是什么:'DEFINE( '根',GETCWD()DS);'就非常根'index.php'文件。一旦定义了一个根,你可以简单地引用它与适当的目录结构来实现你正在做的事情:'$ path = ROOT。 '/ submission/uploads /'。 $ the_file_name;'(*作为示例*)。除此之外,你需要引用绝对路径 - 我所提供的是一种常见的做法,保持统一和一致。 – Darren

回答

1

好吧,很高兴我们终于得到它排序!通常的做法是定义一个ROOT/ROOT_PATH/etc常量,您可以根据需要全局引用所有包含。这通常是在根index.php文件进行搭配:

DEFINE('ROOT', getcwd()); 

现在,有在当前的函数定义的几个问题。如果你想使用它们,你需要提供参数。你可以通过它修改,以解决此问题:

function download($file) { ... 
        ^^^^^--- we added this. 

现在,定义你的文件的时候,你需要指定的绝对路径:

$path = ROOT . DIRECTORY_SEPARATOR . $my_path_from_db; 

你应该注意的是DIRECTORY_SEPARATOR是定义的常量内部PHP它代表\/,具体取决于操作系统:)。

+0

完美的作品!感谢您花时间帮助。 – D3181

+0

@ Dean219我的荣幸 - 很高兴我能帮你解决它:) – Darren