可以回傳 7 個值。以下是它們的列表以及每個值的含義
block:區塊特殊裝置
char:字元特殊裝置
dir:目錄
fifo:FIFO(命名管道)
file:一般檔案
link:符號連結
unknown:未知檔案類型
(PHP 4, PHP 5, PHP 7, PHP 8)
filetype — 取得檔案類型
檔案名稱
檔案的路徑。
回傳檔案的類型。可能的值為 fifo、char、dir、block、link、file、socket 和 unknown。
如果發生錯誤,則回傳 false
。如果 stat 呼叫失敗或檔案類型未知,filetype() 也會產生 E_NOTICE
訊息。
失敗時,會發出 E_WARNING
。
範例 #1 filetype() 範例
<?php
echo filetype('/etc/passwd');
echo "\n";
echo filetype('/etc/');
?>
上述範例將輸出:
file dir
注意:此函式的結果會被快取。詳情請參閱 clearstatcache()。
可以回傳 7 個值。以下是它們的列表以及每個值的含義
block:區塊特殊裝置
char:字元特殊裝置
dir:目錄
fifo:FIFO(命名管道)
file:一般檔案
link:符號連結
unknown:未知檔案類型
在 x86 Linux 上,filetype() 不適用於 >=2GB 的檔案。您可以使用 stat 作為替代方案
$type=trim(`stat -c%F $file`);
請注意,stat 會回傳不同的字串(「一般檔案」、「目錄」...)
我在 Windows Vista 上使用 CLI 版本的 PHP。以下是如何判斷檔案是否被 NTFS 標記為「隱藏」
<?php
函式 is_hidden_file($fn) {
$attr = trim(exec('FOR %A IN ("'.$fn.'") DO @ECHO %~aA'));
if($attr[3] === 'h')
return true;
return false;
}
?>
將 <?php if($attr[3] === 'h') ?> 改為 <?php if($attr[4] === 's') ?> 將會檢查系統檔案。
這應該適用於任何提供 DOS Shell 命令的 Windows 作業系統。
如果在 error_reporting 中啟用了 E_WARNING,在 filetype() 函式前面加上 @ 並不能阻止它發出警告 (Lstat 失敗)。
filetype() 發出此警告且未在輸出中顯示檔案類型(實際上返回 NULL)的最常見原因是,如果您只傳遞了「目錄或檔案名稱」而不是「檔案或目錄」的完整「絕對或相對路徑」。它可能仍然會讀取該檔案並將其檔案類型返回為「file」,但對於目錄,它會顯示警告並輸出 NULL。
例如:
$pathToFile = '/var/www';
$file = 'test.php';
$dir = 'somedir';
filetype($file) 的輸出將返回為 'file',並且可能沒有任何警告,但對於 filetype($dir),它將返回 NULL 並顯示警告「Lstat 失敗」,除非您傳遞該目錄的完整路徑,即 filetype($pathToFile.'/'.$dir)。
我遇到了這個問題,並在經過多次嘗試和錯誤後找到了這個解決方案。希望能幫助到其他人。