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

Матеріал з Вікі ЦДПУ
Перейти до: навігація, пошук

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


Функція Is_readable()

Функція Is_readable() дозволяє переконатися в тому, що файл існує і для нього дозволена операція читання. Можливість читання перевіряється як для файлу, так і для каталогу.
Синтаксис функції Is_readable():

bool is_readable (string файл)

Швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»), тому для того щоб функція Is_readable() повертала true, читання з файлу повинна бути дозволено всім бажаючим. Наступний приклад показує, як переконатися в те, що файл існує і доступний для читання:

<?php
 if (is_readable ($filename)):
  // Відкрити файл і встановити покажчик поточної позиції у кінець файлу
  $Fh = fopen ($filename, "r");
 else:
  print "$filename is not readable!";
  endif;
?>


Функція Fread()

Функція Fread() читає з файлу, заданого файловим маніпулятором, задану кількість байт. Синтаксис функції Fread() ():

int fread (int маніпулятор, int довжина)

Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції Is_readable()). Читання припиняється після прочитання заданої кількості байт або при досягненні кінця файлу. Розглянемо текстовий файл pastry.txt, наведений у лістингу 1. Читання і вивід цього файлу в браузері здійснюється наступним фрагментом:

<?php
 $Fh = fopen ('pastry.txt', "r") or die ("Can't open file!");
 $File = fread ($fh, filesize ($fh));
 print $file;
 fclose($fh);
?>

Використовуючи функцію FіleSize() для визначення розміру pastry.txt в байтах, ви гарантуєте, що функція Fread() прочитає весь вміст файлу.

Лістинг 1. Текстовий файл pastry.txt

Recipe: Pastry Dough

11 / 4 cups all-purpose flour

3 / 4 stick (6 tablespoons) unsalted butter, chopped

2 tablespoons vegetable shortening 1 / 4 teaspoon salt

3 tablespoons water


Функція Fgetc()

Функція Fgetc() повертає рядок, що містить один символ з файлу у поточній позиції вказівника, або false при досягненні кінця файлу. Синтаксис функції Fgetc():

string fgetc (int маніпулятор)

Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції Is_readable() раніше в цьому розділі). У наступному прикладі продемонстровані посимвольне читання і вивід файлу з використанням функції Fgetc():

<?php
 $Fh = fopen("pastry.txt", "r"); 
 while (!Feof ($fh)):
  $Char = fgetc($fh):
  print $char; 
 endwhile;
 fclose ($fh);
?>

fgets ()

Функція fgets () повертає рядок, прочитану від поточної позиції вказівника у файлі, що визначається файловим маніпулятором. Файловий покажчик повинен посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). Синтаксис функції fgets ():

string fgets (int маніпулятор, int довжина)

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

$ Fh = fopen ("pastry.txt", "r");

while (! feof ($ fh));

$ Line = fgets ($ fh, 4096);

print $ line. "<br>";

endwhile;

fclose ($ fh):


fgetss ()

Функція fgetss () повністю аналогічна fgets () за одним винятком - вона намагається видаляти з прочитаного тексту всі теги HTML і PHP:

string fgetss (Int маніпулятор, int довжина [, string розширення_тегу])

Перш ніж переходити до прикладів, ознайомтеся з вмістом лістингу 2 - цей файл використовується в лістингу 3 та 4.

Лістинг 2. Файл science.html

<html>

<head>

<title> Breaking News - Science </title>

<body>

<h1> Alien lifeform discovered </h1> <br>


<b> August 20. 2000 </b> <br>

Early this morning, a strange new form of fungus was found growing in the closet of WJ Gilmore's old apartment refrigerator.

It is not known if powerful radiation emanating from the tenant's computer monitor aided in this evolution.<br/>
</Body>

</Html>



Лістинг З. Видалення тегів з файлу HTML перед відображенням у браузері

<?

$ Fh = fopen ("science.html", "r");

while (! feof ($ fh)):

print fgetss ($ fh, 2048);

endwhile;

fclose ($ fh);

?>


Результат наведено нижче. Як бачите, з файлу science.html були вилучені всі теги HTML, що призвело до втрати форматування:

Breaking News - Science Alien lifeform discovered August 20. 2000 Early this morning, a strange new form of fungus was found growing in the closet of WJ Gilmore's old apartment refrigerator. It is not known if powerful radiation emanating from the tenant's computer monitor aided in this evolution.

У деяких ситуаціях з файлу видаляються всі теги, крім деяких - наприклад, тегів розриву рядків. Лістинг 4 показує, як це робиться.

Лістинг 4. Вибіркове видалення тегів з файлу HTML

<?

$ Fh = fopenC'science. Html "," r ");

$ Allowable = "<br>";

while (! feof ($ fh)):

print fgetss ($ fh. 2048, $ allowable);

endwhile;

fclose ($ fh);

?>


Результат:

Breaking News - Science Alien lifeform discovered August 20. 2000 Early this morning, a strange new form of fungus was found growing in the closet of WJ Gilmore's old apartment refrigerator. It is not known if powerful radiation emanating from the tenant's computer monitor aided in this evolution.

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



Робота з файлами в PHP