Робота з файлами на PHP: відкриття, запис, читання. Як правильно читати файли за допомогою 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(). І давайте, нарешті, наведу приклад:

$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.

Бази даних MySQL та Access дедалі частіше стають загальнодоступними засобами зберігання даних. Але на початку 1990-х була популярна робота з файлами PHP, збереження записів у форматованих текстових файлах у форматі CSV, розділених новими рядками.

Основні засади роботи

Бази даних зручні, але кожен розробник повинен, принаймні, мати деякі базові знання про те, як читати та писати файли. Можливо, багато хто замислиться над питанням: «Чому мені потрібно це знати? Якщо я використовую файли, вони написані в XML, і просто застосовую синтаксичний аналізатор».

Отже, ось кілька причин, через які можуть знадобитися файли:

  1. Щоб перемістити двійкові дані (наприклад, файли зображень) до бази даних BLOB (двійкові великі об'єкти).
  2. Імпорт даних (наприклад, адрес електронної пошти), експортованих зі застарілої бази даних або програми.
  3. Щоб з бази даних експортувати інформацію до текстового файлу для обробки в автономному режимі.

Читання файлів та запис – це основні операції. Якщо потрібно прочитати документ, спочатку потрібно його відкрити. Після цього слід прочитати якнайбільше вмісту, потім закрити файл. Для запису інформації в документ потрібно його спочатку відкрити (або, можливо, створити, якщо він ще не створений). Після цього записують необхідні дані та закривають його після завершення.

Зручно використовувати і вбудовані функції, які автоматично здійснюють відкриття та закриття. Вони доступні в PHP5. Також слід ознайомитися з атрибутами файлів, тобто з його властивостями.

Вони можуть розповісти:

  • про розмір;
  • видати інформацію про те, коли востаннє до нього зверталися;
  • розповісти про власника тощо.

Найкраще вивчити всі основні атрибути для роботи з файлами PHP. Це багато в чому полегшить роботу.

Історія файлів

Можливо, знадобиться час останнього редагування файлу. У цьому випадку на допомогу приходять функції: fileatime(), filemtime() та filectime().

"; echo $file . " мав останню зміну i-вузла " . date($formatDate, $timeM) . ".
"; 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(), які перевіряють, чи це каталог.

"; echo $file . (is_dir($file) ? " " : " не") . " каталог.";

Висновок коду прикладу:

  • C: Файл Windowsfile.ini.
  • C: Windowsfile.ini не каталог.

Таким чином можна уникнути помилок і не відкрити з необережності "не файл". У PHP робота з файлами та каталогами аналогічна.

Дозволи для файлів

Перед роботою з файлом можна перевірити, чи він доступний для читання чи запису. Для цього потрібно використовувати функції is_writable() та is_readable().

"; echo $file . (is_writable($file) ? " " : " не") . " записується.";

Ці функції повертають логічне значення і пояснюють, чи операція може бути виконана у файлі.

Код виведе наступні значення на екран:

  • C: Windowsfile.ini читається.
  • C: Windowsfile.ini не записується.

Використовуючи тернарний оператор, можна вказати, чи доступний файл чи ні.

розмір файла

Щоб дізнатися про розмір файлу, потрібно використовувати функцію filesize(). Він буде показаний у байтах.

Функція виведе на екран наступне:

  • C: Windowsfile.ini має розмір 510 б.

Використання файлу в системі Windows підкреслює один нюанс. Зворотна коса риса має особливе значення як символ escape. Потрібно буде уникати цього, додавши ще одну зворотну косу межу.

Якщо файл ще не створений, функція filesize() вкаже на False та помилку. Тому спочатку перевіряють файл існування потрібної команди file_exists().

Перевірку file_exists() потрібно включати практично завжди для безпеки.

Читання файлів

У попередньому розділі показано, як багато можна дізнатися про файли, з якими працюєте, перш ніж починати читати або записувати їх. Тепер можна розібратися з тим, як відбувається читання вмісту файлу.

Функції роботи з файлами PHP полегшують завдання. У цьому випадку знадобиться file_get_contents(). Вона зчитуватиме весь вміст файлу в змінну без необхідності відкривати або закривати файл самостійно. Це зручно, коли обсяг запису відносно невеликий, тому що відразу зчитувати 1 ГБ даних до архіву не завжди раціонально в PHP. Робота з «.ini»-файлами та функцією file_get_contents() показана нижче.

Для великих файлів або просто залежно від потреб вашого скрипта, може бути розумніше обробляти деталі самостійно. Це пов'язано з тим, що як тільки файл відкривається, ви можете шукати в ньому певне зауваження та читати стільки даних, скільки захочете. Функція fopen() використовується для відкриття файлу.

Для роботи з функцією fopen() необхідні два аргументи:

  • файл, який слід відкрити;
  • режим, який використовується в цьому випадку є "r" для читання.

Функція повертає дескриптор або потік у файл, який зберігається у змінній $file1. Її потрібно використовувати у всіх наступних командах під час роботи з файлом.

З метою читання з відкритого файлу по одному рядку за раз, можна використовувати функцію fgets().

";) while (!feof($file1)); fclose($file1);

Використання do-while-циклу є гарним вибором, щоб дізнатися заздалегідь, скільки рядків у файлі. Функція feof() перевіряє, чи досяг файл завершення, а цикл триває доти, доки досягне кінець умови файла. Після закінчення читання використовується функція fclose() для закриття документа.

Записування файлів

Два режими, що часто використовуються при записі у файл з використанням функції fwrite(): «w» і «a». "W" означає, що потрібно записати в документ, але він попередньо видалить будь-який вміст, "a" - додавання нових даних до того, що вже існує у файлі. Слід бути впевненим, що використовується правильний варіант.

У цьому прикладі буде використовуватися режим «a» для запису.

Спочатку ім'я файлу призначається змінною, потім відкривається в режимі «a» для додавання. Дані, які мають бути записані, призначаються змінною $output та fwrite(), а інформація додається до файлу. Процес повторюється, щоб додати ще один рядок, а потім документ закривається за допомогою fclose().

Попередньо певна константа PHP_EOL додає символ нового рядка, специфічний для платформи, де працює PHP з текстовими файлами.

Вміст файлу після виконання вищезазначеного коду має виглядати так:

  • банан;
  • Китай.

Функція file_put_contents() також може записувати файл. Вона приймає ім'я файлу, дані, які повинні бути записані і константу FILE_APPEND, якщо вона повинна додати дані (перезаписуватиме вміст файлу за замовчуванням).

Ось такий приклад, як і вище, але цього разу використовується file_put_contents().

З цими функціями доводиться працювати часто, тому краще їх запам'ятати. До того ж вони можуть працювати з файлами PHP якось полегшити деякі складні завдання.

Останнє оновлення: 1.11.2015

Як і більшість мов програмування, PHP підтримує роботу з файлами, які є одним із способів зберігання інформації.

Читання та запис файлів

Відкриття та закриття файлів

Для відкриття файлів у PHP визначено функцію fopen() . Вона має таке визначення: resource fopen (string $ filename, string $ mode). Перший параметр $filename являє собою шлях до файлу, а другий - режим відкриття. Залежно від мети відкриття та типу файлу, цей параметр може приймати наступні значення:

    "r": файл відкривається лише для читання. Якщо файл не існує, повертає false

    "r+": файл відкривається лише для читання з можливістю запису. Якщо файл не існує, повертає false

    "w": файл відкривається для запису. Якщо такий файл вже існує, він перезаписується, якщо ні - він створюється

    "w+": файл відкривається для запису з можливістю читання. Якщо такий файл вже існує, він перезаписується, якщо ні - він створюється

    "a": файл відкривається для запису. Якщо такий файл вже існує, дані записуються в кінець файлу, а старі дані залишаються. Якщо файл не існує, він створюється

    "a+" : файл відкривається для читання та запису. Якщо файл вже існує, дані дозаписуються в кінець файлу. Якщо файлу немає, він створюється

Результатом функції fopen буде дескриптор файлу. Цей дескриптор використовується для операцій із файлом та для його закриття.

Після закінчення роботи файл треба закрити за допомогою функції fclose(), яка приймає як параметр дескриптор файлу. Наприклад, відкриємо та закриємо файл:

$fd = fopen("form.php", "r") or die("не вдалося відкрити файл"); fclose($fd);

Конструкція or die("текст помилки") дозволяє припинити роботу скрипту та вивести деяке повідомлення про помилку, якщо функція fopen не змогла відкрити файл.

Читання файлу

Для читання файлу можна скористатися кількома функціями. Для рядкового читання використовується функція fgets() , яка отримує дескриптор файлу і повертає один рядок. Пройдемо рядково по всьому файлу:

При кожному виклик fgets() PHP буде поміщати покажчик в кінець ліченого рядка. Щоб простежити закінчення файлу, використовується функція feof() , яка повертає true під час завершення файлу. І поки не буде досягнуто кінця файлу, ми можемо застосовувати функцію fgets().

Читання файлу повністю

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

Поблочне зчитування

Також можна провести побочное зчитування, тобто зчитувати певну кількість байт із файлу за допомогою функції fread() :

Функція fread() приймає два параметри: дескриптор зчитуваного файлу і кількість байтів, що зчитуються. При зчитуванні блоку покажчик у файлі стає на кінець цього блоку. Також за допомогою функції feof() можна відстежити завершення файлу.

Запис файлу

Для запису файлу використовується функція fwrite() , яка записує у файл рядок:

Аналогічно працює інша функція fputs():

Робота з покажчиком файлу

При відкритті файлу для читання або запису в режимі "w" вказівник у файлі поміщається на початок. При зчитуванні даних PHP переміщає покажчик у файлі на кінець блоку лічених даних. Однак ми також вручну можемо керувати покажчиком у файлі та встановлювати його у довільне місце. Для цього потрібно використати функцію fseek, яка має таке формальне визначення:

Int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ])

Параметр $handle представляє дескриптор файлу. Параметр $offset - усунення в байтах щодо початку файлу, з якого почнеться зчитування/запис. Третій необов'язковий параметр задає спосіб встановлення зміщення. Він може приймати три значення:

    SEEK_SET : значення за замовчуванням, встановлює зміщення в offset байт щодо початку файлу

    SEEK_CUR : встановлює зміщення в offset байт щодо початку поточної позиції у файлі

    SEEK_END : встановлює зміщення в offset байт від кінця файлу

У разі вдалого встановлення покажчика функція fseek() повертає 0, а при невдалій установці повертає -1.

Приклад використання функції:

$fd = fopen("hello.txt", "w+") or die("не вдалося відкрити файл"); $str = "Привіт мир!"; // рядок для запису fwrite($fd, $str); // запишемо рядок на початок fseek ($ fd, 0); // Розмістимо покажчик файлу на початок fwrite($fd, "Хрю"); // запишемо на початок рядок fseek ($ fd, 0, SEEK_END); // Розмістимо покажчик у кінець fwrite($fd, $str); // запишемо наприкінці ще один рядок fclose($fd);

А зараз буде досить великий, але не складний урок роботи з файлами в php. Для початку, навіщо потрібні файли? Адже можна все зберігати в базі даних MySQL чи PostgreSQL чи будь-який інший. Але іноді бувають такі завдання, коли використання БД, з усіма обробками та турботою про безпеку з'єднання, не доцільно. Наприклад, потрібно зробити звичайний лічильник, а до цього в проекті у нас БД не використовувалася. Так що нам, заради одного маленького лічильника заводити базу даних і зберігати в ній всього кілька рядків? Тут набагато простіше користуватися файлами. До того ж іноді на хостингу взагалі немає підтримки баз даних, тоді файли взагалі залишаються єдиним виходом.

Ну, припустимо, я вас переконав, що файли необхідні:) Тепер давайте розбиратися, як же з ними працювати. Як створювати, відкривати, записувати, перезаписувати, читати тощо. Про все по порядку.

Створюємо файл

У PHP для відкриття файлів використовується функція fopen. Тим не менш, вона також може створювати файли. Якщо передати fopen ім'я файлу, якого немає, вона створить його.

Сама функція fopen приймає два параметри, обидва вони є обов'язковими. По-перше, ми маємо вказати ім'я файлу, який хочемо відкрити. По-друге, передати параметр, який пояснює функції, що ми плануємо робити із цим файлом (наприклад, читання з файлу, запис тощо).

Якщо потрібно створити файл, то вказуємо його ім'я та передаємо параметр, що ми хочемо записати до нього дані. Зверніть увагу: Ми повинні обов'язково сказати PHP, що ми пишемо у файл, інакше вона не буде створювати новий файл.

Приклад:

$ourFileName = "testFile.txt";

$ourFileHandle = fopen($ourFileName, "w") або die("can"t open file");

fclose($ourFileHandle);

Перший рядок $ourFileName = testFile.txt створює рядкову змінну, в якій ми зберігатимемо ім'я файлу.

Другий рядок $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file") відповідно створює або відкриває вже існуючий файл на запис. Або повертає повідомлення, що не може відкрити файл.

Третій рядок fclose($ourFileHandle) закриває файл. Насправді, все просто.

Параметри відкриття файлу у php

Перший параметр 'r' (read) - відкриває файл тільки читання, записувати в нього буде не можна.

Другий параметр w (write) - відкриває для запису. При цьому запис буде йти з початку файлу. Якщо там уже є якась інформація — то її буде перезаписано.

Третій параметр 'a' (append) - відкриває файл на запис, але при цьому дописуватиме в кінець файлу, на відміну від w.

Розширені параметри:

Параметр 'r+' — відкриває і читання і запис. Вказівник буде на початку файлу.

Параметр 'w+' — відкриває і читання і запис, АЛЕ видаляє всю інформацію, що у файле!!!

параметр 'a+' — відкриває на читання та запис, але покажчик буде наприкінці файлу.

Природно, що функції можна передати лише з цих параметрів, а чи не кілька. Їх потрібно підставляти замість 'X':

fopen($ourFileName, "X")

Запис у файл

Ну, ось ми відкрили файл, підібрали потрібний нам параметр, що далі? Потрібно в нього щось записати. Як це зробити? За допомогою функції fwrite, яка приймає як параметр покажчик на файл і рядок тексту, який хочемо записати. Приклад:

$myFile = "testFile.txt";

$fh = fopen($myFile, "w") або die("can"t open file");

$stringData = "Перший рядокn";

fwrite($fh, $stringData);

$stringData = "Другий рядокn";

fwrite($fh, $stringData);

Створили файл testFile.txt, покажчик на нього зберігається у змінній $fn. Записали у нього рядок «Перший рядок» (наприкінці застосували символ кінця рядка n), та був і «Другий рядок». Після цього закрили файл.

УВАГА! Ніколи не забувайте закривати ваші файли! Інакше у разі аварійного завершення виконання скрипту – дані у файлах не збережуться! Завжди після роботи використовуйте fclose!

Читання з файлу

Записати записали, тепер давайте прочитаємо! Це також не так складно. Використовуємо функцію fread. На вхід їй подаємо покажчик на файл та кількість байт, яку хочемо прочитати. Наприклад, один символ дорівнює одному байту (залежить від кодування), ми хочемо прочитати 5 символів: $ theData = fread ($ fh, 5).

Але якщо потрібно отримати всю інформацію, яка є у файлі, то нам знадобиться функція filesize, яка повертає кількість байт у файлі, отже, якщо результат функції filesize передати у fread, то ми отримаємо повністю всю інформацію з файлу:

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$theData = fread($fh, filesize($myFile));

Сподіваюся, зрозуміло пояснив.

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$ theData = fgets ($ fh);

В результаті отримаємо перший рядок із файлу testFile.txt. Відповідно, щоб пройтися по всіх рядках потрібно використовувати цикл foreach:

$lines = file("testFile.txt");

foreach($lines as $single_line)

echo $single_line . "
n";

Тепер ви навчилися відкривати файли на читання, запис або те й інше. Записувати в них дані або дописувати зверху, за допомогою Append, а також читати з них інформацію.

Якщо ви самостійно засвоюєте роботу з php, то важливо навчитися читати дані з файлу та вводити зміни. Запис у файл php ведеться для розробки веб-додатків, змін серверної інформації та запуску зовнішніх програм та включень.

Як працювати з файлами php

Якщо у файлу вказано таке розширення, то в собі він містить програмний код, написаний однойменною мовою програмування. Для того, щоб вести зміни, вам необхідно буде встановити на своєму ПК один із програмних редакторів:

PHP Expert Editor;
. Dreamweaver;
. Eclipse PHP Development;
. PHPEdit.

Якщо ви створюєте сайт, необхідно часто використовувати ідентичні конструкції, які зручно зберігати у вигляді шаблонів в іншому файлі. Для цього краще використовувати include. Після введення цієї функції необхідно зробити запис файлу php імені та розширення підключення, наприклад, include 1.php. Ця конструкція підтримує можливість множинного читання файлу, і додатковою особливістю є безперервність виконання коду при помилці. Якщо щось піде не так, код продовжить виконуватися з нового рядка.
Таким чином, ви підключите файл до коду. Ще одним способом є введення require. На відміну від вищеописаного include, файл підключається до початку виконання програмного коду, але звернутися до нього можна лише один раз.

Перевірка файлу

Перед тим, як зробити запис у файл php, необхідно переконатися, що він існує, а потім відкрити його і провести необхідне редагування. Для цього можна використовувати функцію file_exists(), якщо вона підтвердить наявність, то у вікні редактора буде повернуто відповідь TRUE, інакше - FALSE.
Про те, що можливий запис даних у файл php, може повідомити інша функція is_file(). Вона надійніша, ніж file_exits, і більшість програмістів для початку роботи використовує саме is_file. Після того, як ви переконалися в існуванні файлу, можна розпочинати роботу з ним.

Внесення змін до файлу

Першим інструментом, який можна використовувати для внесення змін до файлу – fwrite(). Вона записує рядки з наступним синтаксисом:

Int – маніпулятор;
. String – змінна.

Існує ще одна аналогічна до цієї функції - fputs(), яка є псевдонімом. Відмінностей між цими інструментами немає, можна використовувати на вибір один чи інший. Для учнів більш поширена fwrite, а практикуючі програмісти найчастіше використовують fputs.

Щоб внести php запис у текстовий файл, необхідно дотриматись однієї важливої ​​умови - він повинен бути відкритий для правок. Розташовуватись такий файл повинен у папці з правами на запис.

Для роботи спробуйте спочатку відкрити текстовий документ у програмі, а потім уже вносити редагування за допомогою звичайних інструментів.

// Відкрити текстовий файл
$f = fopen("text.txt", "w");
// Записати рядок тексту
fwrite($f, "Hello! Good day!");
// Закрити текстовий файл
fclose($f);

У цьому вся прикладі text.txt - ім'я документа. Ви можете назвати його інакше: Hello! Good day!» - приклад тексту, може бути цілком довільним. Всі зміни автоматично зберігаються у відкритому файлі.

Зазначимо, що PHP – це загального призначення. Він інтенсивно застосовується для створення веб-застосунків. Це рішення підтримується більшістю хостинг-провайдерів. Йдеться про лідера серед засобів, які використовуються для створення веб-сайтів. Тепер ви знаєте, як зробити запис у файл PHP.