Чтение файлов и каталогов в php-сценарии, продолжение: файлы

Задание пути к файлу, получение информации о файле и чтение каталога рассматривается в предыдущей статье "Чтение файлов и каталогов в php-сценарии". Поскольку описание различных возможностей чтения данных из файла занимает много места, оно вынесено в эту отдельную статью, которая, тем не менее, является логическим продолжением первой. В этой статье:

Обзор функций

Чтение содержимого файла без предварительного открытия (по пути к файлу)
array file ( string $path [, int $flags= 0 [, resource $context ]] )
возвращает массив строк файла
string file_get_contents ( string $path [, bool use_include_path [, resource $context [, int $offset [, int $maxlen]]]] )
возвращает содержимое файла в виде строки, если заданы необязательные параметры $offset и до $maxlen, начиная с указанного смещения $offset и до $maxlen байтов.
int readfile (string $path [, bool use_include_path [, resource $context]])
читает файл и записывает его в буфер вывода
возвращает количество прочитанных из файла байт. В случае ошибки возвращает FALSE и выводит сообщение об ошибке.
Открытие, закрытие и навигация по открытому файлу
resource fopen (string $path, string $mode [, bool $use_include_path [, resource $zcontext]])
открывает файл или URL (создает дескриптор файла)
режим mode:
'r' - только для чтения; указатель в начале файла. Если файл не существует, возвращает FALSE.
'r+' - для чтения и записи; указатель в начале файла. Если файл не существует, возвращает FALSE.
'w' - только для записи. Содержимое существующего файла стирается. Если файл не существует, пытается создать файл.
'w+' - для чтения и записи; указатель в начале файла. Содержимое существующего файла будет перезаписано. Если файл не существует, пытается создать файл.
'a' - только для записи (для добавления данных в файл); указатель в конце файла. Если файл не существует, возвращает FALSE.
'a+' - для чтения и записи; указатель в конце файла (универчальный режим). Если файл не существует, пытается создать файл.
***После буквы, обозначающей режим, может следовать модификатор
"b" - бинарный (двоичный) режим, применяется по умолчанию
"t" - текстовый режим
***Необязательные аргументы. Можно задать use_include_path, равный 1, если нужно искать файл в каталоге include_path. (Параметр include_path определяется в файле php.ini), а $zcontext задает контекст файла для дополнительной обработки потоков данных. Подробнее
bool fclose( resource $handle )
закрывает дескриптор файла
int fseek ( resource $handle, int $offset[, int $whence ] )
перемещает указатель текущей позиции чтения (или записи) файла, где $whence:
SEEK_SET - смещение = offset байт
SEEK_CUR - смещение = текущее + offset
SEEK_END - смещение = размер файла + offset (offset<0 - смещение от конца файла)
bool feof(resource $handle)
возвращает TRUE, если достигнут конец файла
int ftell(resource $handle)
возвращает текущее положение указателя файла
Чтение предварительно открытого файла
string fread( resource $handle , int $length )
возвращает строку длиной $length
string fgetc (resource $handle)
возвращает символ
string fgets ( resource $handle [, int $length ] )
возвращает строку длиной $length. (Чтение до новой строки или конца файла.) При достижении конца файла возвращает пустую строку.
string fgetss ( resource $handle [, int $length [, string $allowable_tags ]]
возвращает строку длиной $length, из которой удалены HTML-теги. Необязательный параметр $allowable_tags - строка со списком тегов (через запятую), которые не должны удаляться.
array fgetcsv( resource $handle [, int $length [, string $delimiter [, string $enclosure]]] )
читает строку CSV-файла длиной $length и возвращает в виде массива результат разбиения этой строки по первому символу в $delimiter. Необязательные параметры:
$length - должен быть больше самой длинной строки (включая символ конца строки). Если не указан, максимальная длинна строки не ограничена, но функция работает немного медленнее.
$delimiter - разделитель поля (используется только один первый символ), по умолчанию - запятая.
$enclosure - ограничитель поля (используется только один первый символ), по умолчанию - двойная кавычка.
mixed fscanf (resource $handle, string $format [, mixed &$... ])
читает строку файла и помещает элементы, найденные по заданному шаблону, в отдельные переменные. Возвращает количество найденных элементов или массив, если переменные не заданы. Подробнее

Чтение содержимого файла по заданному пути к этому файлу

Если нужно просто прочитать, возможно, не очень большой текстовый файл, можно это сделать с помощью одной функции:

$path="text.txt";
$lines=file($path);  // массив строк, которые можно обработать и
echo join("<>", $lines);// вывести в браузер

Если в файле lines.txt три строки, и он записан в Windows-формате, массив (список) $list содержит три элемента:

Line1rn
Line2rn
Line3

т.е. функция file() не вырезает символы новой строки и не выполняет их трансляцию.

// весь файл в одну строку
$a=file($path, filesize($path));
$a=file_get_contents ($path);// еще проще

// первые 20 байт
$content=file_get_contents("http://www.example.com/text.txt",FALSE,NULL,0,20);

readfile($path);   // вывод содержимого файла

Пример: вывод изображения

Задача: вывести изображение с помощью php так, чтобы был скрыт путь к этому изображению

<html><body>
<img src=showimage.php>
</body></html>

Файл showimage.php:

<?php
header("Content-type: image/jpg");
readfile("image.jpg");
?>

Подавление вывода ошибки

Вы же не хотите показывать сообщение интерпретатора об ошибке пользователю на HTML-странице, если функция открытия файла возвращает FALSE? В предыдущей статье описаны функции, которые позволяют проверить существование файла (file_exists), является ли заданный путь путем к существующему файлу (is_file), и возможность чтения файла (is_readable($path) ), но они применимы только к локальным файлам.

Оператор @

Когда перед php-выражением стоит @, сообщения об ошибках, генерируемые этим выражением, не выводятся, причем это не относится к синтаксическим ошибкам. Для того чтобы сообщение об ошибке сохранялось в переменную среды $php_errormsg, в файле php.ini должна быть включена опция конфигурации track_errors. (Переменная $php_errormsg перезаписывается при появлении каждой новой ошибки.)

//Заведомо неверный путь к файлу
$my_file = @fopen("'non_existent_file");

Это выражение будет проигнорировано, и выполнение сценария продолжится. Но поскольку файл не был открыт, сценарий не может быть нормально выполнен (этот файл был для чего-то нужен!).

Конструкция or die()

Если не удается выполнить какую-то операцию, например, открыть файл, тогда вывести соответствующее сообщение и корректно завершить работу сценария позволяет конструкция

вызов_функции or die("сообщение");

Второй операнд оператора "or" (логическое ИЛИ) выполняется, только когда первый операнд возвращает (равен) FALSE .Например,

$my_file = @fopen ("non_existent_file") or die ("Не удалось открыть файл");

Появится сообщение "Не удалось открыть файл", и работа сценария будет завершена.

Запись опубликована в рубрике PHP с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

* Copy this password:

* Type or paste password here:

3,247 Spam Comments Blocked so far by Spam Free Wordpress