<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

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

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

Подписавшись по 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 документа содержался в форме? Или лучше не заморачиваться?

Ответить

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