Файлы

Есть два больших типа функций:

  • f*() - для работы с ресурсами (например, fopen())
  • file*() - для работы с именем файла (например, file_get_contents())

Функции для работы с ресурсами

fopen($filename,$filemode,$use_include_path,$context)

  • Открывает файл и возвращает указатель на ресурс в случае успеха.
  • Если filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу. Файл должен быть доступен PHP (права доступа на файл это разрешают). Если вы включили безопасный режим или open_basedir, то накладываются дальнейшие ограничения.
  • Если PHP установлено, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.
  • use_include_path - Необязательный третий параметр use_include_path может быть установлен в 1 или TRUE, если вы также хотите провести поиск файла в include_path.
  • mode - указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:
mode Описание
r Открывает файл только для чтения; помещает указатель в начало файла.
r+ Открывает файл для чтения и записи; помещает указатель в начало файла.
w Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.
w+ Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
a Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
a+ Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
x Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL l O_CREAT для внутреннего системного вызова open(2).
x+ Создаёт и открывает для чтения и записи; иначе имеет то же поведение что и x.
c Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от w), и вызов к этой функции не вызывает ошибку (также как и в случае с x). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри flock()) перед изменением, так как использование w может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
c+ Открывает файл для чтения и записи; иначе имеет то же поведение, что и c.

fread($resource,$length)

  • читает до length байт из файлового указателя handle. Чтение останавливается как только было достигнуто одно из следующих условий:
    • было прочитано length байт
    • достигнут EOF (конец файла)
    • стал доступен пакет или произошел таймаут сокета (для сетевых потоков)
    • если читаемый поток является буферизованным и не представляет собой обычный файл, то за один раз максимум читается количество байт, равное размеру одной порции данных.
  • Возвращает прочтенную строку или FALSE в случае возникновения ошибки.
<?php
// получает содержимое файла в строку
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

int ftell ( resource $handle )

  • Возвращает позицию файлового указателя hanlder.
<?php

// открываем файл и читаем немного данных
$fp = fopen("/etc/passwd", "r");
$data = fgets($fp, 12);

// где же мы ?
echo ftell($fp); // 11

fclose($fp);

?>

bool rewind ( resource $handle )

  • Сбрасывает курсор у файлового указателя.

int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )

  • Устанавливает смещение в файле, на который ссылается handle. Новое смещение, измеряемое в байтах от начала файла, получается путём прибавления параметра offset к позиции, указанной в параметре whence:
    • SEEK_SET - Устанавливает смещение в offset байт.
    • SEEK_CUR - Устанавливает смещение в текущее положение плюс offset.
    • SEEK_END - Устанавливает смещение в конец файла плюс offset.
  • В случае успеха возвращает 0; в противном случае возвращает -1.
<?php

$fp = fopen('somefile.txt', 'r');

// читаем немного данных
$data = fgets($fp, 4096);

// перемещаемся назад к началу файла
// то же самое, что и rewind($fp);
fseek($fp, 0);

?>

bool feof ( resource $handle )

  • Проверяет, достигнут ли конец файла.

int fwrite ( resource $handle , string $string [, int $length ] ) и fputs()

  • Записывает содержимое string в файловый поток.
  • Если передан аргумент length, запись остановится после того, как length байтов будут записаны или будет достигнут конец строки string, смотря что произойдёт первым.
  • Возвращает количество записанных байт или FALSE в случае ошибки.
  • При попытке записи в файл, открытый только для чтения не будет ошибки, функция лишь вернет FALSE.

fclose($resource)

  • Закрывает ресурс

fputcsv($resource,$array)

  • Форматирует строку в виде CSV и записывает её в файловый указатель.

fscanf($resource,$format) , fprintf($resource,$format) и fsprintf($resource,$format)

  • тоже что и sscanf(), printf() and sprintf() только для ресурсов.

fpassthru($resource)

  • Выводит все оставшиеся данные из файлового указателя

fflush($resource)

  • Сброс буферизованных данных в файл.

fgetc($resource)

  • Считывает символ из файла.

fgetcsv($resource)

  • Производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива.

fgets($resource)

  • Читает строку из файлового указателя.

fgetss($resource)

  • Прочитать строку из файла и отбросить HTML-теги.

fnmatch($pattern,$string)

  • Проверяет совпадение имени файла с шаблоном.

fstat($resource)

  • Собирает статистическую информацию об открытом файле в виде массива.
<?php

// открываем файл
$fp = fopen("/etc/passwd", "r");

// собираем статистику
$fstat = fstat($fp);

// закрываем файл
fclose($fp);

// отображаем только ассоциативную часть
print_r(array_slice($fstat, 13));
/*
Array
(
    [dev] => 771
    [ino] => 488704
    [mode] => 33188
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 0
    [size] => 1114
    [atime] => 1061067181
    [mtime] => 1056136526
    [ctime] => 1056136526
    [blksize] => 4096
    [blocks] => 8
)
*/
?>

ftruncate($resource,$size)

  • Урезает файл до указанной длинны.

Функции для работы с именами файлов и директориями

file_exists($filename)

  • Проверяет наличие указанного файла или каталога.

is_readable($filename)

  • Возвращает TRUE, если файл или директория, указанная в filename существует и доступна для чтения, иначе возвращает FALSE.

is_writable($filename)

  • Возвращает TRUE, если файл filename существует и доступен для записи. Аргумент filename может быть именем директории, что позволяет вам проверять директории на доступность для записи.

is_file($filename)

  • Возвращает TRUE, если файл существует и является обычным файлом, иначе возвращает FALSE.

is_dir($pathname)

  • Определяет, является ли имя файла директорией.

is_link($filename)

  • Определяет, является ли файл символической ссылкой.

is_executable($pathname)

  • Определяет, является ли файл исполняемым.

file_get_contents($filename,$use_include,$context,$offset)

  • Возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE.

readfile($filename)

  • Читает файл и записывает его в буфер вывода.
  • Возвращает количество прочитанных из файла байт.

file($filename)

  • Читает содержимое файла и помещает его в массив. Каждый элемент массива соответствует строке файла, с символами новой строки включительно.

file_put_contents($filename,$data,$flag)

  • Пишет строку в файл.
  • Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан, за исключением случая, если указан флаг FILE_APPEND.

fileatime($filename)

  • Возвращает время последнего доступа к файлу.

filectime($filename)

  • Возвращает время изменения индексного дескриптора файла.

fileinode($filename)

  • Возвращает номер индексного дескриптора файла.

filemtime($filename)

  • Возвращает время последней записи блоков файла, иначе говоря, изменения содержания файла.

filegroup($filename)

  • Возвращает идентификатор группы файла в виде числа.

fileowner($filename)

  • Возвращает числовой идентификатор владельца указанного файла.

fileperms($filename)

  • Возвращает права доступа на указанный файл в числовом виде.

filesize($filename)

  • Возвращает размер указанного файла в байтах.

filetype($filename)

  • Возвращает тип файла. Возможными значениями являются fifo, char, dir, block, link, file, socket и unknown.

clearstatcache()

  • Очищает кэш состояния файлов.

touch($filename,$time)

  • Устанавливает время доступа и модификации файла.
  • Если файл не существует, он будет создан.
  • Если аргумент time не указан, используется текущее время.

stat($filename)

  • Возвращает информацию о файле.

tempnam($dir,$prefix)

  • Создаёт файл с уникальным именем в определённой директории с правами 0600. Если эта директория не существует, tempnam() может создать файл во временной директории системы и вернуть полный путь к этому файлу, включая его имя.
  • Возвращает имя нового временного файла (вместе с путем) или FALSE в случае неудачи.

tmpfile()

  • Создаёт временный файл с уникальным именем, открывая его в режиме чтения и записи (w+), и возвращает файловый указатель.
  • Этот файл автоматически удаляется после закрытия (например вызовом функции fclose(), или если не осталось ни одной ссылки на указатель файла, возвращаемый tmpfile()), или при завершении работы скрипта.

basename($filename,$suffix)

  • Возвращает последний компонент имени из указанного пути.
  • Если компонент имени заканчивается на suffix, то он также будет отброшен.

pathinfo($path)

  • Возвращает информацию о path в виде ассоциативного массива или строки в зависимости от options.
  • Если параметр options не передан, то возвращаемый ассоциативный массив (array) будет содержать следующие элементы: dirname, basename, extension (если есть) и filename.
  • Замечание: Если path не содержит расширения, то не будет возвращен элемент extension.
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // начиная с PHP 5.2.0

/*
/www/htdocs/inc
lib.inc.php
php
lib.inc
*/
?>

dirname($filename)

  • Возвращает имя родительского каталога из указанного пути.
  • Возвращает путь к родительской директории. Если в параметре path не содержится слешей, будет возвращена точка ('.').

disk_free_space($directory) / diskfreespace($directory)

  • Возвращает размер доступного пространства в каталоге или в файловой системе.

disk_total_space($directory)

  • Функция возвращает общий размер в байтах указанного раздела диска или каталога.

copy($source,$destination)

  • Копирует файл source в файл с именем dest.

unlink($filename)

  • Удаляет файл.

rename($oldfilename,$newfilename)

  • Пытается переименовать oldname в newname, перенося файл между директориями, если необходимо. Если newname существует, то он будет перезаписан.

parse_ini_file($filename)

  • Загружает ini-файл, указанный в аргументе filename, и возвращает его настройки в виде ассоциативного массива.

parse_ini_string($string)

  • возвращает настройки из строки ini в виде ассоциативного массива.

popen($command,$mode)

  • Открывает файловый указатель процесса. Например, $command = '/path/to/executable 2>&1';

pclose($resource)

  • Закрывает файловый указатель на канал, открытый при помощи popen().

Функции для работы с каталогами

mkdir($pathname,$mode)

  • Пытается создать директорию, заданную в pathname.

rmdir($pathname)

  • Удаляет директорию.

chdir($directory)

  • Изменяет текущий каталог PHP на указанный в качестве параметра directory.

chroot($directory)

  • Изменяет корневой каталог текущего процесса на переданный в качестве параметра directory и меняет текущий каталог на "/".

opendir($directory)

  • Открывает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir().

closedir($resource)

  • Освобождает дескриптор каталога.

readdir($resource)

  • Получает элемент каталога по его дескриптору.

scandir($resource,$order)

  • Получает список файлов и каталогов, расположенных по указанному пути.

rewinddir($resource)

  • Сбросить дескриптор каталога.

getcwd()

  • Получает имя текущего рабочего каталога.

dir($directory)

  • Возвращает экземпляр класса Directory.