簡體   English   中英

從文檔根目錄之外列出所有子目錄和文件

[英]List all subdirectories and files from outside the document root

我有一個在文檔根目錄下執行的索引腳本:

/var/www/mywebsite/protected-folder/index.php

現在,我在文檔根目錄之外有一個目錄,該目錄包含具有以下文件的子目錄列表:

/var/www/uploads/LIST OF SUBDIRECTORIES/file

當uploads文件夾位於文檔根目錄下時,我使用以下代碼:

<?php
$dir = "/var/www/uploads";
$list = scandir($dir); /* This function sorts dirs */
$list = array_diff($list,array(".","..","index.php"));

echo "<ol>";
foreach ($list as $file)
{
   if (!is_dir($file)) echo "<li><a href='https://mysite.ca/protected-folder/uploads/$file'>$file</a></li>\n";
}
echo "</ol>";
?>

但是,除非已登錄並且可以訪問此腳本,否則該文件夾必須是公共的私有文件夾。

如何創建指向文檔根目錄外部文件夾的鏈接,如果單擊鏈接,則顯示該目錄中的文件?

編輯:為了使我的問題更清楚,上載文件夾將具有兩層子目錄,這將是一個未知數: /var/www/uploads/UNKNOWN LIST OF SUBDIRECTORY LEVEL 1/UNKNOWN SUBDIRECTORIES LEVEL 2/ALL FILES (file can be any file type)

之前這樣做的方法是使用apache索引來允許用戶瀏覽子目錄。 這需要確保安全,以防止直接訪問URL,所以這就是我希望的工作方式:

  1. 列出所有第一個子目錄鏈接(鏈接到所有子目錄級別1)

  2. 然后,在單擊鏈接后,列出子目錄級別1中的所有子目錄級別2文件夾

  3. 最后,如果單擊該鏈接(子目錄2),則顯示子目錄2中的所有文件

希望這能說明問題

您所擁有的代碼並不關心目錄位於文檔根目錄之內還是之外。 只需鏈接到PHP文件即可檢索文件本身(而不是指向文件上傳的鏈接,因為它不可用)。 要檢索文件,您只需要使用腳本來抓取內容並將其輸出。

像這樣:

<?php
$path = '/var/www/uploads';
$file = do_something_to_make_this_safe($_POST['file_to_retrieve']);

$type = mime_content_type( $path . '/' . $file );
$contents = file_get_contents($path . '/' . $file);

header('Content-Type: ' . $type);
header('Content-Disposition: attachment;filename=' . $file);
print $contents;

?>

請注意,您需要確保某人不會以..東西污染文件路徑,以嘗試訪問被禁止的文件。 (因此do_something_to_make_this_safe()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM