簡體   English   中英

scandir為用戶提供文件

[英]scandir for files for users

我已經為我的內容管理系統創建了一個頁面儀表板,並且很好地嘗試迭代scandir方法,但是我的條件不起作用。 有人可以解釋為什么嗎?

$pages = scandir('../',0);
foreach($pages as $page){
  if($page !== "." OR $page !== ".." OR $page !== "admin" OR $page !== "admin.php" OR $page !== "kms_kontent" OR !is_dir('../'.$page)){
        $extension = explode('.',$page);
        $extension = end($extension);
        $page = str_replace('.'.$extension,'',$page);
     echo '<div class="row"><ul><li class="fifths">'.$page.'</li><li class="fifths"></li></ul></div>';
  }
}

呼應所有內容

--public_html
   -admin.php #don't show
   -admin #don't show
   -kms_content #don'tshow
   -index.php #show
   -shop.php #show

也正在顯示. ..我也不想顯示。

邏輯有缺陷。 為了了解原因,讓我們假設您具有以下比較:

$page !== "." OR $page !== ".."

如果page不滿足條件. 或者如果頁面不是.. ; 如果頁面是. 它不會等於..反之亦然。 換句話說,該條件總是被滿足。

您想要的是僅當page都不為空時才滿足條件. 也不.. ; 所以:

!($page === '.' || $page === '..')

遵循德摩根定律:

$page !== '.' && $page !== '..'

可能的值數組可以用來進一步簡化代碼:

$invalid_pages = [".", "..", "admin", "admin.php", "kms_kontent"];

if (!in_array($page, $invalid_pages) && !is_dir('../'.$page)) {
}
if (
    $page !== "." OR
    $page !== ".." OR
    $page !== "admin" OR
    $page !== "admin.php" OR
    $page !== "kms_kontent" OR
    !is_dir('../'.$page)
) {

因為您使用的是OR ,所以當任何條件為true時,if都將變為true。 因此,如果$pageadmin ,則對於$page !== "admin"它將為false,但對其他所有條件都是true,它將不起作用。 您應該使用&&AND

但是,您可以使用數組稍微清理一下代碼。 例如:

$filter = ['.', '..', 'admin', 'admin.php', 'kms_kontent'];
$pages = scandir('../', 0);
foreach ($pages as $page) {
    if (!in_array($page, $filter) && !is_dir("../$page")) {
        ...
    }
}

它做同樣的事情,但是代碼看起來更簡潔,可以更輕松地添加更多項。

使用AND或&&代替OR!

暫無
暫無

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

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