使用数据库字符串访问文件有问

时间:2016-08-01 23:29:34

标签: php mongodb

重组路线后,我在访问Web服务器上的文件时遇到问题。重组后,要下载的文件存储在地址中:

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

以前它存储在:

http://mysite/uploads/test.txt

所以路径/uploads/test.txt在从数据库中读取时会起作用。 Iv最近更新了第一个样本中可见的路径,并更新了mongodb数据库中的内容。但是,由于uploads文件夹位于root文件夹中,而download.php文件位于提交文件夹中,因此数据库中的路径指向以下内容:

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

在我的数据库中,它包含完全如下的路径文本:

submission/uploads/test.txt

我尝试将前缀附加到字符串以将目录指向root,但它不起作用:

../submission/uploads/test.txt

这似乎导致它包括'..'而不是指向根目录。

以下是从数据库传递路径的下载函数:

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 个答案:

答案 0 :(得分:1)

好的,很高兴我们终于把它整理好了!通常的做法是定义ROOT_PATH / index.php / etc常量,您可以根据需要全局引用所有包含。这通常在根DEFINE('ROOT', getcwd()); 文件中完成:

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

现在,您当前的函数定义中存在一些问题。如果要使用它们,则需要提供参数。您可以通过修改它来解决此问题:

$path = ROOT . DIRECTORY_SEPARATOR . $my_path_from_db;

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

DIRECTORY_SEPARATOR

您应该注意\是一个内部PHP定义的常量,代表/android:windowSoftInputMode="adjustResize" ,具体取决于操作系统:)。