<MyRusakov.ru />

Финансовая грамотность от А до Я

Финансовая грамотность от А до Я

Данный курс в кратчайшие сроки обучит Вас финансовой грамотности. Эти знания позволят Вам получить, как минимум, серьёзную финансовую стабильность, а, как максимум, финансовую независимость.

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

Помимо самого курса Вас ждёт ещё бесплатный ценный Бонус: «Ранний выход на пенсию». В рамках этого Бонуса Вы узнаете, какой должен быть капитал конкретно в Вашем случае, варианты его получения, а также какие есть стратегии вывода капитала на пенсии и где их можно протестировать.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Работа с файлами в PHP

Работа с файлами в PHP

Под работой с файлами в 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(). И давайте, наконец-то, приведу пример:

<?php
  $handle = fopen("files/a.txt", "rt");
  $contents = '';
  while (!feof($handle))
    $contents .= fread($handle, 4096);
  fclose($handle);
?>

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

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

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

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

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

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

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

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

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

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

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

Спасибо за внимание!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (62):

top1995 top1995 21.06.2011 19:35:48

В этом програмном коде "while (!feof($handle))" перед "feof" стоит символ "!"... почему??

Ответить

Admin Admin 21.06.2011 19:40:21

Потому что feof проверяет: достигнут конец файла или нет. Пока он не будет достигнут, будет возвращаться false. Отрицание делает true, а дальше while(true) выполняет следующую итерацию цикла.

Ответить

top1995 top1995 21.06.2011 20:10:15

Спасибо=)

Ответить

ashab ashab 11.12.2016 16:06:29

Можно ли использовать это для вывода комментариев?

Ответить

sync.o sync.o 25.06.2011 17:35:36

Подскажите, а что делать, если открываешь файл на запись (модификатор 'w'), а браузер пишет: HTTP wrapper does not support writeable connections?

Ответить

Admin Admin 25.06.2011 17:38:33

А какой путь Вы указываете?

Ответить

sync.o sync.o 25.06.2011 17:39:47

Вы правы, путь некорректно указал. $DOCUMENT_ROOT рулит))

Ответить

Adrenalin Adrenalin 13.11.2011 23:49:14

Я разобрался с тем, как записать текст из формы у файл a.txt. Даже понял как вызывать этот текст с файла a.txt. Но ведь этот текст (напечатанный в форме) не добавляется на страницу (например index.php), а всеголишь отображается в браузере. Что я ещё не понял???

Ответить

Admin Admin 13.11.2011 23:56:43

Так Вы должны выводить его на той странице и в том месте, где должны быть комментарии.

Ответить

Adrenalin Adrenalin 14.11.2011 00:07:06

Тойсть, если html-форма на странице index.php, то и скрипт обработчик должен быть на этой странице? Сразу под закрывающим тегом </form> ? И тогда запись с формы добавится на страницу?

Ответить

Admin Admin 14.11.2011 00:21:05

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

Ответить

Adrenalin Adrenalin 14.11.2011 00:44:27

Вы правы. Я его не знаю! Если бы знал, то не позорился бы здесь!!! И всё-таки; В Месте Где Должны Выводится Комментарии, Какой Должен Быть Скрипт (Код)??

Ответить

Admin Admin 14.11.2011 00:51:28

<?php $text = file_get_contents("comments.txt"); echo $text; ?> Самый простой вариант вывода комментариев из файла.

Ответить

Adrenalin Adrenalin 06.12.2011 22:31:45

Помоги. Вторые сутки не выходит! Хочю записать Имя и Фамилию с формы у "один файл" - form.txt Использую для этого метод "Сериализация". Обработчик и форма лежат в одном файле - test.php Вот код: <?php if ( $_POST ) { file_put_contents("form.txt", serialize($_POST])); } ?> <form metho="POST"> Имя:<br> <input type="text" name="first_name"><br> Фамилия:<br> <input type="text" name="last_name"><br><br> <input type="submit" value="Отправить"> </form> Что здесь не хватает или не так? Выбрасывает ошибку: Parse error: syntax error, unexpected ']' in Z:\home\localhost\www\test.php on line 5

Ответить

Admin Admin 06.12.2011 22:35:41

$_POST] - у Вас так, а нужно $_POST[]. Отсюда и ошибка.

Ответить

Adrenalin Adrenalin 06.12.2011 23:02:59

А теперь выбрасывает: Fatal error: Cannot use [] for reading in Z:\home\localhost\www\test.php on line 5 Записал вот так: file_put_contents("form.txt", serialize($_POST[])); Что ещё можно попробовать?

Ответить

Admin Admin 06.12.2011 23:07:44

Потому что [] может использоваться только для записи, а не для использования в функциях. Поэтому вместо $_POST[] в данном случае надо просто писать $_POST.

Ответить

Adrenalin Adrenalin 06.12.2011 23:14:28

Заработало. Но не всё! Ничего не записывается в этот файл (form.txt). Что делать?

Ответить

Admin Admin 06.12.2011 23:18:34

Ещё ошибка в атрибутах <form>: metho="POST" Правильно писать: method="POST"

Ответить

mixolapmati mixolapmati 05.01.2012 21:51:54

вот моя проблема. Работаю в линукс убунту, не под рутом. Сервер апач. php5. Пишу это: <?php $myFile = "testFile.txt"; $fh = fopen($myFile, 'w') or die("can't open file"); $stringData = "Bobby Bopper\n"; fwrite($fh, $stringData); $stringData = "Tracy Tanner\n"; fwrite($fh, $stringData); fclose($fh); ?> не записывает. проверил права, выставил 777, не помогло. Проверял на чтение, все в порядке. это виртуальный хост. Пробовал и с вашим примером, тоже самое, читает, но не пишет.

Ответить

mixolapmati mixolapmati 05.01.2012 21:54:59

А почему вы про unlink() ничего не написали?

Ответить

Admin Admin 05.01.2012 22:12:59

Посмотрите в логах, что это за ошибка была. Если там будет Permission denied, то всё-таки проблема с правами, скорее всего, она и есть, поскольку в Windows Ваш код прекрасно работает. Попробуйте задать 777 не только на файл, но и на все родительские каталоги.

Ответить

mixolapmati mixolapmati 05.01.2012 22:37:35

Решил. Проблема в правах была, частично. Именно на каталоги и выставил. Причина в другом. В настройках виртуального хоста, "php_admin_value upload_tmp_dir /www/site.org/tmp php_admin_value error_log /www/site.org/log/php.log php_admin_value session.save_path /www/site.org/sess" было site.local. Жаль что в логах этого не отражается.

Ответить

mixolapmati mixolapmati 05.01.2012 22:39:12

Это все в Linux, в Windows я этого не делаю.

Ответить

igorexa igorexa 06.01.2012 09:29:05

У вас в предпоследнем примере опечатка Код: <?php $handle = fopen("files/a.txt", "rt");?>

Ответить

Admin Admin 06.01.2012 13:41:17

Подправил, спасибо!

Ответить

Adrenalin Adrenalin 20.01.2012 14:23:29

А что нужно записать в переменной string, чтобы в файле a.txt появилась не строка This is text, а комментарий с формы? Или в file_put_contents. Пожалуйста. За месяц не понял.

Ответить

Admin Admin 20.01.2012 14:26:47

Нужно записывать не переменную string, а переменную, в которой содержится текст комментария.

Ответить

Adrenalin Adrenalin 20.01.2012 15:14:18

Михаил, можешь написать самый простой код, который запишет в файл a.txt запись с формы? На примере мне будет легче разобраться.

Ответить

Admin Admin 20.01.2012 15:44:22

Он абсолютно аналогичен примеру в данной статье, но вместо $string = "This is text"; Будет $string = $_POST["text_comment"]; Или ещё какая-нибудь другая переменная.

Ответить

Adrenalin Adrenalin 20.01.2012 16:07:03

Файл a.txt создается, но в нем не появляется запись с формы! Вот форма: <form method="post" action="obrabotka.php"> <textarea name="otziv" cols="60" rows="10" wrap="virtual"></textarea> <input name="submit" type="submit" value="Добавить комментарий"></form> Чего не хватает в форме?

Ответить

Admin Admin 20.01.2012 16:14:05

$string = $_POST["otziv"];

Ответить

Adrenalin Adrenalin 20.01.2012 18:42:59

Ура ура ура! Записал несколько комментов у файл a.txt и вывел их на странице при помощи кода: <?php $text = file_get_contents("a.txt"); echo $text; ?> А теперь надо понять, как и где нужно вставить какой-нибуть разделитель этих комментов (например линия)? Или же подскажи как можно записывать каждый новый коммент одной и той же страницы в разные файлы (a.txt b.txt v.txt...)?

Ответить

Admin Admin 20.01.2012 18:50:00

Это Вы выбирайте, в каком формате хранить комментарии. А уже потом думайте, как основываясь на данном формате, извлекать данные. Вообще если делать всё адекватно, то надо хранить не в текстовых файлах, а в базе данных.

Ответить

Adrenalin Adrenalin 20.01.2012 19:19:17

Я не правильно задал вопрос! 1.Как вместе с новым комментом, который записывается в один и тот же файл (a.txt) записать текущее время и дату? 2.Как отсортировать и разделить комменты с файла a.txt по времени и дате их добавления? Если можно, то поделись этим кодом. А если нет, то дай ссылку именно на эту статью.

Ответить

Admin Admin 20.01.2012 19:48:40

Я именно на этот вопрос и ответил. Если Вы не понимаете ответ, то изучайте PHP дальше. Готовые скрипты можете поискать в Интернете. Я ими не пользуюсь, поэтому посоветовать готовых вариантов не могу.

Ответить

Adrenalin Adrenalin 26.01.2012 20:54:54

Как правильно записать строчьку fwrite($hdl,htmlspecialchars($HTTP_POST_VARS['otziv'])); если в форме добавления комментов есть ещё поле для ввода имени? 1. name="maks" - Имя 2. name="otziv" - сообщение. Хочу записать имя и сообщение в один файл. Записываю вот так: <?php $dirct="gb"; if ($HTTP_POST_VARS['otziv']!="") { $otznam=$ind.time(); $hdl = fopen("$dirct/$otznam", "w+"); fwrite($hdl,htmlspecialchars($HTTP_POST_VARS['otziv'])); fclose($hdl);

Ответить

RussianPro RussianPro 15.04.2012 14:58:43

<?php $handle = fopen("users/a.txt", "rt"); $contents = ''; while (!feof($handle)) $contents .= fread($handle, 4096); fclose($handle); ?> только у меня происходит зацикливание на этом скрипте? http://narod.ru/disk/46140222001.b080d80bf9d23b9f3682074ec69cb385/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png.html вот ссылка на скрин

Ответить

Admin Admin 15.04.2012 15:02:38

Здесь может быть зацикливание только если путь к файлу указан неправильно (users/a.txt).

Ответить

RussianPro RussianPro 16.04.2012 11:13:46

ну так путь к файлу у меня правильно написан!!!!

Ответить

Admin Admin 16.04.2012 12:51:18

Значит, файл очень длинный. Другого быть НЕ может!

Ответить

RussianPro RussianPro 16.04.2012 17:45:47

Вы имеете ввиду код файла слишком длинный?

Ответить

Admin Admin 16.04.2012 17:47:35

Да.

Ответить

star05 star05 22.05.2012 13:14:38

Михаил, такой вопрос: я ради интереса вставил в текст кода строчку вывода echo "$handle"; Броузер на это выдал мне Resource id #3. Поясните, пожалуйста!

Ответить

Admin Admin 22.05.2012 13:38:14

Всё правильно, Вы выводите дескриптор файла, а не содержимое файла.

Ответить

star05 star05 30.05.2012 11:11:47

Михаил, подскажите, а с помощью php возможна ли реализация следующей задачи: на страницу сайта выводить текст из файла .txt или .html. Задача в том, чтобы редактировать текст не в коде страницы, а в отдельном файле, и тем более если этот текст отображается на всех страницах - не переписывать один и тот же текст на всех страницах, а один раз изменить в отдельном файле. Особенно актуально - если это делает сторонний человек. Если такой возможности нет на html, css, php - подскажите, как это реализовать, пожалуйста. У меня не получилось это сделать.

Ответить

Admin Admin 30.05.2012 13:47:44

Для того, чтобы не переписывать всё подряд, можно использовать require_once и подключать блоки с повторяющимся контентом.

Ответить

Adrenalin Adrenalin 26.10.2012 17:19:11

Нигде не могу найти (у тебя на сайте) статью о том, как добавить запись в таблицу (БД) из формы (Имя, сообщение) Дай ссылку.

Ответить

JusyaOoops JusyaOoops 12.01.2013 09:50:05

У меня что-то совсем не получается, можете объяснить, как правильно указать путь к файлу и показать простейший скрипт вывода его содержимого на экран для чтения?

Ответить

Admin Admin 12.01.2013 10:52:02

Как задавать пути, проходится в HTML. А вывод файла показан в этой статье.

Ответить

White_Coder White_Coder 28.01.2013 14:18:34

Михаил, я хочу сделать для сайта небольшую админ панель, MySQL уже полностью готова к работе, текст, название, ID добавляет нормально, только я не могу записать в файл, создаваемый после записи в MySQL, длинный набор тегов, пишет, что синтаксическая ошибка, например, $php = " <?php echo "OK!"; ?>"; Выдает ошибку сервера и всё! Можно ли записать в файл переменные без /n, /" и подобным php тегам? Потому что проще вручную создавать файлы на хостинге.

Ответить

Admin Admin 28.01.2013 20:31:34

При выводе кавычек внутри кавычек, нужно экранировать внутренние. echo "<?php \"?>";

Ответить

kolch kolch 27.02.2013 20:56:19

А если у меня в файле находятся числа можно каким либо образом складывать их с теми которые я добавил?

Ответить

Admin Admin 27.02.2013 21:59:28

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

Ответить

torpedko torpedko 26.05.2013 17:18:52

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

Ответить

Admin Admin 26.05.2013 21:00:04

Можно. Нужно получить данные из формы, а дальше воспользоваться этой статьёй.

Ответить

Vangog Vangog 03.08.2013 06:13:51

Хорошо, что есть комментарии. Не мог решить задачу из курса "PHP С нуля до гуру". Почитал комментарии, сразу все понял и решил.

Ответить

RaGaBaN RaGaBaN 22.12.2013 15:59:40

Код print_r ($_POST); echo "<br />---------------------------------<br />"; $fp = fopen("file.txt", "a+t"); $text = "\r\n$_POST[name]"; $test = fwrite ($fp, $text); if ($test){ echo "В файл $fp успешно записано $text"; } else { echo "Ошибка записи в файл"; } fclose ($fp); Браузер выводит мне какой-то Resource id #3 заместо имени файла. Подскажите как вывести название файла на екран?

Ответить

alexandrdante alexandrdante 22.12.2013 16:12:24

Вы занесите название файла в переменную и в итоге указывайте её,вместо file.txt тогда и название сможете вывести

Ответить

Dima2000%. Dima2000%. 31.12.2013 18:53:11

А как сделать так, чтобы когда вторая запись в файл заносилась, старая не стиралась?

Ответить

Yunior Yunior 18.08.2014 14:39:43

Незначительная ошибка - " на самом простом уровне: file_put_contens()" *contenTs

Ответить

Музыкант Музыкант 07.06.2015 00:06:28

Здравствуйте Михаил. Не знаю, ответети ли вы, но я постараюсь объяснить :-) Дело вот в чем, есть такой вот код <?php $f = fopen("docc.txt", "w"); fwrite($f, $_POST["text"]); fclose($f); $f = fopen("docc.txt", "r"); echo fgets($f); fclose($f); ?> Как вы поняли, я с начало открываю файл для записи, записываю, закрываю. Потом опять открываю, читаю и закрываю. Приделал к этому скрипту форму <form method="post" action="sc.php"> <textarea name="text"></textarea> <button type="submit">Написать</textarea> </form> Все работает, с формы записывается в файл, но как только я выхожу с страницы, файл забывает что в него было записано и просто стерается. Когда я хочу что-то новое написать, оно просто перезаписывает. И я вот читал комментарии и не смог понять, как все таки сделать так, чтоб комментарии хранились в одном файле. И ещё, это получается, что я могу создать php страницу и txt документ, в txt документе могу хранить php скрипт и другие скрипты, а потом просто с помощью чтения файлов вывести на php странице? Если так возможно, то как сделать так, чтоб я мог через форму редактировать txt документ, но чтоб при вызове формы, код с txt документа содержался в форме? Или лучше не заморачиваться?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.