Php прочитать файл в строку. Php создание файла, чтение и запись

03.11.2019 Программы и сервисы

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

file_get_contents — Читает содержимое файла в строку

Описание

String file_get_contents (string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]])

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

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

Замечание :

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

Список параметров

Имя читаемого файла.

Use_include_path

Замечание :

Начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path .

context

Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение NULL .

Смещение, с которого начнется чтение оригинального потока.

Поиск смещения (offset) не поддерживается при работе с удаленными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но этот результат является непредсказуемым, так как он работает на буферизованном потоке.

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

Возвращаемые значения

Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.

Внимание

Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип . Используйте оператор === для проверки значения, возвращаемого этой функцией.

Ошибки

Будет сгенерирована ошибка уровня E_WARNING , если параметр filename не удается найти, параметр maxlength меньше нуля или поиск по смещению offset в потоке завершается неудачно.

Примеры

Пример #1 Получить и вывести исходный код домашней страницы вебсайта

$homepage = file_get_contents ("http://www.example.com/" );
echo $homepage ;
?>

Пример #2 Поиск файлов в include_path

// <= PHP 5
$file = file_get_contents ("./people.txt" , true );
// > PHP 5
$file = file_get_contents ("./people.txt" , FILE_USE_INCLUDE_PATH );
?>

Пример #3 Чтение секции файла

// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ("./people.txt" , NULL , NULL , 20 , 14 );
var_dump ($section );
?>

Результатом выполнения данного примера будет что-то подобное:

string(14) "lle Bjori Ro"

Пример #4 Использование потоковых контекстов

// Создаем поток
$opts = array(
"http" =>array(
"method" => "GET" ,
"header" => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
);

$context = stream_context_create ($opts );

// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ("http://www.example.com/" , false , $context );
?>

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

PHP

file_exists("test.txt")//Существует ли файл? filesize("test.txt");//Узнаем размер файла //Возвращается временная метка: fileatime("test.txt");//Дата последнего обращения к файлу //date("d M Y", $atime); filemtime("test.txt");//Дата изменения файла //date("d M Y", $mtime); filectime("test.txt");//Дата создания файла(Windows) //date("d M Y", $ctime);

Файлы: режимы работы

PHP

resource fopen (string filename, string mode) // resource - возвращает указатель на файл в случае успешной работы, или FALSE в случае ошибки
Режим работы Описание
r открыть файл только для чтения;
r+ открыть файл для чтения и записи;
w открыть файл только для записи. Если он существует, то текущее содержимое файла уничтожается. Текущая позиция устанавливается в начало;
w+ открыть файл для чтения и для записи. Если он существует, то текущее содержимое файла уничтожается. Текущая позиция устанавливается в начало;
а открыть файл для записи. Текущая позиция устанавливается в конец файла;
а+ открыть файл для чтения и записи. Текущая позиция устанавливается в конец файла;
b обрабатывать бинарный файл. Этот флаг необходим при работе с бинарными файлами в ОС Windows.

Открытие и закрытие файлов в PHP

PHP

$fi = fopen("test.html", "w+") or die("Ошибка"); //Примеры $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //Закрываем fclose($fi)

Чтение файлов в PHP

PHP

//Читаем файл fread(int fi, int length) $str = fread($fi, 5); // Читаем первые 5 символов echo $str; // так как курсор передвинулся $str = fread($fi, 12); // Читаем следующие 12 символов echo $str; fgets(int fi[, int length]) // Прочитать строку из файла fgetss(int fi, int length [, string allowable]) // Прочитать строку из файла и отбросить HTML-теги // string allowable - теги, которые необходимо оставить fgetc(int fi) //Считывает символ из файла

Изначально Запись будет происходить в начало файла, путем перезаписывания существующих данных, если они есть. Поэтому, если вам нужно записать что-то в конец файла, нужно установить соответствующий режим чтения , например, a+ .

Манипуляции с курсором в файлах PHP

PHP

int fseek(int fi, int offset [, int whence]) //Установка курсора // int fi - указатель на файл //offset - количество символов, на которые нужно передвинуться. //whence: //SEEK_SET - движение начинается с начала файла; //SEEK_CUR - движение идет от текущей позиции; //SEEK_END - движение идет от конца файла. fseek($fi, -10, SEEK_END); //Читаем последние 10 знаков $s = fread($fi, 10); $pos = ftell($fi); //Узнаем текущую позицию rewind($f)//сброс курсора bool feof($f) //конец файла

Прямая работа с файлами (данными) в PHP

PHP

array file(string filename) // Получаем содержимое файла в виде массива //Еще один вариант прямой работы с данными file_get_contents(string filename) //Чтение (получаем весь файл одной строкой) //Запись в файл (изначально перезаписывается) file_put_contents(string filename, mixed data[,int flag]); //FILE_APPEND // Запись в конец файла: file_put_contents("test.txt", "данные", FILE_APPEND); //Если записать массив, $array = array("I", "live"); file_put_contents("test.txt",$array); //то получим "Ilive"

Управление файлами в php

PHP

copy(string source, string destination); // Копирование файла rename(str oldname, str newname); // Переименование файла unlink(string filename); // Удаление файла

Загрузка файлов на сервер PHP

//Настрoйки PHP.ini file_uploads (on|off) // разрешаем.запрещаем загрузку файлов upload_tmp_dir // временная папка для загружаемых файлов. по умолчания временная папка upload_max_filesize (default = 2 Mb) // макс. размер загружаемого файла post_max_size // общий размер посылаемый формы (должен быть больше upload_max_filesize) //Простая загрузка

HTML

Работаем с файлами на сервере

PHP

//Принимаем данные $tmp = $_FILES["userfile"]["tmp_name"]; $name = $_FILES["userfile"]["name"]; //Перемещаем файл move_uploaded_file($tmp, name); move_uploaded_file($tmp, "upload/".name); // перенаправляем файл в папку upload // относительно текущего файла //Что в массиве $_FILES $_FILES["userfile"]["name"] // имя файла, например, test.html $_FILES["userfile"]["tmp_name"] // временное имя файла (путь) $_FILES["userfile"]["size"] // размер файла $_FILES["userfile"]["type"] // тип файла $_FILES["userfile"]["error"] // 0 - ошибок нет, число - есть

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

Последовательность работы с файлами в PHP такая:

  1. Открыть файл.
  2. Выполнить необходимые действия.
  3. Закрыть файл.

Как видите, последовательность работы с файлами напоминает работу с файлами через обычный проводник. Только здесь вся работа выполняется автоматически самим PHP-скриптом .

Начнём с первого пункта - открытие файла. Файл открывается с помощью функции fopen() . Первый параметр - это путь к файлу, а второй параметр - модификатор . Давайте сразу разберём возможные модификаторы:

  1. a - открывает файл только для записи, причём указатель помещается в конец файла.
  2. a+ a , но также файл открывается ещё и для чтения.
  3. r - открывает файл только для чтения, а указатель устанавливается в начало файла.
  4. r+ - то же самое, что и модификатор r , но также файл открывается ещё и для записи.
  5. w - открывает файл только для записи, указатель устанавливает в начало файла и стирает всё содержимое файла.
  6. w+ - то же самое, что и модификатор w , только файл открывается также и для чтения.

Также различают два режима работы с файлами: бинарный (обозначается b ) и текстовый (обозначается t ). Если Вы работаете с обычным текстовым файлом, то выбирайте текстовый режим, а если, например, с изображением, то бинарный.

Это все основные модификаторы, которых Вам вполне хватит. Теперь давайте узнаем, как закрыть файл. Закрывается файл с помощью функции fclose() .

Теперь перейдём к чтению файла с помощью функции fread() . И давайте, наконец-то, приведу пример:

$contents = "";
while (!feof($handle))
$contents .= fread($handle, 4096);
fclose($handle);
?>

В данном примере мы сначала открываем файл для чтения в текстовом режиме (модификатор rt ). Функция fopen() возвращает так называемый дескриптор , с помощью которого можно общаться с файлом, и записываем его в переменную handle . Затем мы в цикле while() до тех пор, пока не достигнут конец файл, считываем содержимое каждый раз по 4096 символов, которые записываем в переменную contents . После завершения процесса считывания - закрываем файл, вновь с помощью дескриптора файла.

Теперь перейдём к записи с помощью функции fwrite() :

$handle = fopen("files/a.txt", "at");
$string = "This is text";
fwrite($handle, $string);
fclose($handle);
?>

После запуска этого скрипта, в файле a.txt добавится строка "This is text ".

Особо внимательные читатели обратили внимание на указатели, о которых я писал чуть выше. Указатель - это текущая позиция воображаемого "курсора" в файле. Именно с него и начинается работа с файлом. Изменить положение указателя можно с помощью функции fseek() :

$handle = fopen("files/a.txt", "rt");
echo $contents."
";
fseek($handle, 0, SEEK_SET);
$contents = fread($handle, 3);
echo $contents."
";
?>

Таким образом, мы сначала считываем 3 символа (в результате, текущее положение указателя сдвигается на 3 позиции). Затем мы устанавливаем указатель на начало файла. И вновь считываем 3 символа. Как Вы и догадались, мы два раза считали одно и тоже. То есть первый раз 3 символа, потом вернулись назад, и вновь считали 3 символа. Также если у функции fseek() заменить SEEK_SET на SEEK_CUR , то тогда второй параметр будет не устанавливать позицию указателя, а сдвигать относительно текущего местоположения. Советую даже попрактиковаться с указателями, потому что для понимания это не так просто. Также рекомендую попытаться записать что-нибудь в файл при позиции указателя, например, в самом начале файла. И обязательно объясните полученный результат.

И, напоследок, хочется привести ещё пару функций, которые позволяют работать с файлами на самом простом уровне: file_put_contens() и file_get_contents() . Функция file_put_contents() записывает в файл, а функция file_get_contents() считывает содержимое из файла. Эти функции очень просты в применении, но возможностей там уже меньше (хотя, как правило, они и не нужны):

file_put_contents("files/a.txt", "This is text 2");
echo file_get_contents("files/a.txt");
?>

В данном скрипте мы сначала записали строку "This is text 2 " в файл, а потом считываем полученное содержимое и выводим его. Как видите, трудно придумать более простой способ чтения из файла и запись в файл .

Вот и все основные моменты работы с файлами в PHP .

18.4K

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

Файлы php

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

Для работы с файлами php используются специальные приложения – программные редакторы. Наиболее распространенными из них являются:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP Development.
При создании сайтов на основе php может потребоваться многократное использование программного кода. В таких ситуациях удобно подключать уже готовые решения, находящиеся в другом файле. Для этого используется конструкция include . Ее синтаксис:

include имя_файла

Пример подключения:

Подключаемый файл:


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

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

Открытие и закрытие файлов

В php все операции с файлами осуществляются в несколько этапов:

  • Открытие файла;
  • Редактирование содержимого;
  • Закрытие файла.

Для открытия файла используется функция fopen() . Ее синтаксис:

int fopen(string filename, string mode [, int use_include_path])

Принимаемые аргументы:

  • string filename – имя файла или абсолютный путь к нему. Если путь к файлу не будет указан, то будет произведен его поиск в текущем каталоге. При отсутствии искомого файла система выведет сообщение об ошибке. Пример:

  • string mode – указывает режим открытия файла. Принимаемые аргументом значения:
  • r – файл открыт только для чтения, файловый указатель устанавливается в начале;
  • r+ – файл открыт для чтения и записи;
  • w – создается новый файл только для записи. Если файл с таким именем уже существует, в нем происходит автоматическое удаление всех данных;
  • w+ — создается новый файл для записи и чтения. При существовании такого файла происходит полная перезапись его данных на новые;
  • a – файл открыт для записи. Указатель устанавливается в конце. То есть запись в файл php начнется не с начала, а с конца;
  • a+ – открытие файла в режиме чтения и записи. Запись начнется с конца;
  • b – режим работы с файлом, содержащим в себе двоичные данные (в двоичной системе исчисления). Этот режим доступен только в операционной системе Windows.

Для закрытия доступа к файлу служит функция fclose () . Синтаксис:

int fclose (int file) , где int file – дескриптор сайта, который нужно закрыть.

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

Пример:

Чтение и запись файлов

Для простого отображения всего содержимого файла идеально подходит функция readfile () . Ее синтаксис:

readfile (string filename) , где string filename – строковое имя фала (не дескриптор ).


Тот же самый файл можно прочитать с помощью функции fpassthru () . Она считывает данные от конечной позиции указателя и до конца файла. Ее синтаксис:

int fpassthru (int file)

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

Результат аналогичен предыдущему.

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

  • string fgets (int file, int length) – функция считывает строку длиною length . Пример:

  • string fread (int file, int length) – по действию идентична предыдущей.

Для записи текстовых данных в файл существует две идентичные функции:

  • int fputs (int file, string string [, int length ])
  • int fwrite (int file, string string [, int length ])

Функции записывают в файл int file строку string string указанной длины int length (необязательный аргумент ). Пример:

Создание и удаление файлов

Чтобы создать файл php , можно использовать функцию fopen() в режиме доступа «w » или «w+ ». Или функцию touch () . Она устанавливает время изменения файла. При отсутствии элемента с искомым именем он будет создан. Ее синтаксис.

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

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

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

Для открытия текстового файла используем функцию 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); ?>

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

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