fread

Читает из открытого файла определенное количество символов.
Синтаксис:

string fread(int $f, int $numbytes)

Читает из файла $f $numbytes символов и возвращает строку этих символов. После чтения указатель файла продвигается к следующему после прочитанного блока позициям. Если $numbytes больше, чем можно прочитать из файла, возвращается то, что удалось считать. Этот прием можно использовать, если вам нужно считать в строку файл целиком. Для этого просто задайте в $numbytes очень большое число. Но если вы заботитесь об экономии памяти в системе, так поступать не рекомендуется.

readfile()

Выводит файл (PHP 3, PHP 4, PHP 5)

Описание:

int readfile ( string filename [, bool use_include_path [, resource context]] )

Читает файл и записывает его в буфер вывода.

Параметры:

filename - имя читаемого файла
use_include_path - необязательный параметр; если TRUE, поиск файла будет происходить также в include_path (директива php.ini).
context - потоковый ресурс среды окружения.

Возвращает количество прочитанных из файла байт. В случае возникновения ошибки вернёт FALSE, если только функция не была вызвана как @readfile(), и выведет сообщение об ошибке.

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers".

Пример. Принудительный старт скачивания файла

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

В результате работы вышеприведенного кода появится нечто подобное:

fflush()

Сброс буфера вывода в файл (PHP 4 >= 4.0.1, PHP 5)

Описание:

bool fflush ( resource handle )

Данная функция осуществляет сброс буферизованных данных в файл, на который указывает handle.

Возвращает TRUE в случае успешного завершения, FALSE - в противном случае.

Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen().

stream_set_write_buffer()

Устанавливает файловый буфер данного потока (PHP 4 >= 4.3.0, PHP 5)

Описание:

int stream_set_write_buffer ( resource stream, int buffer )

Вывод в файл с использованием fwrite() использует в штатном режиме буфер 8K. Это значит, что если имеется два процесса, желающих вывести данные в один и тот же поток вывода (файл), каждый из этих процессов приостанавливается после вывода каждых 8К для того, чтобы позволить вывести данные другому процессу. Stream_set_write_buffer() устанавливает буферизацию для операций записи в данный файлоуказующий поток. Если buffer установлен 0, то операция записи является небуферизованной. Это гарантирует, что все процессы записи fwrite() завершаются до того, как другим процессам открывается доступ к записи в тот же поток вывода.

Функция возвращает 0 при успешном завершении, или EOF если запрос прерывания ввода/вывода был отклонен.

Следующий пример демонстрирует использование stream_set_write_buffer() для создания небуферизованного потока

<?php
$fp = fopen($file, "w");
if ($fp) {
stream_set_write_buffer($fp, 0);
fwrite($fp, $output);
fclose($fp);
}
?>

set_file_buffer()

Псевдоним функции stream_set_write_buffer() (PHP 3 >= 3.0.8, PHP 4 >= 4.0.1, PHP 5)

Описание: функция является псевдонимом для фукнции stream_set_write_buffer().

highlight_file()

Вывод содержимого файла с цветовой разметкой.

Синтаксис:

boolean highlight_file(string filename);

Имя или путь файла указывается в аргументе. Цвета выделения синтаксиса определяются в файле конфигурации PHP. Возвращает true или false при ошибке.

Например, чтобы заставить сервер Apache при получении запроса с URL, содержащего значение вида "http://имя.сервера/source/путь/к/файлу.php", выводит листинг файла "http://имя.сервера/source/путь/к/файлу.php", сделайте следующее. Добавьте в файл httpd.conf следующий фрагмент:

# Используем директиву "ForceType" чтобы указать,
# что значение source в URL - не каталог, а имя сценария PHP
<Location /source>
ForceType application/x-httpd-php
</Location>

Создайте в корневом web-каталоге следующий файл с именем source:

<HTML><HEAD>
<TITLE>Source Display</TITLE>
</HEAD>
<BODY bgcolor=#FFEEDD>

<?php
$script = getenv ("PATH_TRANSLATED");
if(!$script) {
echo "<BR><B>ERROR: Укажите имя сценария</B><BR>";
} else {
if(ereg("(.php|.inc)$",$script)) {
echo "<H1>Листинг файла: $PATH_INFO</H1>n<hr>n";
if(!@highlight_file($script))
echo "Ошибка вывода файла";
} else {
echo "<H1>ERROR: Показываются только листинги PHP файлов </H1>";
}
}

echo "<HR>Распечатано: ".date("Y/M/d H:i:s",time());

?>

</BODY>
</HTML>

fwrite

Запись в файл.
Синтаксис:

int fwrite(int $f, string $str)

Записывает в файл $f все содержимое строки $str. Эта функция составляет пару для fread(), действуя
"в обратном направлении".

При работе с текстовыми файлами (то есть когда указан символ t в режиме открытия файла)
все n автоматически преобразуются в тот разделитель строк, который принят в вашей операционной системе.

fgets

Читает из файла одну строку, заканчивающуюся символом новой строки n.
Синтаксис:

string fgets(int $f, int $length)

Этот символ также считывается и включается в результат. Если строка в файле занимает больше $length-1 байтов, то возвращаются только ее $length-1 символов. Функция полезна, если вы открыли файл и хотите "пройтись" по всем ее строкам. Однако даже в этом случае (и быстрее) будет воспользоваться функцией File().
Стоит также заметить, что эта функция (как и функция fread()) в случае текстового режима в Windows заботиться о преобразовании пар rn в один символ n.

fputs

Полный аналог fwrite().

Синтаксис:

int fputs(int $f, string $str)

fgetcsv()

Функция для работы с одним из форматов файлов, в котором может сохранять данные Excel.
Синтаксис:

list fgetcsv(int $f, int $length, char $delim=",")

Функция читает строку из файла, заданного дескриптором $f, и разбивает ее по символу $delim. Параметр $delim должен обязательно быть строкой из одного символа, в противном случае принимается во внимание только первый символ этой строки. Функция возвращает получившийся список или false, если строки кончились. Параметр $length задает максимальную длину строки точно так же, как это делается в fgets().
Пустые строки в файле не игнорируются, а возвращаются как список из одного элемента - пустой строки.
Пример:

$f=fopen("file.csv","r") or die("Ошибка");
for($i=0; $data=fgetcsv($f, 1000, ";"); $i++) {
$num = count($data);
if($num==1 && $data[0]==="") continue;
echo "<h3>Строка номер $i ($num полей):</h3>";
for($c=0; $c<$num; $c++)
print "[$c]: $data[$c]<br>";
}
fclose($f);

file_get_contents()

Получить содержимое файла в виде одной строки (PHP 4 >= 4.3.0, PHP 5)

Описание:

string file_get_contents(string filename 
[, bool use_include_path [, resource context [, int offset [, int maxlen]]]])

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

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует алгоритм 'memory mapping' (если поддерживается операционной системой).

Замечание: Если вы открываете URI содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode().

Список изменений

Версия Описание
5.0.0 Добавлена поддержка контекста.
5.1.0 Добавлены аргументы offset и maxlen.

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers". Смотрите более подробную информацию об определении имени файла в описании функции fopen(), а также список поддерживаемых протоколов URL в Прил. M.

Внимание

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как о "SSL: Fatal Protocol Error" в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

file_put_contents()

Записать строку в файл (PHP 5)

Описание:

int file_put_contents(string filename, mixed data [, int flags [, resource context]])

Функция идентична последовательному вызову функций fopen(), fwrite() и fclose(). Возвращаемым функцией значением является количество записанных в файл байтов.

Параметр flags может принимать значение FILE_USE_INCLUDE_PATH и/или FILE_APPEND. Используйте FILE_USE_INCLUDE_PATH с осторожностью.

Также вы можете передать (одномерный) массив в качестве параметра data. Это будет эквивалентно вызову file_put_contents($filename, join('', $array)).

Начиная с версии PHP 5.1.0, вы также можете передавать ресурс потока в качестве аргумента data. В результате оставшийся буфер этого потока будет скопирован в указанный файл. Это похоже на использование stream_copy_to_stream().

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers".

file()

Читает содержимое файла и помещает его в массив (PHP 3, PHP 4, PHP 5)

Описание:

array file (string filename [, int use_include_path [, resource context]])

Данная функция идентична функций readfile() с той разницей, что file() возвращает содержимое прочитанного файла в виде массива. Каждый элемент возвращенного массива содержит соответствующую строку с символами конца строки. В случае ошибки, функция file() возвращает FALSE.

Вы можете указать необязательный параметр use_include_path, равный "1", если хотите, чтобы поиск файла также производился в каталогах, указанных директивой include_path.

<?php
// Получить содержимое файла в виде массива. В данном примере мы используем
// обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
$lines = file('http://www.example.com/');

// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

// Второй пример. Получим содержание web-страницы в виде одной строки.
// См.также описание функции file_get_contents().
$html = implode('', file ('http://www.example.com/'));
?>

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers". Смотрите более подробную информацию об определении имени файла в описании функции fopen(), а также список поддерживаемых протоколов URL в Прил. M.

Замечание: Каждая строка в полученном массиве будет завершаться символами конца строки, поэтому, если вам будет нужно избавиться от этих символов, вы будете должны использовать функцию rtrim().

Замечание: Если у вас возникают проблемы с распознаванием PHP окончания строк при чтении файлов на Macintosh-совместимом компьютере или при чтении файлов, созданных на Macintosh-совместимом компьютере, необходимо включить опцию auto_detect_line_endings.

Замечание: Начиная с PHP 4.3.0, вы можете использовать функцию file_get_contents() для получения содержимого файла в виде строки.

Начиная с PHP 4.3.0, функция file() корректно обрабатывает двоичные данные.

Замечание: Поддержка контекста была добавлена в PHP 5.0.0.

Внимание

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как о "SSL: Fatal Protocol Error" в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

fpassthru()

Выводит все оставшиеся данные из файлового указателя (PHP 3, PHP 4, PHP 5)

Описание:

int fpassthru (resource handle)

Читает указанный файловый указатель с текущей позиции до EOF (конца файла) и записывает результат в буфер вывода.

Если происходит ошибка, fpassthru() возвращает FALSE. В ином случае, fpassthru() возвращает количество символов, прочтнных из handle и переданных на вывод.

Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen().

Вам может понадобиться вызвать rewind() чтобы сбросить файловый указатель на начало файла, если вы уже записывали данные в файл.

Если вы хотите просто сбросить содержимое файла в буфер вывода, предварительно не модифицируя его и не начиная с определённого смещения, вы можете пожелать использовать readfile(), которая избавит вас от лишнего вызова fopen().

Замечание: Во время использования fpassthru() на бинарном файле в сисиемах Windows, вы должны убедиться в том, что открыли файл в бинарном режиме при помощи добавления b к режиму открытия файла, использованному в fopen().

Рекомендуется использовать флаг b при работе с бинарными файлам даже если ваша система этого не требует, чтобы обеспечить более высокую портируемость скриптов.

Использование fpassthru() с бинарными файлами

<?php
// открываем файл в бинарном режиме
$name = ".\public\dev\img\ok.png";
$fp = fopen($name, 'rb');

// отправляем нужные заголовки
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// скидываем картинку и останавливаем выполнение скрипта
fpassthru($fp);
exit;

?>