重组路线后,我在访问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);
}
}
任何帮助都将不胜感激。
答案 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"
,具体取决于操作系统:)。