<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 一些無關的前置內容</span></span><span>
</span><span><span class="hljs-variable">$now</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"當前時間:<span class="hljs-subst">{$now}</span></span></span><span>\n";
</span><span><span class="hljs-comment">// --------------------------------------------</span></span><span>
<span class="hljs-comment">/**
* 正確使用 filetype 和 file_exists 函數,避免常見的錯誤用法
*
* 在 PHP 中,文件操作是日常開發中非常常見的需求,例如檢查文件是否存在、
* 判斷文件類型等。在這些場景下,`file_exists()` 與 `filetype()` 函數经常会被使用。
* 然而,如果對它們的用法理解不夠清晰,就可能出現錯誤的寫法或邏輯漏洞。
*
* 一、file_exists() 的正確用法
* --------------------------
* `file_exists()` 用於檢查文件或目錄是否存在。它返回布爾值 `true` 或 `false`。
* 需要注意的是:
* - `file_exists()` 不區分文件和目錄,只要路徑存在就會返回 true。
* - 在某些操作系統或權限受限的情況下,即便文件存在,如果沒有讀取權限,也可能導致返回 `false`。
*
* 示例:
* ```php
* if (file_exists("data.txt")) {
* echo "文件存在";
* } else {
* echo "文件不存在";
* }
* ```
*
* 常見錯誤用法:
* - 誤以為 `file_exists()` 只判斷文件,不判斷目錄。
* - 忽略權限問題導致的假陰性(文件存在卻返回 false)。
*
* 二、filetype() 的正確用法
* ------------------------
* `filetype()` 用於返迴路徑的類型字符串,比如:
* - `file` 表示普通文件
* - `dir` 表示目錄
* - 其他類型如 `block`, `char`, `fifo`, `link`, `socket` 在不同系統下可能出現
*
* 使用前必須保證路徑存在,否則會產生警告。因此在調用 `filetype()` 前,通常要先使用 `file_exists()`。
*
* 示例:
* ```php
* $path = "data.txt";
* if (file_exists($path)) {
* echo "類型是:" . filetype($path);
* } else {
* echo "路徑不存在";
* }
* ```
*
* 常見錯誤用法:
* - 直接調用 `filetype()` 而不先確認文件是否存在,導致 PHP 警告。
* - 將 `filetype()` 的返回值誤認為布爾值。實際上它返回的是字符串,如 `file` 或 `dir`。
*
* 三、結合使用的最佳實踐
* ----------------------
* 當我們既需要判斷文件是否存在,又要區分它是文件還是目錄時,可以這樣寫:
*
* ```php
* $path = "uploads";
* if (!file_exists($path)) {
* echo "路徑不存在";
* } else {
* $type = filetype($path);
* if ($type === "file") {
* echo "這是一個文件";
* } elseif ($type === "dir") {
* echo "這是一個目錄";
* } else {
* echo "其他類型:" . $type;
* }
* }
* ```
*
* 總結
* ----
* - `file_exists()` 用於判斷路徑是否存在,但不區分文件和目錄。
* - `filetype()` 用於判斷類型,但必須在路徑存在時使用。
* - 避免的常見錯誤是:忽視權限問題、誤解返回值類型、未先判斷存在性。
*
* 只有正确地理解和组合使用这两个函數,才能在文件操作中避免常見的坑,提高代碼的健壯性和可靠性。
*/</span>
</span></span>