2013-09-21 95 views
0

最近,我開始在PHP文件管理器爲我的服務器的工作,因爲我想這將會是非常無限便捷使用,以及讓我刷了我的PHP技能。無論如何,我有幾個問題,我希望能回答...PHP文件管理器

  • 當我列出我的導演,總是有幾個「點」。例如:。,..,Folder_1,Folder_2等...我將如何去除我的目錄列表中的這些「點」?
  • 當我列出我directorys,我現在的方法沒有任何問題的上市下劃線,或有在名稱中沒有空間的人的文件夾。但是,它無法使用名稱中的空格來處理文件夾。有沒有辦法讓我的文件管理器識別並正確處理名稱中的空格?

這裏是我當前的代碼...

<?php 
global $dir_path; 
if (isset($_GET["directory"])) { 
    $dir_path = $_GET["directory"]; 
    //echo $dir_path; 
} 
else { 
    $dir_path = $_SERVER["DOCUMENT_ROOT"]."/"; 
} 

$directories = scandir($dir_path); 
foreach($directories as $entry) { 
    if(is_dir($dir_path . "/" . $entry)) { 
     echo "<a href=?directory=" . $dir_path . "" . $entry . "/" . "><li>" . $entry . "</li></a>"; 
    } 
    else {} 
} 

?>

任何幫助非常感謝, 布蘭登

附: 「Dots」與我的服務器的ext4文件系統有關嗎?這與我的問題並無太大關係,我只是有點好奇。

+0

'$ dir_path = $ _GET [「目錄」];'...我要告訴你,這是非常不安全的......我,所以我的,不是你的,可以選擇目錄! – djot

+0

而'$ _SERVER [「DOCUMENT_ROOT」]'可能有尾隨的斜線......或不依賴於服務器。小故事 - 你不能依賴它。 – djot

+0

刪除「點」的唯一真正的方法是檢查他們 - '如果($名稱== || $名稱==「..」「」)繼續;'。 –

回答

1

如果你只是想要一個簡單的版本:

foreach($directories as $entry) { 
    if (is_dir($dir_path . "/" . $entry) && !in_array($entry, array('.','..'))) { 
     echo "<a href=?directory=" . $dir_path . "" . $entry . "/" . "><li>" . $entry . "</li></a>"; 
    } 
    else {} 
} 

這個檢查./..如當前目錄並返回目錄。關於空間聽起來很奇怪。這是鏈接不工作還是它scandir?如果是鏈接,以替換爲%20的空白,如

$href="?directory=" . $dir_path . "" . str_replace(' ','%20',$entry) . "/"; 
echo "<a href='".$href.'"><li>' . $entry . '</li></a>'; 

更容易,我認爲這是缺乏引號""周圍HREF,例如

echo '<a href="?directory="' . $dir_path . $entry . '/' . '"><li>' . $entry . '</li></a>'; 

代替。當您不添加quoutes,用空格一個鏈接,說「測試123」將被解釋爲href=test瀏覽器,因爲沒有封裝的整個環節。它應該是href="test 123"