2024 PHP Conference Japan

filetype

(PHP 4, PHP 5, PHP 7, PHP 8)

filetype取得檔案類型

說明

filetype(字串 $filename): 字串|false

傳回指定檔案的類型。

參數

檔案名稱

檔案的路徑。

回傳值

回傳檔案的類型。可能的值為 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()

提示

從 PHP 5.0.0 開始,此函式也可以與*某些* URL 包裝器一起使用。請參考 支援的協定和包裝器 以確定哪些包裝器支援 stat() 系列功能。

參見

新增註記

使用者貢獻的註記 4 則註記

ruach at chpc dot utah dot edu
20 年前
可以回傳 7 個值。以下是它們的列表以及每個值的含義

block:區塊特殊裝置

char:字元特殊裝置

dir:目錄

fifo:FIFO(命名管道)

file:一般檔案

link:符號連結

unknown:未知檔案類型
adlerweb
14 年前
在 x86 Linux 上,filetype() 不適用於 >=2GB 的檔案。您可以使用 stat 作為替代方案

$type=trim(`stat -c%F $file`);

請注意,stat 會回傳不同的字串(「一般檔案」、「目錄」...)
7r6ivyeo at mail dot com
16 年前
我在 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 作業系統。
Abhi Jain
13 年前
如果在 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)。

我遇到了這個問題,並在經過多次嘗試和錯誤後找到了這個解決方案。希望能幫助到其他人。
To Top