Определение типа файла
bool file_exists(string $filename)
Возвращает true, если файл с именем $filename существует на момент вызова. Используйте эту функцию с осторожностью! Например, следующий код никуда не годится с точки зрения безопасности:
$fname="/etc/passwd";
if(!file_exists($fname)
$f=fopen($fname,"w");
else
$f=fopen($fname,"r");
Дело в том, что между вызовом file_exists()
и открытием файла в режиме w проходит некоторое время, в течение которого другой процесс может "вклиниться"
и "подменить" используемый нами файл. Сейчас это все кажется маловероятным, но данная проблема выходит на передний план при написании сценария счетчика. Мы еще остановимся на ней чуть позже.
string filetype(string $filename)
Возвращает строку, которая описывает тип файла с именем $filename. Если такого файла не существует, возвращает false. После вызова строка будет содержать одно из следующих значений:
r
file — обычный файл;
r dir — каталог;
r link — символическая ссылка;
r fifo — fifo-канал;
r block — блочно[E67] -ориентированное устройство;
r char — символьно-ориентированное устройство;
r unknown — неизвестный тип файла.
Рассматриваемые ниже несколько функций представляют собой лишь надстройку для функции filetype(). В большинстве случаев они очень полезны, и пользоваться ими удобнее, чем последней.
bool is_file(string $filename)
Возвращает true, если $filename — обычный файл.
bool is_dir(string $filename)
Возвращает true, если $filename — каталог.
bool is_link(string $filename)
Возвращает true, если $filename — символическая ссылка.