Відмінності між версіями «Робота з файлами в PHP»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показані 2 проміжні версії цього учасника)
Рядок 1: Рядок 1:
 
[[Перевірка існування та розміру файлу]]<br>
 
[[Перевірка існування та розміру файлу]]<br>
 
[[Відкриття та закриття файлів]]<br>
 
[[Відкриття та закриття файлів]]<br>
[[Запис у файл]]<BR>
+
[[Запис у файл]]<br>
<br/>
+
[[Читання з файлу]]<br>
З відкритими файлами виконуються дві основні операції - читання і запис.<br/><br/>
+
[[Читання файлу в масив]]<br>
'''is_writeable ()'''<br/><br/>
+
[[Перенаправлення файлу в стандартний вихідний потік]]<br>
Функція is_writeable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція запису. Можливість запису перевіряється як для файлу, так і для каталогу. Синтаксис функції is_writeable ():<br/>
+
''bool is_writeable (string файл)''<br/>
+
Одна важлива обставина: швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»). Приклад використання is_writeable () наведено в описі функції fwrite ().<br/><br/>
+
'''fwrite ()'''<br/><br/>
+
Функція fwrite () записує вміст строкової змінної в файл, заданий файловим маніпулятором. Синтаксис функції fwrite ():<br/><br/>
+
''int fwrite (int маніпулятор, string мінлива [, int довжина])''<br/><br/>
+
Якщо при виконанні функції передається необов'язковий параметр довжина, запис зупиняється або після запису вказаної кількості символів, або при досягненні кінця рядка. Перевірка можливості запису у файл продемонстрована в наступному прикладі:<br/><br/>
+
<pre>
+
<?
+
// Інформація про трафік на користувальницькому сайті
+
  
$ Data = "08:13:00 | 12:37:12 | 208.247.106.187 | Win98";
 
 
$ Filename = "somefile.txt";
 
 
// Якщо файл існує і в нього можливий запис
 
 
if (is_writeable ($ filename)):
 
 
// Відкрити файл і встановити покажчик поточної позиції у кінець файлу
 
 
$ Fh = fopen ($ filename, "a +");
 
 
// Записати вміст $ data в файл
 
 
$ Success - fwrite ($ fh, $ data);
 
 
// Закрити файл'
 
 
fclose ($ fh); else:
 
 
print "Could not open Sfilename for writing";
 
 
endif;
 
 
?></pre>
 
<br/><br/>
 
Функція fputs () є псевдонімом fwrite () і може використовуватися всюди, де використовується fwrite ().<br/><br/>
 
'''fputs ()'''<br/><br/>
 
Функція fputs () є псевдонімом fwrite () і має точно такий же синтаксис. Синтаксис функції fputs ():<br/><br/>
 
''int fputs (int маніпулятор, string мінлива [, int довжина])''<br/><br/><br/>
 
 
[[Читання з файлу]]
 
<br/>
 
Безсумнівно, читання є найголовнішою операцією, яка виконується з файлами. Нижче описані деякі функції, що підвищують ефективність читання з файлу. Синтаксис цих функцій практично точно копіює синтаксис аналогічних функцій запису.<br/><br/>
 
'''is_readable ()'''<br/><br/>
 
Функція i s_readable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція читання. Можливість читання перевіряється як для файлу, так і для каталогу. Синтаксис функції is_readable ():<br/><br/>
 
''bool is_readable (string файл]''<br/><br/>
 
Швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»), тому для того щоб функція is_readable () повертала TRUE, читання з файлу повинна бути дозволено всім бажаючим. Наступний приклад показує, як переконатися в те, що файл існує і доступний для читання:<br/><br/>
 
<pre>
 
 
if (is_readable ($ filename)):
 
 
// Відкрити файл і встановити покажчик поточної позиції у кінець файлу
 
 
$ Fh = fopen ($ filename, "r");
 
 
else:
 
 
print "$ filename is not readable!";
 
 
endif;
 
</pre><br/><br/>
 
'''fread ()'''<br/><br/>
 
Функція fread () читає з файлу, заданого файловим маніпулятором, задану кількість байт. Синтаксис функції fwrite ():<br/>
 
int fread (int маніпулятор, int довжина)<br/>
 
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable ()). Читання припиняється після прочитання заданої кількості байт або при досягненні кінця файлу. Розглянемо текстовий файл pastry.txt, наведений у лістингу 1. Читання і вивід цього файлу в браузері здійснюється наступним фрагментом:<br/><br/>
 
<pre>
 
$ Fh = fopen ('pastry.txt', "r") or die ("Can't open file!");
 
 
$ File = fread ($ fh, filesize ($ fh));
 
 
print $ file;
 
 
fclose ($ fh);
 
</pre><br/><br/>
 
Використовуючи функцію fіlesize () для визначення розміру pastry.txt в байтах, ви гарантуєте, що функція fread () прочитає весь вміст файлу.<br/><br/>
 
'''Лістинг 1. Текстовий файл pastry.txt'''<br/>
 
<pre>
 
Recipe: Pastry Dough
 
 
1 1 / 4 cups all-purpose flour
 
 
3 / 4 stick (6 tablespoons) unsalted butter, chopped
 
 
2 tablespoons vegetable shortening 1 / 4 teaspoon salt
 
 
3 tablespoons water
 
</pre><br/><br/>
 
'''fgetc ()'''<br/><br/>
 
Функція fgetc () повертає рядок, що містить один символ з файлу у поточній позиції вказівника, або FALSE при досягненні кінця файлу. Синтаксис функції fgetc ():<br/><br/>
 
''string fgetc (int маніпулятор)''<br/><br/>
 
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). У наступному прикладі продемонстровані посимвольне читання і вивід файлу з використанням функції fgetc ():<br/><br/>
 
<pre>
 
$ Fh = fopen ("pastry.txt", "r"); while (! Feof ($ fh)):
 
 
$ Char = fgetc ($ fh):
 
 
print $ char; endwhile;
 
 
fclose ($ fh);
 
</pre><br/><br/>
 
'''fgets ()'''<br/><br/>
 
Функція fgets () повертає рядок, прочитану від поточної позиції вказівника у файлі, що визначається файловим маніпулятором. Файловий покажчик повинен посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). Синтаксис функції fgets ():<br/><br/>
 
''string fgets (int маніпулятор, int довжина)''<br/><br/>
 
Читання припиняється при виконанні однієї з наступних умов:<br/>
 
• з файлу прочитано довжина - 1 байт;<br/>
 
• з файлу прочитаний символ нового рядка (включається в рядок, що повертається);<br/>
 
• з файлу прочитаний ознака кінця файлу (EOF).<br/>
 
Якщо ви хочете організувати Прогресивне читання файлу, передайте в другому параметрі значення, що свідомо перевищує кількість байт в рядку. Приклад прогресивного читання і виведення файлу:<br/><br/>
 
<pre>
 
$ Fh = fopen ("pastry.txt", "r");
 
 
while (! feof ($ fh));
 
 
$ Line = fgets ($ fh, 4096);
 
 
print $ line. "<br>";
 
 
endwhile;
 
 
fclose ($ fh):
 
</pre><br/><br/>
 
'''fgetss ()'''<br/><br/>
 
Функція fgetss () повністю аналогічна fgets () за одним винятком - вона намагається видаляти з прочитаного тексту всі теги HTML і PHP:<br/><br/>
 
''string fgetss (Int маніпулятор, int довжина [, string розширення_тегу])''<br/><br/>
 
Перш ніж переходити до прикладів, ознайомтеся з вмістом лістингу 2 - цей файл використовується в лістингу 3 та 4.<br/><br/>
 
'''Лістинг 2. Файл science.html'''<br/>
 
<pre>
 
<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>
 
 
</pre><br/><br/>
 
'''Лістинг З. Видалення тегів з файлу HTML перед відображенням у браузері'''<br/>
 
<pre>
 
<?
 
 
$ Fh = fopen ("science.html", "r");
 
 
while (! feof ($ fh)):
 
 
print fgetss ($ fh, 2048);
 
 
endwhile;
 
 
fclose ($ fh);
 
 
?>
 
</pre><br/><br/>
 
'''Результат''' наведено нижче. Як бачите, з файлу science.html були вилучені всі теги HTML, що призвело до втрати форматування:<br/><br/>
 
''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.''<br/><br/>
 
У деяких ситуаціях з файлу видаляються всі теги, крім деяких - наприклад, тегів розриву рядків. Лістинг 4 показує, як це робиться.<br/><br/>
 
'''Лістинг 4. Вибіркове видалення тегів з файлу HTML'''<br/>
 
<pre>
 
<?
 
 
$ Fh = fopenC'science. Html "," r ");
 
 
$ Allowable = "<br>";
 
 
while (! feof ($ fh)):
 
 
print fgetss ($ fh. 2048, $ allowable);
 
 
endwhile;
 
 
fclose ($ fh);
 
 
?>
 
</pre><br/><br/>
 
'''Результат:'''<br/><br/>
 
''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.''<br/><br/>
 
Як бачите, функція fgetss () спрощує перетворення файлів, особливо за наявності великої кількості файлів HTML, відформатованих схожим чином.<br/><br/><br/>
 
 
[[Читання файлу в масив]]
 
<br/>
 
Функція file () завантажує весь вміст файлу в індексованих масив. Кожен елемент масиву відповідає одному рядку файлу. Синтаксис функції filе ():<br/><br/>
 
''array file (string файл [, int включення_шляху])''<br/><br/>
 
Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.ini. У лістингу 5 функція file () використовується для завантаження файлу pastry.txt (див. лістинг 1).<br/><br/>
 
'''Лістинг 5. Завантаження файлу pastry.txt функцією file ()'''<br/>
 
<pre>
 
<?
 
 
$ File_array = file ("pastry.txt");
 
 
while (list ($ line_num. $ line) = eacht ($ file_array)):
 
 
print "<b> Line $ line_num: </ b>", htmlspecialchars ($ line), "<br> \ n"
 
 
endwhile;
 
 
?>
 
</pre><br/><br/>
 
Кожен рядок масиву виводиться разом з номером:<br/><br/>
 
<pre>
 
Line 0: Recipe: Pastry Dough
 
 
Line 1: 1 1 / 4 cups all-purpose flour
 
 
Line 2: 3 / 4 stick (6 tablespoons) unsalted butter, chopped
 
 
Line 3: 2 tablespoons vegetable shortening
 
 
Line 4: 1 / 4 teaspoon salt
 
 
Line 5: 3 tablespoons water
 
</pre><br/><br/><br/>
 
 
[[Перенаправлення файлу в стандартний вихідний потік]]
 
<br/>
 
Функція readfile () читає вміст файлу і направляє його в стандартний вивід (у більшості випадків - в браузер). Синтаксис функції '''readfile ():'''<br/><br/>
 
''int readfile (string файл [, int включення_шляху])''<br/><br/>
 
Функція повертає кількість прочитаних байтів. Файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP. Параметр файл задається за тими ж правилами, що і у функції fopen ().<br/>
 
Припустимо, у вас є файл latorre.txt, вміст якого ви хочете вивести в браузері:<br/><br/>
 
''Restaurant "La Тоrrе." located in Nettuno, Italy, offers an eclectic blend of style. history, and fine seafood cuisine.''
 
 
''Within the walls of the medieval borgo surrounding the city, one can dine while watching the passersby shop in the''
 
 
''village boutiques. Comfort coupled with only the freshest seafare make La Torre one of Italy's finest restaurants.''<br/><br/>
 
При виконанні наступного фрагмента весь вміст latorre.txt направляється в стандартний вихідний потік:<br/><br/>
 
<pre>
 
<?
 
$ Restaurant_file = "latorre.txt";
 
// Направити весь файл у стандартний вихідний потік
 
readfile ($ restaurant_filе);
 
?>
 
</pre><br/><br/><br/>
 
 
[[Приклади програм для роботи з файлами]]
 
[[Приклади програм для роботи з файлами]]
  

Поточна версія на 10:40, 13 травня 2010

Перевірка існування та розміру файлу
Відкриття та закриття файлів
Запис у файл
Читання з файлу
Читання файлу в масив
Перенаправлення файлу в стандартний вихідний потік

Приклади програм для роботи з файлами


Інтернет-програмування