Створення, відкриття, читання, запис, видалення та перевірка наявності файлу в PHP. Робота з файлами у PHP. Читання файлу, запис у файл. PHP підручник. Видалення файлів, зміна chmod, робота з каталогами. C Php дані з файлу

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

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

Відкрити текстовий файл

Для відкриття текстового файлу використовуємо функцію fopen. Ось її синтаксис:

Fopen ( filename, mode)

Filename Ім'я файлу, що відкривається. mode Mode/Режим може бути "r" (reading/читання), "w" (writing/запис) або "a" (appending/приєднання). У цьому уроці ми тільки читатимемо з файлу і, відповідно, використовуємо "r". У наступному уроці ми навчимося записувати та приєднувати текст.

Приклади цього уроку використовують файл unitednations.txt. Це простий список програм та фондів ООН та їх доменів. Можете завантажити цей файл або створити свій та використовувати його в прикладах.

Спочатку спробуємо відкрити unitednations.txt:

// Відкрити текстовий файл // Закрити текстовий файл fclose($f); ?>

Приклад 1: Читання рядка з текстового файлу

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

Для отримання інформації з кожного рядка використовуємо масив. В Уроці 8 про масиви.

Читання з текстових файлів $f = fopen("unitednations.txt", "r"); // Читати до кінця файлу while (!feof($f)) ( // Створити масив із комою-розділювачем $arrM = explode(",",fgets($f)); // Записати посилання (отримати дані з масиву) echo "

  • " . $arrM. "
  • "; ) fclose($f); ?>

    Дуже зручно, правда? В принципі, ви можете розширити цей файл сотнями посилань або розширити директорію, включивши також адреси.

    У наступному уроці ми побачимо, як записати в текстовий файл.

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

    Щоб створити файл на php у скрипті, що виконується, треба всього лише вказати кілька функцій:

    Розглянемо відразу приклад:

    $text = "Якийсь тут текст для запису файл";
    $fp = fopen("file.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    Тут ви повинні знати:

    fopen()- функція відкриває файл читання або для запису та уточненнями;

    Це уточнення (параметр mode функції fopen) дуже важливо:

    • "r" - відкрити файл у php ТІЛЬКИ для читання. Курсор поміщається на початок.
    • "r+" - відкрити файл у php для читання та для запису. Курсор поміщається на початок. !!! - за цих двох режимів r і r+ файли вже повинні бути створені (інакше вилізе помилка Warning: fopen(file.txt) : виконаний до Open stream: No such file or directory in ...), а ми лише читаємо чи маємо можливість дописувати.
    • "w- відкривається файл ТІЛЬКИ для запису. Файл урізається до нульової довжини - тобто затирається. Записується, що потрібно і Курсор ставиться в початок.
    • "w+" - відкривається файл для запису І ЧИТАННЯ! Решта те саме що й у режимі "w". !!! - при цих двох режимах - якщо файл не був створений - ПОПЕРЕДЖАЄТЬСЯ СПРОБУ ЙОГО СТВОРИТИ!
    • "a- відкрити файл ТІЛЬКИ для запису. На відміну від "w" цей параметр не затирає вміст файлу, а ставить курсор в кінець рядка і додає в кінець вміст, який ми хотіли додати.
    • "a+- відкрити файл для запису та читання.

    fwrite($fp, $text) - функція запису в файл на php - тобто те, що знаходиться в змінній $text записується у файл, який знаходиться в змінній $fp;

    fclose($fp) - функція закриття файлу, який ми записали у змінну $fp;

    Все тепер ви можете спокійно створювати правильно файли на php, відкривати їх для читання та редагування.

    Корисні доповнення та функції PHP для роботи з відкритим файлом:

    while(!feof($fp))(
    $ mytext = fgets ($ fp, 99);
    echo $mytext."
    ";
    }

    тут виконується умова - "поки не досягнуто кінця файлу то роби то то" while(!feof($fp))

    1. Функція fgets($fp, 99) - дозволяє розділити весь вміст на ділянки в 99 байт і далі, щоб це чіткіше побачити ми поміщаємо тег

    Ця функція string fgets(resource handle [, int length]) за замовчуванням приймає параметр length 1024 байта(1 кілобайт), якщо не вказати так і буде. Цей параметр необов'язковий із PHP 4.2.0 (У разі помилки повертає FALSE)

    Додаткові функції для відкриття, запису та створення файлу

    Функція - int readfile(string filename [, bool use_include_path [, resource context]]) – зчитуємо файл як єдине ціле.

    Читає файл і записує вміст у буфер виводу. І повертає кількість виведених байт. У разі помилки поверне, якщо не використаний песик - @readfile.

    Щось подібне вийде:

    Наприкінці слова тег стоять
    .

    б. Функція - array file(string filename [, int use_include_path [, resource context]]), робить те саме, що й функція readfile, за одним винятком вона додає вміст файлу в масив:

    Таким чином, можна зчитувати будь-які сторінки в інтернеті: $lines = file("http://сайт/"); і перебрати масив через функцію foreach;

    3а. Функція string file_get_contents(string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]]) – дозволяє отримати вміст у вигляді одного рядка.

    Це більш універсальна функція PHP для зчитування файлу, схожа на функцію file, тільки вміст повертається в рядок, а не в масив і можна задавати умови - з якого байта починати - offsetі з якого закінчувати - maxlen. У разі невдачі поверне FALSE.

    Важливо!- у цьому випадку функція замінює відразу 3: fopen(), fread() і fclose() і таким чином позбавляє марок.

    3б. Функція int file_put_contents(string filename, mixed data [, int flags [, resource context]]) - ідентична послідовному виклику функцій fopen(), fwrite() і fclose() - повертає кількість записаних байт.

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

    Існує безліч можливостей виконувати читання з файлів – можна отримати дані у різній формі – строкове зчитування, отримання масиву рядків тощо.

    Створення та запис файлу

    Для створення файлу необхідно виконати відкриття файлу в режимі запису. Відкриття файлу виконується функцією fopen. Перший параметр цієї функції вказує шлях до файлу. Другий параметр вказує на режим відкриття файлу. Для створення файлу необхідно вказати режим запису файлу - "w".

    $f = fopen( "myfile.txt", "w");

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

    * Ще існує параметр "w+", що дозволяє, відкривати одночасно для читання та запису. При цьому, якщо файл із таким ім'ям уже існував, дані в ньому зітруться.

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

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

    fwrite($f, "Мій текст для запису у файл.");

    Після запису всіх рядків його необхідно закрити. Для цього застосовується функція fclose. Єдиним параметром для неї є дескриптор файлу.

    fclose($f);

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

    $f = fopen( "myfile.txt", "w");
    fwrite($f, "Перший рядок.\r\n");
    ...
    fwrite($f, "Останній рядок.\r\n");
    fclose($f);

    * Символи "\r\n"означають символ кінця рядка. Якщо не додавати, всі рядки в записаному файлі поєднуються в один рядок.

    Додавання даних до існуючого файлу

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

    $f = fopen( "myfile.txt", "a"); "// Параметр "a" вказує відкрити в режимі додавання"
    fwrite($f, "Новий рядок\r\n");
    fclose($f);

    Якщо ж файлу з вказаним ім'ям немає, файл буде створено і всі дані будуть записані до нього.

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

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

    Для читання з файлу функції fopen призначається параметр "r", що означає, що файл буде відкритий тільки для читання. Читання з файлу виконує функцію fgets. Першим параметром вказується дескриптор файлу. Другий, необов'язковий параметр визначає розмір зчитуваного рядка. Якщо другий параметр не вказувати, поточний рядок буде зчитано до символу кінця рядка.

    $f = fopen( "myfile.txt", "r"); // Параметр "r" вказує відкрити у режимі читання
    $ s = fgets ($ f);
    echo $s;
    fclose($f);

    * Режим "r+"відкриває файл для читання та запису.

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

    $f = fopen( "myfile.txt", "r");
    while (!feof($f))(
    $ s = fgets ($ f);
    echo $s;
    }
    fclose($f);

    Функція feof використовується за умови циклу визначення кінця файлу і завершення циклу зчитування.

    Крім описаного методу отримання даних із файлу, PHP має ще безліч різних функцій. Іноді простіше отримати стразу весь вміст файлу (функція readfile) або завантажити всі рядки в масив (функція file) і працювати вже з ним. Для таких цілей не доведеться відкривати файл для читання та закривати його. Усі ці дії будуть виконані самою функцією.

    readfile( "myfile.txt");

    $mas = file("myfile.txt");

    foreach ($mas as $m)
    echo $m;

    За допомогою функції fgetc можна читати вміст файлу посимвольно:

    $f = fopen( "myfile.txt", "r");
    while (!feof($f))(
    $ s = fgetc ($ f);
    echo $s;
    }
    fclose($f);

    Видалення файлу

    Видалення файлу виконується функцією unlink. У параметрі вказується шлях до файлу, що видаляється.

    unlink( "myfile.txt");

    Перевірка чи існує файл

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

    if (file_exists("myfile.txt"))
    echo "Такий файл є.";
    else
    echo "Файлу з такою назвою немає.";

    Про використання функцій fopen, fclose, feof, fgets, fgetss та fscanf

    Давайте перерахуємо всі можливості

    Однією з переваг роботи із сучасними мовами програмування, такими як PHP, є кількість доступних можливостей. PHP легко міг би привласнити девіз мови Perl, "Існує кілька способів зробити щось", особливо коли йдеться про обробку файлів. Але при достатку доступних коштів виникає питання, яке з них краще для виконання роботи. Звичайно, насправді, відповідь на це питання залежить від того, які цілі ви ставите при обробці файлу, тому вивчення всіх можливостей мови стоїть витраченого часу.

    Традиційні методи fopen

    Методи fopen, можливо, краще за інших знайомі програмістам C і C++ минулих часів, оскільки більшою чи меншою мірою є саме тими інструментами, які протягом довгих років були завжди у вас під рукою, якщо ви працювали з цими мовами програмування. Для будь-якого з цих методів ви виконуєте стандартну процедуру, використовуючи fopen для відкриття файлу, функцію читання даних, а потім fclose для закриття файлу, як показано в Лістингу 1.

    Лістинг 1. Відкриття та читання файлу за допомогою fgets
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

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

    1. Відкриваєте файл. $file_handle зберігає посилання сам файл.
    2. Перевіряєте, чи не досягли ви кінця файлу.
    3. Продовжує зчитування файлу, поки не досягнете кінця, друкуючи кожен рядок, який читаєте.
    4. Закриваєте файл.

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

    Функція fopen

    Функція fopen встановлює зв'язок із файлом. Я говорю "встановлює зв'язок, " оскільки, крім відкриття файлу, fopen може відкрити і URL:

    $fh = fopen("http://127.0.0.1/", "r");

    Цей рядок програми створює зв'язок із вищезгаданою сторінкою і дозволяє вам розпочати її читання як локальний файл.

    Примітка:Параметр "r", використаний у fopen, вказує на те, що файл відкритий тільки для читання. Оскільки запис у файл не входить до кола питань, що розглядаються в цій статті, я не перераховуватиму всі можливі значення параметра. Тим не менш, вам необхідно змінити "r" на "rb" якщо ви читаєте з двійкових файлів для міжплатформної сумісності. Нижче наведено приклад даного типу.

    Функція feof

    Команда feof визначає, чи зроблено читання до кінця файлу, і повертає значення True (Істина) або False (Брехня). Цикл, наведений у продовжується, доки не буде досягнуто кінець файлу "myfile." Зверніть увагу, що feof також повертає False, якщо ви читаєте URL-адресу і відбулося перевищення часу очікування підключення, оскільки немає більше даних для зчитування.

    Функція fclose

    Пропустимо середину Лістингу 1 і перейдемо до кінця; fclose виконує завдання, протилежне fopen: вона закриває підключення до файлу чи URL. Після виконання цієї функції ви більше не зможете читати з файлу або сокету.

    Функція fgets

    Повертаючись на кілька рядків тому в Лістингу 1, ви потрапляєте в центр процесу обробки файлів: безпосередньо читання файлу. Функція fgets - це обрана вами зброя для першого прикладу. Вона захоплює рядок даних із файлу і повертає її як рядок. Звідти ви можете виводити дані або обробляти їх в інший спосіб. У прикладі, наведеному в Лістингу 1, друкується весь файл повністю.

    Якщо ви вирішите обмежити розмір порції даних, з якою працюєте, можна додати fgets аргумент для обмеження максимальної довжини рядка даних, що захоплюються. Наприклад, використовуйте наступний програмний код для обмеження довжини рядка 80 символів:

    $string = fgets($file_handle, 81);

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

    Функція fread

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

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

    $fh = fopen("myfile", "rb"); $ data = fread ($ file_handle, 4096);

    У наведеному прикладі зчитується 4096 байтів (4 KB) даних. Зверніть увагу, що, незалежно від вказаного вами значення, fread зчитуватиме не більше 8192 байтів (8 KB).

    Припускаючи, що файл не більше 8 КБ, фрагмент програми, наведений нижче, повинен зчитувати весь файл в один рядок.

    $fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose($fh);

    Якщо розмір файлу більший, вам доведеться використовувати цикл для зчитування частини, що залишилася.

    Функція fscanf

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

    list ($field1, $field2, $field3) = fscanf($fh, %s %s %s);

    Рядки форматування, використані в цій функції, описані в багатьох джерелах, таких як PHP.net, тому я не повторюватиму цю інформацію тут. Досить сказати, що форматування рядків є дуже гнучким. Слід також згадати, що всі поля поміщаються в змінну, що повертається функцією. (У мові C вони передавалися як аргументи.)

    Функція fgetss

    Функція fgetss відрізняється від традиційних функцій для роботи з файлами і дає вам найкраще уявлення про можливості PHP. Вона працює на кшталт fgets, але відкидає будь-які виявлені нею теги HTML або PHP, залишаючи лише "голий" текст. Візьмемо наведений нижче HTML-файл.

    Лістинг 2. Приклад файлу HTML
    My title

    Якщо ви не розумієте, що "відповідь не буде", то не один для того, щоб ти не тримав".

    Пропустимо його через функцію fgetss.

    Лістинг 3. Використання fgetss
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

    Ось що ви отримаєте як вихідні дані:

    My title If you understand what "Додаток, що є", не один для того, щоб ти не мав "завдання", що ви нагадуєте про те, що багато з Америки

    Функція fpassthru

    Незалежно від того, як ви зчитуєте дані з файлу, ви можете вивести дані на друк, використовуючи стандартний канал виведення інформації, за допомогою функції fpassthru .

    fpassthru($fh);

    Ця функція виводить дані на друк, тому вам не потрібно поміщати їх у змінну.

    Нелінійна обробка файлу: переміщення файлом

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

    fseek ($ fh, 0);

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

    fseek ($ fh, 1024);

    Починаючи з PHP V4.0, доступні також кілька інших опцій. Наприклад, якщо потрібно перейти вперед на 100 байт від вашої поточної позиції, ви можете використовувати наступний код:

    fseek ($ fh, 100, SEEK_CUR);

    Аналогічно, перехід назад на 100 байт здійснюється за допомогою:

    fseek ($ fh, -100, SEEK_CUR);

    Якщо ви хочете перейти назад у положення 100 байт до кінця файлу, використовуйте SEEK_END .

    fseek ($ fh, -100, SEEK_END);

    Після досягнення нового положення можна скористатися fgets , fscanf або іншою функцією для читання даних.

    Примітка:ви не можете використовувати fseek у дескрипторах файлу, що посилаються на URL-адресу.

    Захоплення цілого файлу

    Тепер ми переходимо до розгляду унікальних можливостей PHP для обробки файлів: обробка великих блоків даних в одному або двох рядках. Наприклад, як можна захопити файл та вивести весь його вміст на вашу Web-сторінку? Що ж, ви бачили приклад використання циклу з fgets. Але як це зробити простіше? Процес майже смішно простий при використанні fgetcontents , яка поміщає весь файл у рядок.

    $my_file = file_get_contents("myfilename"); echo $my_file;

    Хоча це і не найкращий варіант, ви можете записати цю команду ще коротше:

    echo file_get_contents("myfilename");

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

    echo file_get_contents("http://127.0.0.1/");

    Це команда фактично та сама, що й:

    $fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

    Мабуть, ви дивитеся на ці приклади і думаєте, "Це таки надто трудомісткий спосіб". PHP-розробники погоджуються з вами. Тому ви можете скоротити наведену вище команду до:

    readfile("http://127.0.0.1/");

    Функція readfile передає на виведення весь вміст файлу або Web-сторінки у вихідний буфер за промовчанням. За замовчуванням ця команда виводить повідомлення про помилку під час збою. Щоб уникнути такої поведінки (якщо ви цього хочете), спробуйте команду:

    @readfile("http://127.0.0.1/");

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

    $array = split("\n", file_get_contents("myfile"));

    Але до чого вам усі ці складності, якщо є ідеальна функція, яка зробить за вас цю роботу? Функція PHP file() виконує це завдання одним кроком: вона повертає рядковий масив, елементами якого є рядки файлу.

    $array = file("myfile");

    Слід зауважити, що між двома наведеними вище прикладами є невелика відмінність. Команда split видаляє знаки переходу на новий рядок, тоді як при використанні команди файлу рядки масиву закінчуються знаками переходу на новий рядок (так само, як і при використанні fgets).

    Можливості PHP, проте, далеко перевершують описані вище. Ви можете розбити цілі.ini-файли в стилі PHP лише однією командою parse_ini_file . Команда parse_ini_file застосовна до файлів, подібних до наведених у Лістингу 4.

    Лістинг 4. Приклад файлу.ini
    ; Comment name = "King Arthur" quest = Для того, щоб статевий льодовик favorite color = Blue Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

    Наступні команди представляють файл у вигляді масиву, а потім виводять цей масив на друк:

    $file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

    В результаті будуть отримані наступні вихідні дані:

    Лістинг 5. Вихідні дані
    Array ( => King Arthur => Для сексу Халлі Grail => Blue => Mark Twain => Whoopi Goldberg)

    Звичайно, ви можете помітити, що команда об'єднала розділи. Це дія за замовчуванням, але ви легко можете зробити необхідне налаштування, скориставшись другим аргументом parse_ini_file: process_sections, який є змінною логічного типу (Boolean). Встановіть значення process_sections як True (істина).

    $file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

    І ваші вихідні дані матимуть вигляд:

    Лістинг 6. Вихідні дані
    Array ( => Array ( => King Arthur => Для сексу Халлі Grail => Blue) => Array ( => Mark Twain => Whoopi Goldberg))

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

    Але це лише верхівка айсберга, якщо говорити про обробку файлів у PHP. Більш складні функції, наприклад tidy_parse_file та xml_parse, можуть допомогти вам з обробкою відповідно HTML- та XML-документів. Зверніться до розділу , щоб отримати докладнішу інформацію про роботу цих функцій. Обидві вони варті уваги, якщо ви працюватимете з файлами зазначених типів, але замість розгляду всіх можливих типів файлів, ви можете уважно ознайомитися зі змістом цієї статті, де є кілька непоганих загальних правил роботи з функціями, описаними мною на даний момент.

    Хороший стиль програмування

    Ніколи не вважайте, що все у вашій програмі працюватиме так, як було задумано. Наприклад: якщо файл, який ви шукаєте, був переміщений? Що, якщо ви не можете прочитати вміст файлу в результаті зміни прав доступу? Можна заздалегідь перевірити наявність файлу та права на його читання, скориставшись методами file_exists та is_readable.

    Лістинг 7. Використання file_exists та is_readable
    $ filename = " myfile " ; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Processing fclose($fh); )

    Тим не менш, на практиці цей фрагмент програми буде, мабуть, надмірним для вашого завдання. Обробка значень, що повертаються fopen, простіше та точніше.

    if ($fh = fopen($filename, "r")) ( # Processing fclose($fh); )

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

    Як і fopen, функції file_get_contents, file і readfile повертають значення False, якщо не вдається відкрити або обробити файл. Функції fgets, fgetss, fread, fscanf та fclose також повертають значення False при виникненні помилки. Звичайно, за винятком fclose, ви, ймовірно, вже обробили повернені ними результати. Що стосується fclose, мало що можна зробити, якщо дескриптор файлу не закривається належним чином, тому перевірка поверненого значення функції fclose, як правило, є зайвою.

    Вибір за вами

    PHP не відчуває браку ефективних способів читання та аналізу файлів. Класичні функції, такі як fread , можуть надійно служити вам більшу частину часу, або вас може більше залучити простота readfile , якщо це необхідно для виконання завдання. Вибір насправді залежить від того, що ви намагаєтеся виконати.

    Якщо ви обробляєте великі обсяги даних, ймовірно, fscanf виявиться більш корисним і ефективним, ніж, скажімо, використання файлу в поєднанні з наступними командами split і sprintf. Якщо ви просто відображаєте текст великого обсягу з незначними змінами, навпаки, використання функцій file , file_get_contents , або readfile , можливо, буде доцільним. Це рішення, ймовірно, буде вірним при використанні PHP для кешування або навіть створення тимчасового сервера проксі.

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

    string fgets(Resource handle [, int length])

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

    У разі помилки функція повертає FALSE .

    Найбільш поширені помилки:

    Програмісти, що звикли до семантики "C" функції fgets(), повинні брати до уваги різницю в тому, як повертається ознака досягнення кінця файлу (EOF).

    Вказівник на файл повинен бути коректним і вказувати на файл, успішно відкритий функціями fopen()або fsockopen() .

    Нижче наведено простий приклад:


    Приклад 1. Порядкове читання файлу

    $handle = fopen ("/tmp/inputfile.txt", "r");
    while (! feof ($handle )) (
    $buffer = fgets ($handle, 4096);
    echo $buffer;
    }
    fclose ($handle);
    ?>

    Примітка:Параметр length став необов'язковим, починаючи з PHP версії 4.2.0. Якщо цей параметр опущений, довжина рядка приймається за 1024. З версії PHP 4.3, відсутність параметра length призводитиме до читання потоку до кінця рядка. Якщо довжина більшості рядків у файлі перевищує 8 кілобайт, найбільш ефективним рішенням щодо ресурсів, які використовуються скриптом, буде вказівка ​​максимальної довжини рядка.

    Примітка:Ця функція може коректно обробляти двійкові дані, починаючи з версії PHP 4.3. Більш ранні версії не мали цієї функціональності.