簡體   English   中英

PHP代碼總是告訴我目錄不為空

[英]PHP Code always tells me that the directory isn't empty

下面的代碼需要讀取目錄uploads /,但他總是告訴我該目錄不為空,即使該目錄完全空。

<?php
  $dir = "uploads/";
  echo (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';
?>

這段代碼中是否有錯誤或任何錯誤,還是我發瘋了?

更新的代碼

<?php
  echo (count(glob("uploads/*")) === 0) ? 'Empty' : 'Not empty';
?>

整頁代碼更新

<?php
if (array_key_exists('error', $_GET)) {
    echo '<div class="galleryError">That image could not be found, we&#39;re sorry!</div>';
} elseif (array_key_exists('unknownerror', $_GET)) {
    echo '<div class="galleryError">There went something wrong</div>';
} else {
    echo '';
}

if ($handle = opendir('uploads/')) {

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != "..") {

            echo "<div class='imgbox'><a href='fullscreen.php?token=$entry'><img src='$submap$gallery$entry' class='boximg'></a><p class='boxname'>$entry<br /><a href='?view&token=$entry'><small>View this image</small></a></p></div>";
        }
    }

    closedir($handle);
}

//以上所有方法都有效,但隨后我們在這里有了這個孤獨的代碼,它拒絕工作。

echo (count(glob("uploads/*")) == 0) ? 'Empty' : 'Not empty';
?>

glob默默地失敗了。 我無法告訴您為什么,文件系統訪問通常與權限相關,但是可能還有其他因素-它甚至在文檔中表示功能部分取決於您的服務器環境...

在某些系統上,不可能區分空匹配和錯誤。

當有一個glob錯誤則返回false -和count(false) === 1 (也記錄),所以一點也不奇怪,人們陷入混亂的狀況時,他們忽略了這些檢查。 如果您真的不在乎錯誤,則可以使用簡寫三元運算符進行內聯錯誤檢查,確保始終傳遞一個數組以進行count從而使其表現出預期的效果:

$isEmpty = count(glob("uploads/*")?:[]) === 0;

這仍然不能回避的事實得到該目錄沒有被閱讀,雖然-你試過打印水珠的輸出,當必須在目錄中的文件? 我想那也很無聊。 以下內容是什么?

var_dump(is_readable('./uploads'));

以下輸出是否與您預期的工作目錄匹配?

echo realpath('uploads');

FYI在調試時使用var_dump ,而不是注釋中建議的print_r它會為您提供有關實際需要的變量/類型/結構/引用等的更多詳細信息。


總結-要考慮的事情:

服務器上正在運行什么操作系統 PHP在哪種模式下運行? 它是否在SuPHP / FastCGI或類似環境下運行。 什么用戶擁有./uploads目錄,對其具有什么權限?

暫無
暫無

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

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