文字

filetype

(PHP 4, PHP 5, PHP 7)

filetype取得文件类型

说明

string filetype ( string $filename )

返回文件的类型。

参数

filename

文件的路径。

返回值

返回文件的类型。 可能的值有 fifo,char,dir,block,link,file 和 unknown。

如果出错则返回 FALSE 。如果 stat 调用失败或者文件类型未知的话 filetype() 还会产生一个 E_NOTICE 消息。

范例

Example #1 filetype() 例子

<?php

echo  filetype ( '/etc/passwd' );   // file
echo  filetype ( '/etc/' );         // dir

?>

错误/异常

失败时抛出 E_WARNING 警告。

注释

Note: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。

Tip

自 PHP 5.0.0 起, 此函数也用于某些 URL 包装器。请参见 支持的协议和封装协议以获得支持 stat() 系列函数功能的包装器列表。

参见

  • is_dir() - 判断给定文件名是否是一个目录
  • is_file() - 判断给定文件名是否为一个正常的文件
  • is_link() - 判断给定文件名是否为一个符号连接
  • file_exists() - 检查文件或目录是否存在
  • mime_content_type() - 检测文件的 MIME 类型(已废弃)
  • pathinfo() - 返回文件路径的信息
  • stat() - 给出文件的信息

用户评论:

[#1] Anonymous [2014-12-03 06:17:56]

Note there is a bug when using filetype with for example Japanese filenames :
https://bugs.php.net/bug.php?id=64699

The whole PHP interpreter comes crashing down without anyway to avoid it or capture an exception.

[#2] r dot koelpin at evisionteam dot de [2014-01-29 18:29:56]


<?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>";
?>

[#3] Abhi Jain [2011-06-08 00:01:12]

Putting @ in front of the filetype() function does not prevent it from raising a warning (Lstat failed), if E_WARNING is enabled on your error_reporting.

The most common cause of filetype() raising this warning and not showing a filetype() in the output (it actually returns NULL) is, if you happened to pass just the 'Dir or File Name' and not the complete "Absolute or Relative Path" to that 'file or Dir'. It may still read that file and return its filetype as "file" but for Dir's it shows warning and outputs NULL.
eg:
$pathToFile = '/var/www';
$file = 'test.php';
$dir = 'somedir';

Output for filetype($file) will be returned as 'file' and possibly without any warning, but for filetype($dir), it will return NULL with the warning "Lstat failed", unless you pass a complete path to that dir, i.e. filetype($pathToFile.'/'.$dir).

This happened to me and found this solution after a lot of trial and error. Thought, it might help someone.

[#4] adlerweb [2010-10-07 13:09:34]

filetype() does not work for files >=2GB on x86 Linux. You can use stat as a workarround:

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

Note that stat returns diffenerent strings ("regular file","directory",...)

[#5] 7r6ivyeo at mail dot com [2008-11-21 17:29:09]

I use the CLI version of PHP on Windows Vista.  Here's how to determine if a file is marked "hidden" by 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;
}
?>


Changing  <?php if($attr[3] === 'h'?>  to  <?php if($attr[4] === 's'?>  will check for system files.

This should work on any Windows OS that provides DOS shell commands.

[#6] ruach at chpc dot utah dot edu [2004-03-10 17:11:22]

There are 7 values that can be returned. Here is a list of them and what each one means

block: block special device

char: character special device

dir: directory

fifo: FIFO (named pipe)

file: regular file

link: symbolic link

unknown: unknown file type

上一篇: 下一篇: