Історія файлів
Може знадобиться дізнатися час останнього редагування файлу. У цьому випадку на допомогу приходять функції: 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. Її потрібно використовувати у всіх наступних командах при роботі з файлом.
Режим | Значення | Позиція курсору | Якщо файлу не існує? |
r | тільки читання | початок файлу | видасть помилку |
w | тільки запис | початок файлу | створить новий |
a | тільки запис | кінець файлу | створить новий |
З метою читання з відкритого файлу на одному рядку за раз, можна використовувати функцію fgets().
“;}
while (!feof($file1));
fclose($file1);
Використання do-while-циклу є гарним вибором, щоб дізнатися заздалегідь, скільки рядків у файлі. Функція feof() перевіряє, чи досяг файл завершення, а цикл продовжується до тих пір, поки не буде досягнутий кінець умови файлу. Після закінчення читання використовується функція fclose() для закриття документа.