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.
filetype
(PHP 4, PHP 5)
filetype — Lê o tipo do arquivo
Descrição
string filetype
( string $filename
)
Retorna o tipo do arquivo.
Parâmetros
- filename
-
Caminho até o arquivo.
Valor Retornado
Retorna o tipo do arquivo. Os valores possíveis são fifo, char, dir, block, link, file, socket e unknown (desconhecido).
Retorna FALSE se ocorrer algum erro. filetype() também produzirá uma mensagem E_NOTICE se a chamada stat falhar ou se o tipo do arquivo for desconhecido.
Exemplos
Exemplo #1 Exemplo de filetype()
<?php
echo filetype('/etc/passwd'); // file
echo filetype('/etc/'); // dir
?>
Notas
Nota: O resultado desta função é cacheada. Veja clearstatcache() para mais detalhes.
Dica
A partir do PHP 5.0.0, esta função também pode ser utilizada com alguns wrappers URL. Veja Supported Protocols and Wrappers para uma lista de quais wrappers são suportados pela família de funções stat().
Veja Também
- is_dir() - Diz se o caminho é um diretório
- is_file() - Informa se o arquivo é um arquivo comum (não é diretório)
- is_link() - Diz se o arquivo é um link simbólico (symbolic link)
- file_exists() - Checa se um arquivo ou diretório existe
- stat() - Obtem informações sobre um arquivo
- mime_content_type() - Detect MIME Content-type for a file (deprecated)
User Contributed Notes
filetype
filetype
Abhi Jain
07-Jun-2011 09:01
07-Jun-2011 09:01
adlerweb
07-Oct-2010 10:09
07-Oct-2010 10:09
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",...)
7r6ivyeo at mail dot com
21-Nov-2008 03:29
21-Nov-2008 03:29
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.
ruach at chpc dot utah dot edu
10-Mar-2004 02:11
10-Mar-2004 02:11
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

filesize