![](/img/trans.png)
[英]Doctrine: always tells me the database isn't in sync after using two custom mapping types
[英]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'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.