ルートを再構築した後、Webサーバー上のファイルにアクセスできません。ダウンロードするファイルを再構築した後、アドレスに保存されます:
http://mysite/submission/uploads/test.txt
以前は、次の場所に保存されていました。
http://mysite/uploads/test.txt
したがって、パス/uploads/test.txtは、データベースから読み取るときに機能します。Ivは最近、最初のサンプルに表示されているようにルートを更新し、mongodbデータベースのコンテンツを更新しました。ただし、uploadsフォルダーはrootにあり、download.phpファイルはsubmissionフォルダーにあるため、データベースからのパスは次のようになります。
http://mysite/mydownloadpage/submission/uploads/test.txt
私のデータベースでは、パスへのテキストが次のように正確に含まれています。
submission/uploads/test.txt
ディレクトリをルートに戻すために文字列にプレフィックスを追加しようとしましたが、機能しません。
../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);
}
}
どんな助けでもいただければ幸いです。
了解しました。ようやく並べ替えられてよかったです。一般的な方法は、必要に応じてすべての包含についてグローバルに参照できる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定義定数であることに注意する必要があります:)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加