[英]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。 因此,如果$page
為admin
,則對於$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.