可以返回 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
**。 如果 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: 未知文件类型
filetype() 在 x86 Linux 上对大小 >= 2GB 的文件不起作用。您可以使用 stat 作为解决方法
$type=trim(`stat -c%F $file`);
注意,stat 返回不同的字符串(“普通文件”、“目录”等)
我在 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 操作系统。
在 filetype() 函数前面加上 @ 并不会阻止它在您的 error_reporting 上启用了 E_WARNING 的情况下引发警告(Lstat 失败)。
filetype() 引发此警告且输出中不显示 filetype()(实际上返回 NULL)的最常见原因是,如果您碰巧传递了“目录或文件名”,而不是传递了该“文件或目录”的完整“绝对路径或相对路径”。它可能仍然会读取该文件并将它的文件类型返回为“文件”,但对于目录,它会显示警告并输出 NULL。
例如
$pathToFile = '/var/www';
$file = 'test.php';
$dir = 'somedir';
filetype($file) 的输出将返回为“文件”,并且可能没有任何警告,但对于 filetype($dir),它将返回 NULL 以及警告“Lstat 失败”,除非您传递了该目录的完整路径,即 filetype($pathToFile.'/'.$dir)。
这发生在我身上,经过很多尝试和错误后找到了这个解决方案。希望它能帮到别人。
注意,使用 filetype 时的错误,例如使用日语文件名
https://bugs.php.net/bug.php?id=64699
整个 PHP 解释器都会崩溃,没有任何方法可以避免它或捕获异常。
/* COPY/PASTE */
<?php
//https://php.net/manual/de/function.filetype.php#104308
echo "Zum testen müssen tatsächlich existente Namen verwendet werden.<br>";
echo "Pfad und Dateiname müssen getrennt eingetragen und durch einen Punkt verbunden sein.<br>";
echo "Example: [filetype(\"../dir/u_dir/\".\"temp.jpg\")] liefert -> file<br>";
?>