filetype

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

filetype获取文件类型

描述

filetype(string $filename): string|false

返回给定文件的类型。

参数

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()

提示

从 PHP 5.0.0 开始,此函数也可以与某些 URL 包装器一起使用。请参阅 支持的协议和包装器 以确定哪些包装器支持 stat() 函数族的功能。

参见

添加注释

用户贡献的注释 6 条注释

24
ruach at chpc dot utah dot edu
20 年前
可以返回 7 个值。以下是这些值的列表及其含义

block: 块特殊设备

char: 字符特殊设备

dir: 目录

fifo: FIFO(命名管道)

file: 普通文件

link: 符号链接

unknown: 未知文件类型
9
adlerweb
13 年前
filetype() 在 x86 Linux 上对大小 >= 2GB 的文件不起作用。您可以使用 stat 作为解决方法

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

注意,stat 返回不同的字符串(“普通文件”、“目录”等)
-1
7r6ivyeo at mail dot com
15 年前
我在 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 操作系统。
-4
Abhi Jain
13 年前
在 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)。

这发生在我身上,经过很多尝试和错误后找到了这个解决方案。希望它能帮到别人。
-9
Anonymous
9 年前
注意,使用 filetype 时的错误,例如使用日语文件名
https://bugs.php.net/bug.php?id=64699

整个 PHP 解释器都会崩溃,没有任何方法可以避免它或捕获异常。
-23
r dot koelpin at evisionteam dot de
10 年前
/* 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>";
?>
To Top