Бази даних MySQL і Access все частіше стаютьзагальнодоступними засобами зберігання даних. Але на початку 1990-х була популярна робота з файлами в PHP, збереження записів в форматованих текстових файлах в форматі CSV, розділених новими рядками.
Основні принципи роботи
Бази даних зручні, але кожен розробник повиненпринаймні мати деякі базові знання про те, як читати і писати файли. Можливо, багато задумаються над питанням: «Чому мені потрібно це знати? Якщо я використовую файли, вони написані в XML, і я просто застосовую синтаксичний аналізатор ».
Отже, ось кілька причин, за якими можуть знадобитися файли:
- Щоб перемістити двійкові дані (наприклад, файли зображень) в базу даних BLOB (виконавчі великі об'єкти).
- Імпорт даних (наприклад, адрес електронної пошти), експортованих з застарілої бази даних або програми.
- Щоб з бази даних експортувати інформацію в текстовий файл для обробки в автономному режимі.
Читання файлів і запис - це основні операції.Якщо потрібно прочитати документ, то спочатку потрібно його відкрити. Після цього слід прочитати якомога більше вмісту, потім закрити файл. Для запису інформації в документ, потрібно його спочатку відкрити (або, можливо, створити, якщо він ще не створений). Після цього записують необхідні дані і закривають його по завершенні.
Зручно використовувати і вбудовані функції, які автоматично роблять відкриття і закриття. Вони доступні в PHP5.Также слід ознайомитися з атрибутами файлів, тобто з його властивостями.
Вони можуть розповісти:
- про розмір;
- видати інформацію про те, коли останній раз до нього зверталися;
- розповісти про власника і т. д.
Найкраще вивчити всі основні атрибути для роботи з файлами в PHP. Це багато в чому полегшить роботу.
Історія файлів
Може знадобиться дізнатися час останнього редагування файлу. У цьому випадку на допомогу приходять функції: fileatime (), filemtime () і filectime ().
<?php $ FormatDate = "D d M Y g: i A"; $ TimeA = fileatime ($ file); $ TimeM = filemtime ($ file); $ TimeC = filectime ($ file); echo $ file. "Був переглянутий". date ($ formatDate, $ timeA). ". <br>"; echo $ file. "Мав остання зміна i-вузла". date ($ formatDate, $ timeM). ". <br>"; echo $ file. " був змінений " . date ($ formatDate, $ timeC). ".";
Тут код витягує тимчасову мітку останнього доступу і відображає її:
- C: Windowsfile.ini був переглянутий 19 Вересня 2018 4:34 вечора.
- C: Windowsfile.ini був змінений Пт 8 Жовтня 2018 2:03 ранку.
- C: Windowsfil.ini був змінений в Вт 16 дек 2017 4:34.
Функція filectime () показує час зміни різної інформації, пов'язаної з файлом (наприклад, права доступу), а filemtime () - зміни самого файлу.
Функція date () використовувалася для форматування тимчасової мітки Unix, яку повертатимуть file * time () функціями.
Файл чи ні?
Щоб дізнатися, чи дійсно відбувається робота з файлами в PHP, можна використовувати is_file () функцію або is_dir (), перевіряючі, каталог чи це.
<? Php echo $ file. (Is_file ($ file)? "": "Не"). "Файл. <br>"; echo $ file. (Is_dir ($ file)? "": "Не"). "Каталог.";
Висновок коду прикладу:
- C: Windowsfile.ini файл.
- C: Windowsfile.ini НЕ каталог.
Таким чином можна уникнути помилок і не відкрити через необережність «не файл». У PHP робота з файлами і каталогами аналогічна.
Дозволи для файлів
Перед роботою з файлом можна перевірити, чи є він доступним для читання або запису. Для цього потрібно використовувати функції is_writable () і is_readable ().
<? Php echo $ file. (Is_readable ($ file)? "": "Не"). "Читається. <br>"; echo $ file. (Is_writable ($ file)? "": "Не"). "Записується.";
Ці функції повертають логічне значення і пояснюють, чи може операція бути виконана в файлі.
Код виведе наступні значення на екран:
- C: Windowsfile.ini читається.
- C: Windowsfile.ini не записував.
Використовуючи тернарний оператор, можна вказати, доступний файл чи ні.
розмір файлу
Щоб дізнатися розмір файлу, потрібно використовувати функцію filesize (). Він буде показаний в байтах.
<? Php $ File = "C: Windowsfile.ini"; $ size = filesize ($ file); echo $ file. "Має розмір". $ Size. "Байт.";
Функція виведе на екран наступне:
- C: Windowsfile.ini має розмір 510 байт.
Використання файлу в системі Windows тутпідкреслює один нюанс. Зворотна коса риска має особливе значення в якості символу escape. Потрібно буде уникати цього, додавши ще одну зворотну косу риску.
Якщо файл ще не створений, функція filesize () вкаже на False і помилку. Тому спочатку перевіряють файл на існування потрібної команди file_exists ().
<? Php $ File = "C: Windowsfile.ini"; if (file_exists ($ file)) {$ size = filesize ($ file); echo $ file. "Має розмір". $ Size. "Байт.";} Else {echo $ file. " Файл не знайдено.";}
Перевірку file_exists () потрібно включати практично завжди для безпеки.
читання файлів
У попередньому розділі показано, як багато можнадізнатися про файли, з якими працюєте, перш ніж починати читати або записувати в них. Тепер можна розібрати з тим, яким чином відбувається читання вмісту файлу.
Функції для роботи з файлами PHP полегшують завдання.В даному випадку знадобиться file_get_contents (). Вона буде зчитувати весь вміст файлу в змінну без необхідності відкривати або закривати файл самостійно. Це зручно, коли обсяг записи відносно невеликий, так як відразу зчитувати 1 ГБ даних в архів не завжди раціонально в PHP. Робота з «.ini» -Файл і функцією file_get_contents () показана нижче.
<? Php $ File = "c: windowsfile.ini"; $ file1 = file_get_contents ($ file); echo $ file1;
Для великих файлів або просто в залежності відпотреб вашого скрипта, може бути розумніше обробляти деталі самостійно. Це пов'язано з тим, що як тільки файл відкривається, ви можете шукати в ньому певне зауваження і читати стільки даних, скільки захочете. Функція fopen () використовується для відкриття файлу.
<? Php $ File = "c: windowsfile.ini"; $ file1 = fopen ($ file, "r");
Для роботи з функцією fopen () необхідні два аргументи:
- файл, який потрібно відкрити;
- режим, який використовується в цьому випадку є «r» для читання.
Функція повертає дескриптор або потік в файл, який зберігається в змінній $ file1. Її потрібно використовувати в усіх наступних командах при роботі з файлом.
режим | значення | позиція курсора | Якщо файлу не існує? |
р | тільки читання | початок файлу | видасть помилку |
w | тільки запис | початок файлу | створить новий |
а | тільки запис | кінець файлу | створить новий |
З метою читання з відкритого файлу по одному рядку за раз, використовувати можна функцію fgets ().
<? Php $ File = "c: windowsfile.ini"; $ file1 = fopen ($ file, "r"); do {echo fgets ($ file1). "<br>";} while (! feof ($ file1)); fclose ($ file1);
Використання do-while-циклу є хорошимвибором, щоб дізнатися заздалегідь, скільки рядків у файлі. Функція feof () перевіряє, чи досяг файл завершення, а цикл триває до тих пір, поки не буде досягнутий кінець умови файлу. Після закінчення читання використовується функція fclose () для закриття документа.
запис файлів
Два часто використовуваних режиму під час запису в файл звикористанням функції fwrite (): «w» і «a». «W» означає, що потрібно записати в документ, але він попередньо видалить будь-який вміст, «a» - додавання нових дані до того, що вже існує в файлі. Потрібно бути впевненим, що використовується правильний варіант.
У наступному прикладі буде використовуватися режим «a» для запису.
<? Php $ MyFile = "files.txt"; $ file1 = fopen ($ myFile, "a"); $ Output = "банан". PHP_EOL; fwrite ($ file1, $ output); $ Output = "Китай". PHP_EOL; fwrite ($ file1, $ output); fclose ($ file1);
Спочатку ім'я файлу призначається змінної, потімвін відкривається в режимі «a» для додавання. Дані, які повинні бути записані, призначаються змінної $ output і fwrite (), а інформація додається в файл. Процес повторюється, щоб додати ще один рядок, потім документ закривається з використанням fclose ().
Попередньо визначена константа PHP_EOL додає символ нового рядка, специфічний для платформи, на якій працює PHP з текстовими файлами.
Вміст файлу після виконання вищевказаного коду має виглядати наступним чином:
- банан;
- Китай.
Функція file_put_contents () також можезаписувати в файл. Вона приймає ім'я файлу, дані, які повинні бути записані і константу FILE_APPEND, якщо вона повинна додати дані (буде перезаписувати вміст файлу за замовчуванням).
Ось такий же приклад, як і вище, але на цей раз використовується file_put_contents ().
<? Php $ MyFile = "files.txt"; file_put_contents ($ myFile, "банан". PHP_EOL); file_put_contents ($ myFile, "Китай". PHP_EOL, FILE_APPEND);
З цими функціями доводиться працювати часто, тому краще їх запам'ятати. До того ж вони можуть в роботі з файлами PHP одного разу полегшити деякі складні завдання.