Создание, открытие, чтение, запись, удаление и проверка наличия файла в PHP. Работа с файлами в PHP. Чтение файла, запись в файл. PHP учебник. Удаление файлов, изменение chmod, работа с каталогами. C Php данные из файла

В предыдущем уроке мы научились использовать РНР для доступа к файловой системе сервера. В этом уроке используем эту информацию для чтения из простого текстового файла.

Текстовые файлы отлично подходят для хранения разного рода данных. Они не так гибки, как базы данных, но обычно не требую такого количества памяти. Более того, текстовые файлы имеют формат, который читается на большинстве систем.

Открыть текстовый файл

Для открытия текстового файла используем функцию fopen . Вот её синтаксис:

Fopen(filename, mode )

Filename Имя открываемого файла. mode Mode/Режим может быть "r" (reading/чтение), "w" (writing/запись) или "a" (appending/присоединение). В этом уроке мы будем только читать из файла и, соответственно, используем "r". В следующем уроке мы научимся записывать и присоединять текст.

Примеры этого урока используют файл unitednations.txt . Это простой список программ и фондов ООН и их доменов. Можете загрузить этот файл или создать свой и использовать его в примерах.

Сначала попробуем открыть unitednations.txt:

// Открыть текстовый файл // Закрыть текстовый файл fclose($f); ?>

Пример 1: Чтение строки из текстового файла

В файле систематизированно записаны: название программы, запятая, домен. Как вы, вероятно, могли предположить, в файле с разделением запятыми можно записать куда больше информации.

Для получения информации из каждой строки используем массив. См. в Уроке 8 о массивах.

Чтение из текстовых файлов $f = fopen("unitednations.txt", "r"); // Читать построчно до конца файла while (!feof($f)) { // Создать массив с запятой-разделителем $arrM = explode(",",fgets($f)); // Записать ссылки (получить данные из массива) echo "

  • " . $arrM. "
  • "; } fclose($f); ?>

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

    В следующем уроке мы мы посмотрим, как записать в текстовый файл.

    В PHP часто приходится иметь дело с созданием файла...все очень просто нет файла на диске, код прогнался и файл появился, далее можно считать этот файл в другую переменную или даже любую страницу в интернете и потом что-нибудь туда записать...но для этого надо знать спец функции...об этом в этой статье...

    Чтобы создать файл на php в исполняемом скрипте надо всего лишь указать несколько функций:

    Рассмотрим сразу пример:

    $text = "Какой-то тут текст для записи в файл";
    $fp = fopen("file.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    Тут вы должны знать :

    fopen() - функция открывает файл чтения или для записи и уточнениями;

    Это уточнения (параметр mode функции fopen) очень важно:

    • "r " - открыть файл в php ТОЛЬКО для чтения . Курсор помещается в начало.
    • "r+ " - открыть файл в php для чтения и для записи . Курсор помещается в начало. !!! - при этих двух режимах r и r+ файлы уже должны быть созданы(иначе вылезет ошибка Warning: fopen(file.txt) : failed to open stream: No such file or directory in ... ), а мы лишь читаем или у нас есть возможность дописывать.
    • "w " - открывается файл ТОЛЬКО для записи. Файл урезается до нулевой длины - то есть затирается. Записывается, что нужно и Курсор ставится в начало.
    • "w+ " - открывается файл для записи И ЧТЕНИЯ! Остальное то же самое что и в режиме "w". !!! - при этих двух режимах - если файл не был создан - ПРЕДПРИМЕТСЯ ПОПЫТКА ЕГО СОЗДАТЬ!
    • "a " - открыть файл ТОЛЬКО для записи. В отличие от "w" этот параметр не затирает содержимое файла, а ставит курсор в конец строки и добавляет в конец содержимое, которое мы хотели добавить.
    • "a+ " - открыть файл для записи и чтения.

    fwrite ($fp, $text) - функция записи в файл на php - то есть то что находится в переменной $text записывается в файл, который находится в переменной $fp;

    fclose ($fp) - функция закрытия файла, который мы записали в переменную $fp;

    Все теперь вы спокойно можете создавать правильно файлы на php, открывать их для чтения и редактирования.

    Полезные дополнения и функции PHP для работы с открытым файлом:

    while(!feof($fp)){
    $mytext = fgets($fp, 99);
    echo $mytext."
    ";
    }

    здесь выполняется условие - "пока не достигнут конец файла то делай то то" while(!feof($fp))

    1. Функция fgets ($fp, 99) - позволяет разделить все содержимое на участки в 99 байт и далее, чтобы это отчетливее увидеть мы помещаем тег

    Эта функция string fgets (resource handle [, int length]) по умолчанию принимает в параметр length 1024 байта(1 килобайт), если не указать так и будет. Этот параметр необязателен с PHP 4.2.0 (В случае ошибки возвращает FALSE)

    Доп функции для открытия, записи и создания файла

    Функция - int readfile (string filename [, bool use_include_path [, resource context]]) - считываем файл как единое целое.

    Читает файл и записывает содержимое в буфер вывода. И возвращает количество выведенных байт. В случае ошибки вернет, если не использована собачка - @readfile.

    Что-то подобное получится:

    В конце слова тег стоят
    .

    б. Функция - array file (string filename [, int use_include_path [, resource context]]), делает то же самое, что и функция readfile, за одним исключением она добавляет содержимое файла в массив:

    Таким образом можно считывать любые странички в интернете: $lines = file("http://сайт/"); и перебрать массив через функцию foreach;

    3а. Функция string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]]) - позволяет получить содержимое в виде одной строки.

    Это более универсальная функция PHP для считывания файла, похожа на функцию file, только содержимое возвращается в строку, а не в массив и можно задавать условия - с какого байта начинать - offset и с какого заканчивать - maxlen . При неудаче вернет FALSE.

    Важно!!! - в этом случае функция заменяет сразу 3: fopen(), fread() и fclose() и таким образом избавляет от мароки.

    3б. Функция int file_put_contents (string filename, mixed data [, int flags [, resource context]]) - идентична последовательному вызову функций fopen(), fwrite() и fclose() - возвращает количество записанных байт.

    В общем виде взаимодействие с файлами в PHP сводится к открытию файла, выполнению с ними необходимых действий и закрытию файла. При открытии файла определяется режим дальнейшей с ним работы. Это может быть открытие для чтения, записи, добавления данных. Есть так же режимы открытия файла, совмещающие в себе одновременно и чтение и запись.

    Существует множество возможностей выполнять чтение из файлов – можно получить данные в разной форме – построчное считывание, получение массива строк и так далее.

    Создание и запись файла

    Для создания файла, необходимо выполнить открытие файла в режиме записи. Открытие файла выполняется функцией fopen . Первым параметром этой функции указывает путь к файлу. Второй параметр указывает на режим открытия файл. Для создания файла нужно указать режим записи файла - "w".

    $f = fopen("myfile.txt" , "w" );

    Если файл с таким именем уже есть, то режим записи позволит создать новый пустой файл на месте существующего, удалив все его данные.

    * Еще существует параметр "w+" , позволяющий, открывать одновременно для чтения и записи. При этом, если файл с таким именем уже существовал, данные в нем сотрутся.

    При выполнении операции открытия, функция вернет значение – дескриптора файла – специальной файловой переменная, которая будет указывать последующим функциям с каким именно файлом выполнять свои действия.

    Для добавления новых данных в открытый в режиме записи файл используется функция fwrite . Первым параметром указывается дескриптор файла. Затем строка, которую нужно записать в файл. При необходимости, третьим параметром можно ограничить количество записываемых символов.

    fwrite($f, "Мой текст для записи в файл." );

    После записи всех строк, его необходимо закрыть. Для этого применяется функция fclose . Единственным параметром для нее служит дескриптор файла.

    fclose($f);

    В итоге, код создания и сохранения файла выглядит следующим образом:

    $f = fopen("myfile.txt" , "w" );
    fwrite($f, "Первая строка.\r\n" );
    ...
    fwrite($f, "Последняя строка.\r\n" );
    fclose($f);

    * Символы "\r\n" означают символ конца строки. Если не добавлять, все строки в записанном файле объединятся в одну строку.

    Добавление данных в существующий файл

    Для того, чтобы дописать какую-либо информацию в уже созданный файл, его нужно открыть в режиме записи, но с сохранением имеющейся информации. Т.е. файл будет открыт так же для записи, но при записи в такой файл, они будут добавляться в его конец.

    $f = fopen("myfile.txt" , "a" ); "// Параметр "a" указывает открыть в режиме добавления"
    fwrite($f, "Новая строка\r\n" );
    fclose($f);

    Если же файла с указанным именем не существует, файл будет создан и все данные будут записаны в него.

    * Еще есть режим "a+" , открывающий файл для чтения и записи, с переходом в конец файла.

    Чтение из файла

    Для чтения из файла, функции fopen назначается параметр "r", что означает, что файл будет открыт только для чтения. Чтение из файла выполняет функция fgets . Первым параметром указывается дескриптор файла. Второй, необязательный, параметр определяет размер считываемой строки. Если второй параметр не указывать, текущая строка будет считана до символа конца строки.

    $f = fopen("myfile.txt" , "r" ); // Параметр "r" указывает открыть в режиме чтения
    $s = fgets($f);
    echo $s;
    fclose($f);

    * Режим "r+" открывает файл для чтения и записи.

    Для считывания всех строк из файла, можно воспользоваться циклом, в котором будет считываться по одной строке до конца файла:

    $f = fopen("myfile.txt" , "r" );
    while (!feof($f)){
    $s = fgets($f);
    echo $s;
    }
    fclose($f);

    Функция feof используется в условии цикла для определения конца файла и завершения цикла считывания.

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

    readfile("myfile.txt" );

    $mas = file("myfile.txt" );

    foreach ($mas as $m)
    echo $m;

    С помощью функции fgetc можно считывать содержимое файла посимвольно:

    $f = fopen("myfile.txt" , "r" );
    while (!feof($f)){
    $s = fgetc($f);
    echo $s;
    }
    fclose($f);

    Удаление файла

    Удаление файла выполняется функцией unlink . В параметре указывается путь к удаляемому файлу.

    unlink("myfile.txt" );

    Проверка существует ли файл

    Иногда, прежде чем, выполнять какие-либо действия с файлом необходимо проверить, существует ли он. Для этого используется функция file_exists . В параметре указывается путь к файлу.

    if (file_exists("myfile.txt" ))
    echo "Такой файл есть." ;
    else
    echo "Файла с таким именем нет." ;

    Об использовании функций fopen, fclose, feof, fgets, fgetss, и fscanf

    Давайте перечислим все возможности

    Одним из преимуществ работы с современными языками программирования, такими как PHP, является количество доступных возможностей. PHP легко мог бы присвоить девиз языка Perl, "Существует несколько способов сделать что-либо", особенно, когда речь идет об обработке файлов. Но при изобилии доступных средств, возникает вопрос, какое из них лучше для выполнения работы. Конечно, в действительности, ответ на этот вопрос зависит от того, какие цели вы ставите при обработке файла, поэтому изучение всех возможностей языка стоит потраченного времени.

    Традиционные методы fopen

    Методы fopen , возможно, лучше других знакомы программистам C и C++ былых времен, поскольку в большей или меньшей степени являются именно теми инструментами, которые на протяжении долгих лет были всегда у вас под рукой, если вы работали с этими языками программирования. Для любого из этих методов вы выполняете стандартную процедуру, используя fopen для открытия файла, функцию для чтения данных, а затем fclose для закрытия файла, как показано в Листинге 1.

    Листинг 1. Открытие и чтение файла с помощью fgets
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) { $line = fgets($file_handle); echo $line; } fclose($file_handle);

    Хотя эти функции знакомы большинству опытных программистов, позвольте мне проанализировать их работу. В действительности вы выполняете следующие шаги:

    1. Открываете файл. $file_handle хранит ссылку на сам файл.
    2. Проверяете, не достигли ли вы конца файла.
    3. Продолжаете считывание файла, пока не достигнете конца, печатая каждую строку, которую читаете.
    4. Закрываете файл.

    Помня об этом, я рассмотрю каждую использованную здесь функцию для работы с файлами.

    Функция fopen

    Функция fopen устанавливает связь с файлом. Я говорю "устанавливает связь, " поскольку, кроме открытия файла, fopen может открыть и URL:

    $fh = fopen("http://127.0.0.1/", "r");

    Это строка программы создает связь с вышеуказанной страницей и позволяет вам начать ее чтение как локального файла.

    Примечание: Параметр "r" , использованный в fopen , указывает на то, что файл открыт только для чтения. Поскольку запись в файл не входит в круг вопросов, рассматриваемых в данной статье, я не стану перечислять все возможные значения параметра. Тем не менее, вам необходимо изменить "r" на "rb" если вы производите чтение из двоичных файлов для межплатформенной совместимости. Ниже будет приведен пример данного типа.

    Функция feof

    Команда feof определяет, произведено ли чтение до конца файла, и возвращает значение True (Истина) или False (Ложь). Цикл, приведенный в продолжается, пока не будет достигнут конец файла "myfile." Обратите внимание, что feof также возвращает False, если вы читаете URL и произошло превышение времени ожидания подключения, поскольку не имеется более данных для считывания.

    Функция fclose

    Пропустим середину Листинга 1 и перейдем в конец; fclose выполняет задачу, противоположную fopen: она закрывает подключение к файлу или URL. После выполнения данной функции вы больше не сможете выполнять чтение из файла или сокета.

    Функция fgets

    Возвращаясь на несколько строк назад в Листинге 1, вы попадаете в самый центр процесса обработки файлов: непосредственно чтение файла. Функция fgets - это выбранное вами "оружие" для первого примера. Она захватывает строчку данных из файла и возвращает ее как строку. Оттуда вы можете выводить данные или обрабатывать их иным образом. В примере, приведенном в Листинге 1, распечатывается весь файл целиком.

    Если вы решите ограничить размер порции данных, с которой работаете, можно добавить fgets аргумент для ограничения максимальной длины строки захватываемых данных. Например, используйте следующий программный код для ограничения длины строки в 80 символов:

    $string = fgets($file_handle, 81);

    Вспомните "\0", указатель конца строки в C и установите длину на один символ больше, чем вам в действительности необходимо. Как видите, в приведенном выше примере используется 81, тогда как вам нужно 80 символов. Сделайте вашей привычкой добавление дополнительного символа всегда, когда вам понадобится задать ограничение длины строки для данной функции.

    Функция fread

    Функция fgets - лишь одна из многих имеющихся функций для чтения файла. Это одна из наиболее часто использующихся функций, поскольку построчная обработка файла в большинстве случаев оказывается самой разумной. На самом деле, сходные возможности предлагают несколько других функций. Как бы то ни было, построчный анализ - это не всегда то, что вам нужно.

    И здесь мы обращаемся к fread . Функция fread используется в несколько иных целях, чем fgets: она предназначена для чтения из двоичных файлов (то есть файлов, не состоящих изначально из текста, удобочитаемого для человека). Поскольку понятие "строк" не актуально для двоичных файлов (логические структуры данных обычно не разбиваются на строки), вы должны указывать количество байтов, которое нужно считывать.

    $fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

    В приведенном выше примере считывается 4096 байтов (4 KB) данных. Обратите внимание, что, независимо от указанного вами значения, fread будет считывать не более 8192 байтов (8 KB).

    Допуская, что файл не более 8 KB, фрагмент программы, приведенный ниже, должен считывать весь файл в одну строку.

    $fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose($fh);

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

    Функция fscanf

    Возвращаясь к обработке строк, отметим, что fscanf также является преемницей традиционной файловой библиотечной функции C. Если вы не знакомы с ней, fscanf считывает поля данных в переменные из файла.

    list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

    Строки форматирования, использованные в данной функции, описаны во многих источниках, таких как PHP.net, поэтому я не стану повторять эту информацию здесь. Достаточно сказать, что форматирование строк является очень гибким. Следует также упомянуть, что все поля помещаются в переменную, возвращаемую функцией. (В языке C они передавались бы как аргументы.)

    Функция fgetss

    Функция fgetss отличается от традиционных функций для работы с файлами и дает вам лучшее представление о возможностях PHP. Она работает наподобие fgets , но отбрасывает любые обнаруженные ею теги HTML или PHP, оставляя только "голый" текст. Возьмем приведенный ниже HTML-файл.

    Листинг 2. Пример файла HTML
    My title

    If you understand what "Cause there ain"t no one for to give you no pain" means then you listen to too much of the band America

    Пропустим его через функцию fgetss .

    Листинг 3. Использование fgetss
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) { echo = fgetss($file_handle); } fclose($file_handle);

    Вот что вы получите в качестве выходных данных:

    My title If you understand what "Cause there ain"t no one for to give you no pain" means then you listen to too much of the band America

    Функция fpassthru

    Вне зависимости от того, как вы считываете данные из файла, вы можете вывести оставшиеся данные на печать, используя стандартный канал вывода информации, посредством функции fpassthru .

    fpassthru($fh);

    Эта функция выводит данные на печать, поэтому вам не нужно помещать их в переменную.

    Нелинейная обработка файла: перемещение по файлу

    Конечно, описанные выше функции позволяют вам выполнять чтение из файла лишь последовательно. Более сложные файлы могут потребовать перемещения к разным частям файла в его начале или конце. Для этого вам потребуется функция fseek .

    fseek($fh, 0);

    В приведенном выше примере осуществляется переход назад, к началу файла. Если вы не хотите перемещаться в самое начало файла - скажем, одного килобайта вполне достаточно - вы просто пишете:

    fseek($fh, 1024);

    Начиная с PHP V4.0, доступны также несколько других опций. Например, если нужно перейти вперед на 100 байт от вашей текущей позиции, вы можете использовать следующий код:

    fseek($fh, 100, SEEK_CUR);

    Аналогично, переход назад на 100 байт осуществляется посредством:

    fseek($fh, -100, SEEK_CUR);

    Если вы хотите перейти назад в положение 100 байт до конца файла, используйте вместо этого SEEK_END .

    fseek($fh, -100, SEEK_END);

    После достижения нового положения вы можете воспользоваться fgets , fscanf или другой функцией для чтения данных.

    Примечание: вы не можете использовать fseek в дескрипторах файла, ссылающихся на URL.

    Захват целого файла

    Теперь мы переходим к рассмотрению некоторых уникальных возможностей PHP для обработки файлов: обработка больших блоков данных в одной или двух строках. Например, как можно захватить файл и вывести все его содержимое на вашу Web-страницу? Что же, вы видели пример использования цикла с fgets . Но как сделать это проще? Процесс почти смехотворно прост при использовании fgetcontents , которая помещает весь файл в строку.

    $my_file = file_get_contents("myfilename"); echo $my_file;

    Хотя это и не лучший вариант, вы можете записать эту команду еще короче:

    echo file_get_contents("myfilename");

    Данная статья в первую очередь посвящена обработке локальных файлов, однако, стоит отметить, что вы можете также захватить, отобразить и проанализировать другие Web-страницы с помощью описанных функций.

    echo file_get_contents("http://127.0.0.1/");

    Это команда фактически та же, что и:

    $fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

    Должно быть, вы смотрите на эти примеры и думаете, "Это все-таки слишком трудоемкий способ". PHP-разработчики согласны с вами. Поэтому вы можете сократить приведенную выше команду до:

    readfile("http://127.0.0.1/");

    Функция readfile передает на вывод все содержимое файла или Web-страницы в выходной буфер по умолчанию. По умолчанию эта команда выводит сообщение об ошибке при сбое. Во избежание такого поведения (если вы этого хотите), попробуйте команду:

    @readfile("http://127.0.0.1/");

    Конечно, если вам необходимо обрабатывать содержимое файлов, то одна строка, возвращаемая file_get_contents - это, пожалуй, слишком. Вы, возможно, захотите сначала разбить ее на части с помощью функции split() .

    $array = split("\n", file_get_contents("myfile"));

    Но к чему вам все эти сложности, если есть идеально подходящая функция, которая сделает за вас эту работу? Функция PHP file() выполняет эту задачу в один шаг: она возвращает строковый массив, элементами которого являются строки файла.

    $array = file("myfile");

    Следует заметить, что между двумя приведенными выше примерами есть небольшое отличие. Команда split удаляет знаки перехода на новую строку, тогда как при использовании команды file строки массива оканчиваются знаками перехода на новую строку (также, как и при использовании fgets).

    Возможности PHP, тем не менее, далеко превосходят описанные выше. Вы можете разбить целые.ini-файлы в стиле PHP всего одной командой parse_ini_file . Команда parse_ini_file применима к файлам, сходным с приведенным в Листинге 4.

    Листинг 4. Пример файла.ini
    ; Comment name = "King Arthur" quest = To seek the holy grail favorite color = Blue Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

    Следующие команды представляют файл в виде массива, а затем выводят этот массив на печать:

    $file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

    В результате будут получены следующие выходные данные:

    Листинг 5. Выходные данные
    Array ( => King Arthur => To seek the Holy Grail => Blue => Mark Twain => Whoopi Goldberg)

    Конечно, вы можете заметить, что данная команда объединила разделы. Это действие по умолчанию, но вы легко можете произвести необходимую настройку, воспользовавшись вторым аргументом parse_ini_file: process_sections , который является переменной логического типа (Boolean). Установите значение process_sections как True (истина).

    $file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

    И ваши выходные данные будут иметь вид:

    Листинг 6. Выходные данные
    Array ( => Array ( => King Arthur => To seek the Holy Grail => Blue) => Array ( => Mark Twain => Whoopi Goldberg))

    PHP помещает данные в легко разбиваемый для анализа многомерный массив.

    Но это лишь верхушка айсберга, если говорить об обработке файлов в PHP. Более сложные функции, например tidy_parse_file и xml_parse могут помочь вам с обработкой соответственно HTML- и XML-документов. Обратитесь к разделу , чтобы получить более подробную информацию о работе этих функций. Обе они стоят внимания, если вы будете работать с файлами указанных типов, но вместо рассмотрения всех возможных типов файлов, вы можете внимательно ознакомиться с содержанием данной статьи, где есть несколько неплохих общих правил по работе с функциями, описанными мной к настоящему моменту.

    Хороший стиль программирования

    Никогда не считайте, что все в вашей программе будет работать так, как было задумано. Например: что, если файл, который вы ищете, был перемещен? Что, если в результате изменения прав доступа вы не можете прочитать содержимое файла? Можно заранее проверить наличие файла и права на его чтение, воспользовавшись методами file_exists и is_readable .

    Листинг 7. Использование file_exists и is_readable
    $filename = "myfile"; if (file_exists($filename) && is_readable ($filename)) { $fh = fopen($filename, "r"); # Processing fclose($fh); }

    Тем не менее, на практике этот фрагмент программы будет, пожалуй, чрезмерным для вашей задачи. Обработка значений, возвращаемых fopen , проще и точнее.

    if ($fh = fopen($filename, "r")) { # Processing fclose($fh); }

    Поскольку fopen возвращает значение False в случае неудачного выполнения, это послужит гарантией того, что обработка файла будет производиться только в том случае, если файл удалось открыть. Конечно, если файл не существует или нечитаем, вы ожидаете, что возвращаемое значение будет отрицательным. Следовательно такая проверка представляет собой ловушку, в которую попадают все потенциально возможные неполадки. В качестве альтернативы можно использовать завершение работы программы или вывод сообщения об ошибке, если не удается открыть файл.

    Как и fopen , функции file_get_contents , file и readfile возвращают значение False, если не удается открыть или обработать файл. Функции fgets , fgetss , fread , fscanf и fclose также возвращают значение False при возникновении ошибки. Конечно, за исключением fclose , вы, вероятно уже обработали возвращенные ими результаты. Что касается fclose , мало что можно сделать, если дескриптор файла не закрывается должным образом, поэтому проверка возвращенного значения функции fclose , как правило, является излишней.

    Выбор за вами

    PHP не испытывает недостатка в эффективных способах чтения и анализа файлов. Классические функции, такие как fread , могут надежно служить вам большую часть времени, или же вас может больше привлечь простота readfile , если это необходимо для выполнения задачи. Выбор, на самом деле, зависит от того, что вы пытаетесь выполнить.

    Если вы обрабатываете большие объемы данных, вероятно, fscanf окажется более полезной и эффективной, чем, скажем, использование file в сочетании с последующими командами split и sprintf . Если же вы просто отображаете текст большого объема с незначительными изменениями, напротив, использование функций file , file_get_contents , или readfile , возможно, будет более целесообразным. Это решение, вероятно, будет верным при использовании PHP для кэширования или даже создания временного прокси сервера.

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

    string fgets (resource handle [, int length])

    Возвращает строку размером в length - 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle . Чтение заканчивается, когда количество прочитанных байтов достигает length - 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам.

    В случае возникновения ошибки функция возвращает FALSE .

    Наиболее распространенные ошибки:

    Программисты, привыкшие к семантике "C" функции fgets() , должны принимать во внимание разницу в том, каким образом возвращается признак достижения конца файла (EOF).

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

    Ниже приведен простой пример:


    Пример 1. Построчное чтение файла

    $handle = fopen ("/tmp/inputfile.txt" , "r" );
    while (! feof ($handle )) {
    $buffer = fgets ($handle , 4096 );
    echo $buffer ;
    }
    fclose ($handle );
    ?>

    Замечание: Параметр length стал необязательным, начиная с PHP версии 4.2.0. Если этот параметр опущен, длина строки принимается за 1024. С версии PHP 4.3, отсутствие параметра length будет приводить к чтению потока до конца строки. Если длина большинства строк в файле превышает 8 килобайт, наиболее эффективным решением в отношении ресурсов, используемых скриптом, будет указание максимальной длины строки.

    Замечание: Данная функция может корректно обрабатывать двоичные данные, начиная с версии PHP 4.3. Более ранние версии не обладали этой функциональностью.