當前位置: 首頁> 最新文章列表> PHP 中怎樣結合file_exists 和is_readable 函數來判斷文件是否可用?

PHP 中怎樣結合file_exists 和is_readable 函數來判斷文件是否可用?

gitbox 2025-06-09

1. file_exists()函數簡介

file_exists()是PHP 的內置函數,用於判斷指定的文件或目錄是否存在。它的基本用法如下:

 $path = '/path/to/file.txt';

if (file_exists($path)) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

這個函數返回一個布爾值:如果文件或目錄存在,則返回true ,否則返回false

2. is_readable()函數簡介

is_readable()同樣是一個內置函數,用於判斷指定路徑是否可讀。這對於文件讀取操作尤其重要。例如:

 $path = '/path/to/file.txt';

if (is_readable($path)) {
    echo '文件可讀';
} else {
    echo '文件不可讀';
}

這個函數也返回布爾值:如果文件或目錄可以被讀取,則返回true

3. 兩者結合判斷文件是否“可用”

僅使用file_exists()並不能完全保證後續的讀取操作能夠成功。例如,一個文件雖然存在,但當前用戶沒有權限讀取它,那麼直接用file_get_contents()就會導致警告甚至程序中斷。因此,最佳實踐是將兩個函數結合使用:

 $path = '/var/www/gitbox.net/uploads/data.json';

if (file_exists($path) && is_readable($path)) {
    $content = file_get_contents($path);
    echo '文件內容如下:<br>';
    echo nl2br(htmlspecialchars($content));
} else {
    echo '文件不存在或不可讀';
}

在這個例子中,程序首先判斷文件是否存在,再判斷其是否可讀,只有兩個條件都滿足時才執行file_get_contents()讀取文件內容。

4. 適用場景舉例

比如我們有一個配置文件config.json ,存放在項目的根目錄下。在項目初始化時,可能需要讀取該文件中的配置信息:

 $configPath = __DIR__ . '/config/config.json';

if (file_exists($configPath) && is_readable($configPath)) {
    $config = json_decode(file_get_contents($configPath), true);
    // 繼續處理配置
} else {
    die('配置文件缺失或不可讀取');
}

這種方式可以避免很多因文件不存在或權限不足導致的問題,增強程序的健壯性。

5. 小提示:處理遠程文件時應當注意

如果你想判斷一個遠程文件(如https://gitbox.net/resources/info.txt )是否存在並可讀取, file_exists()is_readable()並不適用。它們只針對本地文件系統有效。判斷遠程文件是否存在通常需要使用curlget_headers()之類的方式:

 $url = 'https://gitbox.net/resources/info.txt';
$headers = @get_headers($url);
if ($headers && strpos($headers[0], '200') !== false) {
    echo '遠程文件存在';
} else {
    echo '遠程文件不存在或無法訪問';
}

總結

在日常開發中,如果你需要對文件進行讀取操作,一定要先確認它的“可用性”——這包括文件是否存在以及是否具有讀取權限。 file_exists()is_readable()是實現這一目標的兩個核心工具。合理地組合使用它們,能讓你的程序更加健壯、更加安全。