可以返回 7 个值。以下是它们的列表以及每个值的意思
block:块特殊设备
char:字符特殊设备
dir:目录
fifo:FIFO(命名管道)
file:普通文件
link:符号链接
unknown:未知文件类型
(PHP 4, PHP 5, PHP 7, PHP 8)
filetype — 获取文件类型
filename
文件的路径。
返回文件的类型。可能的值为 fifo、char、dir、block、link、file、socket 和 unknown。
如果发生错误,则返回 false
。filetype()如果 stat 调用失败或文件类型未知,也会发出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 返回不同的字符串(“regular file”、“directory”,…)
我在 Windows Vista 上使用 PHP 的 CLI 版本。以下是确定 NTFS 文件是否标记为“隐藏”的方法
<?php
function 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() 发出此警告且输出中没有显示 filetype()(实际上返回 NULL)的最常见原因是,如果碰巧只传递了“目录或文件名”,而没有传递该“文件或目录”的完整“绝对或相对路径”。它仍然可能读取该文件并将其文件类型返回为“file”,但对于目录,它会显示警告并输出 NULL。
例如
$pathToFile = '/var/www';
$file = 'test.php';
$dir = 'somedir';
filetype($file) 的输出将返回为 'file',并且可能没有任何警告,但对于 filetype($dir),它将返回 NULL 并显示警告“Lstat failed”,除非您传递该目录的完整路径,即 filetype($pathToFile.'/'.$dir)。
这发生在我身上,经过多次反复试验后找到了这个解决方案。希望它能帮到其他人。