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

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 3: Рядок 3:
 
Перш ніж намагатися працювати з файлом, бажано переконатися в тому, що він існує. Для вирішення цього завдання зазвичай використовуються дві функції:<br/>
 
Перш ніж намагатися працювати з файлом, бажано переконатися в тому, що він існує. Для вирішення цього завдання зазвичай використовуються дві функції:<br/>
 
''file_exists () і is_file ()''.<br/><br/>
 
''file_exists () і is_file ()''.<br/><br/>
'''file_exists ().'''<br/>
+
'''file_exists ().'''<br/><br/>
 
Функція filе_ехists () перевіряє, чи існує заданий файл. Якщо файл існує, функція повертає TRUE, в іншому випадку повертається FALSE. Синтаксис функції file_exists ():<br/>
 
Функція filе_ехists () перевіряє, чи існує заданий файл. Якщо файл існує, функція повертає TRUE, в іншому випадку повертається FALSE. Синтаксис функції file_exists ():<br/>
bool file_exists (string файл)<br/>
+
''bool file_exists (string файл)''<br/><br/>
Приклад перевірки існування файлу:<br/>
+
Приклад перевірки існування файлу:<br/><br/>
''if (! file_exists ($ filename)):<br/>
+
<pre>
print "File $ filename does not exist!";<br/>
+
if (! file_exists ($ filename)):
endif:''<br/><br/>
+
'''is_file ()'''<br/>
+
Функція is_file () перевіряє існування заданого файлу і можливість виконання з ним операцій читання / запису. По суті, is_file () являє собою більш надійну версію file_exists (), яка перевіряє не тільки факт існування файлу, але і те, чи підтримує він читання і запис даних:<br/>
+
''bool is_file (string файл)''<br/>
+
Наступний приклад показує, як переконатися в існуванні файлу і можливості виконання операцій з ним:<br/>
+
''$File = "somefile.txt";<br/>
+
if (is_file ($file)):<br/>
+
print "The file $ file is valid and exists!";<br/>
+
else:<br/>
+
print "The file $ file does not exist or it is not a valid file!";<br/>
+
endif:''<br/>
+
Переконавшись у тому, що потрібний файл існує, і з ним можна виконувати різні операції читання / запису, можна переходити до наступного кроку - відкриття файлу.<br/><br/>
+
'''filesize ()'''<br/>
+
Функція filesize () повертає розмір (в байтах) файлу з заданим ім'ям або FALSE в разі помилки. Синтаксис функції filesize ():<br/>
+
''int filesize (string ім'я_файлу)''<br/>
+
Припустимо, ви хочете визначити розмір файлу pastry.txt. Для отримання потрібної інформації можна скористатися функцією filesize ():<br/>
+
''$Fs = filesize ("pastry.txt"); print "Pastry.txt is $Fs bytes.";''<br/>
+
Виводиться наступний результат:<br/>
+
''Pastry.txt is 179 bytes.''<br/>
+
Перш ніж виконувати операції з файлом, необхідно відкрити його і пов'язати з файловим маніпулятором, а після завершення роботи з файлом його слід закрити.<br/><br/>
+
  
 +
print "File $ filename does not exist!";
  
 +
endif:
 +
</pre><br/><br/>
 +
'''is_file ()'''<br/><br/>
 +
Функція is_file () перевіряє існування заданого файлу і можливість виконання з ним операцій читання / запису. По суті, is_file () являє собою більш надійну версію file_exists (), яка перевіряє не тільки факт існування файлу, але і те, чи підтримує він читання і запис даних:<br/><br/>
 +
''bool is_file (string файл)''<br/><br/>
 +
Наступний приклад показує, як переконатися в існуванні файлу і можливості виконання операцій з ним:<br/><br/>
 +
<pre>
 +
$File = "somefile.txt";
  
 +
if (is_file ($file)):
  
 +
print "The file $ file is valid and exists!";
  
 +
else:
  
 +
print "The file $ file does not exist or it is not a valid file!";
  
== '''Відкриття та закриття файлів''' ==
+
endif:</pre><br/><br/>
 +
Переконавшись у тому, що потрібний файл існує, і з ним можна виконувати різні операції читання / запису, можна переходити до наступного кроку - відкриття файлу.<br/><br/>
 +
'''filesize ()'''<br/><br/>
 +
Функція filesize () повертає розмір (в байтах) файлу з заданим ім'ям або FALSE в разі помилки. Синтаксис функції filesize ():<br/><br/>
 +
''int filesize (string ім'я_файлу)''<br/><br/>
 +
Припустимо, ви хочете визначити розмір файлу pastry.txt. Для отримання потрібної інформації можна скористатися функцією filesize ():<br/><br/>
 +
''$Fs = filesize ("pastry.txt"); print "Pastry.txt is $Fs bytes.";''<br/><br/>
 +
Виводиться наступний результат:<br/><br/>
 +
''Pastry.txt is 179 bytes.''<br/><br/>
 +
Перш ніж виконувати операції з файлом, необхідно відкрити його і пов'язати з файловим маніпулятором, а після завершення роботи з файлом його слід закрити.<br/><br/><br/>
  
Перш ніж виконувати операції вводу / виводу з файлом, необхідно відкрити його функцією fopen ().<br/>
+
== '''Відкриття та закриття файлів''' ==
'''fopen ()<br/>'''
+
<br/>
Функція fopen () відкриває файл (якщо він існує) і повертає ціле число - так званий файловий маніпулятор (file handle). Синтаксис функції fopen ():<br/>
+
Перш ніж виконувати операції вводу / виводу з файлом, необхідно відкрити його функцією fopen ().<br/><br/>
''int fopen (string файл, string режим [, int включення_шляху])<br/>''
+
'''fopen ()'''<br/><br/>
 +
Функція fopen () відкриває файл (якщо він існує) і повертає ціле число - так званий файловий маніпулятор (file handle). Синтаксис функції fopen ():<br/><br/>
 +
''int fopen (string файл, string режим [, int включення_шляху])''<br/><br/>
 
Відкриває файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP.<br/>
 
Відкриває файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP.<br/>
 
Параметр файл може здаватися в декількох формах, перерахованих нижче:<br/>
 
Параметр файл може здаватися в декількох формах, перерахованих нижче:<br/>
Рядок 84: Рядок 88:
 
</TR>
 
</TR>
 
</TABLE>
 
</TABLE>
 +
<br/>
  
 +
Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.<br/>
 +
Нижче наведено приклад відкриття файлу функцією fopen (). Виклик die (), який використовується у поєднанні з fopen (), забезпечує вивід повідомлення про помилку в тому випадку, якщо відкрити файл не вдасться:<br/><br/>
 +
<pre>
 +
$File = "userdata.txt"; // Певний файл
  
 +
$Fh = fopen ($ file, "a +") or die ("File ($file) does not exist!");</pre><br/><br/>
 +
Наступний фрагмент відкриває підключення до сайту PHP '''(http://www.php.net):'''<br/>
 +
<pre>
 +
$Site = "http://www.php.net": / / Сервер, доступний через HTTP
  
 
+
$Sh = fopen ($site., "R"); / / Зв'язати маніпулятор з індексного сторінкою Php.net</pre><br/><br/>
Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.<br/>
+
Після завершення роботи файл завжди слід закривати функцією fclose ().<br/>
Нижче наведено приклад відкриття файлу функцією fopen (). Виклик die (), який використовується у поєднанні з fopen (), забезпечує вивід повідомлення про помилку в тому випадку, якщо відкрити файл не вдасться:<br/>
+
'''fclose ()'''<br/><br/>
''$File = "userdata.txt"; / / Певний файл<br/>
+
Функція fclose () закриває файл із заданим маніпулятором. При успішному закриття повертається TRUE, при невдачі - FALSE. Синтаксис функції fclose ():<br/><br/>
$Fh = fopen ($ file, "a +") or die ("File ($file) does not exist!");<br/>''
+
''int fclose (int маніпулятор)''<br/><br/>
Наступний фрагмент відкриває підключення до сайту PHP (http://www.php.net):<br/>
+
Функція fclose () успішно закриває лише ті файли, які були раніше відкриті функціями fopen () або fsockopen (). Приклад закриття файлу:<br/><br/>
''$Site = "http://www.php.net": / / Сервер, доступний через HTTP<br/>
+
$Sh = fopen ($site., "R"); / / Зв'язати маніпулятор з індексного сторінкою Php.net<br/>
+
''Після завершення роботи файл завжди слід закривати функцією fclose ().<br/>
+
'''fclose ()<br/><br/>'''
+
Функція fclose () закриває файл із заданим маніпулятором. При успішному закриття повертається TRUE, при невдачі - FALSE. Синтаксис функції fclose ():<br/>
+
''int fclose (int маніпулятор)<br/>''
+
Функція fclose () успішно закриває лише ті файли, які були раніше відкриті функціями fopen () або fsockopen (). Приклад закриття файлу:<br/>
+
 
<pre>
 
<pre>
 
$File = "userdata.txt";
 
$File = "userdata.txt";
Рядок 121: Рядок 127:
  
 
== '''Запис у файл''' ==
 
== '''Запис у файл''' ==
 
+
<br/>
З відкритими файлами виконуються дві основні операції - читання і запис.<br/>
+
З відкритими файлами виконуються дві основні операції - читання і запис.<br/><br/>
'''is_writeable ()'''<br/>
+
'''is_writeable ()'''<br/><br/>
 
Функція is_writeable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція запису. Можливість запису перевіряється як для файлу, так і для каталогу. Синтаксис функції is_writeable ():<br/>
 
Функція is_writeable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція запису. Можливість запису перевіряється як для файлу, так і для каталогу. Синтаксис функції is_writeable ():<br/>
 
''bool is_writeable (string файл)''<br/>
 
''bool is_writeable (string файл)''<br/>
Одна важлива обставина: швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»). Приклад використання is_writeable () наведено в описі функції fwrite ().<br/>
+
Одна важлива обставина: швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»). Приклад використання is_writeable () наведено в описі функції fwrite ().<br/><br/>
'''fwrite ()'''<br/>
+
'''fwrite ()'''<br/><br/>
Функція fwrite () записує вміст строкової змінної в файл, заданий файловим маніпулятором. Синтаксис функції fwrite ():<br/>
+
Функція fwrite () записує вміст строкової змінної в файл, заданий файловим маніпулятором. Синтаксис функції fwrite ():<br/><br/>
''int fwrite (int маніпулятор, string мінлива [, int довжина])''<br/>
+
''int fwrite (int маніпулятор, string мінлива [, int довжина])''<br/><br/>
Якщо при виконанні функції передається необов'язковий параметр довжина, запис зупиняється або після запису вказаної кількості символів, або при досягненні кінця рядка. Перевірка можливості запису у файл продемонстрована в наступному прикладі:<br/>
+
Якщо при виконанні функції передається необов'язковий параметр довжина, запис зупиняється або після запису вказаної кількості символів, або при досягненні кінця рядка. Перевірка можливості запису у файл продемонстрована в наступному прикладі:<br/><br/>
 
<pre>
 
<pre>
 
<?
 
<?
Рядок 160: Рядок 166:
  
 
?></pre>
 
?></pre>
<br/>
+
<br/><br/>
Функція fputs () є псевдонімом fwrite () і може використовуватися всюди, де використовується fwrite ().<br/>
+
Функція fputs () є псевдонімом fwrite () і може використовуватися всюди, де використовується fwrite ().<br/><br/>
'''fputs ()'''<br/>
+
'''fputs ()'''<br/><br/>
Функція fputs () є псевдонімом fwrite () і має точно такий же синтаксис. Синтаксис функції fputs ():<br/>
+
Функція fputs () є псевдонімом fwrite () і має точно такий же синтаксис. Синтаксис функції fputs ():<br/><br/>
''int fputs (int маніпулятор, string мінлива [, int довжина])''<br/><br/>
+
''int fputs (int маніпулятор, string мінлива [, int довжина])''<br/><br/><br/>
 
+
 
+
  
 
== '''Читання з файлу''' ==
 
== '''Читання з файлу''' ==
 
<br/>
 
<br/>
Безсумнівно, читання є найголовнішою операцією, яка виконується з файлами. Нижче описані деякі функції, що підвищують ефективність читання з файлу. Синтаксис цих функцій практично точно копіює синтаксис аналогічних функцій запису.<br/>
+
Безсумнівно, читання є найголовнішою операцією, яка виконується з файлами. Нижче описані деякі функції, що підвищують ефективність читання з файлу. Синтаксис цих функцій практично точно копіює синтаксис аналогічних функцій запису.<br/><br/>
'''is_readable ()'''<br/>
+
'''is_readable ()'''<br/><br/>
Функція i s_readable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція читання. Можливість читання перевіряється як для файлу, так і для каталогу. Синтаксис функції is_readable ():<br/>
+
Функція i s_readable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція читання. Можливість читання перевіряється як для файлу, так і для каталогу. Синтаксис функції is_readable ():<br/><br/>
''bool is_readable (string файл]''<br/>
+
''bool is_readable (string файл]''<br/><br/>
Швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»), тому для того щоб функція is_readable () повертала TRUE, читання з файлу повинна бути дозволено всім бажаючим. Наступний приклад показує, як переконатися в те, що файл існує і доступний для читання:<br/>
+
Швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»), тому для того щоб функція is_readable () повертала TRUE, читання з файлу повинна бути дозволено всім бажаючим. Наступний приклад показує, як переконатися в те, що файл існує і доступний для читання:<br/><br/>
 
<pre>
 
<pre>
 +
 
if (is_readable ($ filename)):
 
if (is_readable ($ filename)):
 +
 
// Відкрити файл і встановити покажчик поточної позиції у кінець файлу
 
// Відкрити файл і встановити покажчик поточної позиції у кінець файлу
 +
 
$ Fh = fopen ($ filename, "r");
 
$ Fh = fopen ($ filename, "r");
 +
 
else:
 
else:
 +
 
print "$ filename is not readable!";
 
print "$ filename is not readable!";
 +
 
endif;
 
endif;
</pre>
+
</pre><br/><br/>
<br/>
+
'''fread ()'''<br/><br/>
'''fread ()'''<br/>
+
 
Функція fread () читає з файлу, заданого файловим маніпулятором, задану кількість байт. Синтаксис функції fwrite ():<br/>
 
Функція fread () читає з файлу, заданого файловим маніпулятором, задану кількість байт. Синтаксис функції fwrite ():<br/>
 
int fread (int маніпулятор, int довжина)<br/>
 
int fread (int маніпулятор, int довжина)<br/>
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable ()). Читання припиняється після прочитання заданої кількості байт або при досягненні кінця файлу. Розглянемо текстовий файл pastry.txt, наведений у лістингу 1. Читання і вивід цього файлу в браузері здійснюється наступним фрагментом:<br/>
+
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable ()). Читання припиняється після прочитання заданої кількості байт або при досягненні кінця файлу. Розглянемо текстовий файл pastry.txt, наведений у лістингу 1. Читання і вивід цього файлу в браузері здійснюється наступним фрагментом:<br/><br/>
 
<pre>
 
<pre>
 
$ Fh = fopen ('pastry.txt', "r") or die ("Can't open file!");
 
$ Fh = fopen ('pastry.txt', "r") or die ("Can't open file!");
Рядок 196: Рядок 205:
  
 
fclose ($ fh);
 
fclose ($ fh);
</pre><br/>
+
</pre><br/><br/>
Використовуючи функцію fіlesize () для визначення розміру pastry.txt в байтах, ви гарантуєте, що функція fread () прочитає весь вміст файлу.<br/>
+
Використовуючи функцію fіlesize () для визначення розміру pastry.txt в байтах, ви гарантуєте, що функція fread () прочитає весь вміст файлу.<br/><br/>
 
'''Лістинг 1. Текстовий файл pastry.txt'''<br/>
 
'''Лістинг 1. Текстовий файл pastry.txt'''<br/>
 
<pre>
 
<pre>
Рядок 209: Рядок 218:
  
 
3 tablespoons water
 
3 tablespoons water
</pre>
+
</pre><br/><br/>
<br/>
+
'''fgetc ()'''<br/><br/>
'''fgetc ()'''<br/>
+
Функція fgetc () повертає рядок, що містить один символ з файлу у поточній позиції вказівника, або FALSE при досягненні кінця файлу. Синтаксис функції fgetc ():<br/><br/>
Функція fgetc () повертає рядок, що містить один символ з файлу у поточній позиції вказівника, або FALSE при досягненні кінця файлу. Синтаксис функції fgetc ():<br/>
+
''string fgetc (int маніпулятор)''<br/><br/>
''string fgetc (int маніпулятор)''<br/>
+
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). У наступному прикладі продемонстровані посимвольне читання і вивід файлу з використанням функції fgetc ():<br/><br/>
Маніпулятор має посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). У наступному прикладі продемонстровані посимвольне читання і вивід файлу з використанням функції fgetc ():<br/>
+
 
<pre>
 
<pre>
 
$ Fh = fopen ("pastry.txt", "r"); while (! Feof ($ fh)):
 
$ Fh = fopen ("pastry.txt", "r"); while (! Feof ($ fh)):
Рядок 223: Рядок 231:
  
 
fclose ($ fh);
 
fclose ($ fh);
</pre><br/>
+
</pre><br/><br/>
'''fgets ()'''<br/>
+
'''fgets ()'''<br/><br/>
Функція fgets () повертає рядок, прочитану від поточної позиції вказівника у файлі, що визначається файловим маніпулятором. Файловий покажчик повинен посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). Синтаксис функції fgets ():<br/>
+
Функція fgets () повертає рядок, прочитану від поточної позиції вказівника у файлі, що визначається файловим маніпулятором. Файловий покажчик повинен посилатися на відкритий файл, доступний для читання (див. опис функції is_readable () раніше в цьому розділі). Синтаксис функції fgets ():<br/><br/>
''string fgets (int маніпулятор, int довжина)''<br/>
+
''string fgets (int маніпулятор, int довжина)''<br/><br/>
 
Читання припиняється при виконанні однієї з наступних умов:<br/>
 
Читання припиняється при виконанні однієї з наступних умов:<br/>
 
• з файлу прочитано довжина - 1 байт;<br/>
 
• з файлу прочитано довжина - 1 байт;<br/>
 
• з файлу прочитаний символ нового рядка (включається в рядок, що повертається);<br/>
 
• з файлу прочитаний символ нового рядка (включається в рядок, що повертається);<br/>
 
• з файлу прочитаний ознака кінця файлу (EOF).<br/>
 
• з файлу прочитаний ознака кінця файлу (EOF).<br/>
Якщо ви хочете організувати Прогресивне читання файлу, передайте в другому параметрі значення, що свідомо перевищує кількість байт в рядку. Приклад прогресивного читання і виведення файлу:<br/>
+
Якщо ви хочете організувати Прогресивне читання файлу, передайте в другому параметрі значення, що свідомо перевищує кількість байт в рядку. Приклад прогресивного читання і виведення файлу:<br/><br/>
 
<pre>
 
<pre>
 
$ Fh = fopen ("pastry.txt", "r");
 
$ Fh = fopen ("pastry.txt", "r");
Рядок 244: Рядок 252:
  
 
fclose ($ fh):
 
fclose ($ fh):
</pre>
+
</pre><br/><br/>
<br/>
+
'''fgetss ()'''<br/><br/>
'''fgetss ()'''<br/>
+
Функція fgetss () повністю аналогічна fgets () за одним винятком - вона намагається видаляти з прочитаного тексту всі теги HTML і PHP:<br/><br/>
Функція fgetss () повністю аналогічна fgets () за одним винятком - вона намагається видаляти з прочитаного тексту всі теги HTML і PHP:<br/>
+
''string fgetss (Int маніпулятор, int довжина [, string розширення_тегу])''<br/><br/>
string fgetss (Int маніпулятор, int довжина [, string розширення_тегуі])<br/>
+
Перш ніж переходити до прикладів, ознайомтеся з вмістом лістингу 2 - цей файл використовується в лістингу 3 та 4.<br/><br/>
Перш ніж переходити до прикладів, ознайомтеся з вмістом лістингу 2 - цей файл використовується в лістингу 3 та 4.<br/>
+
 
'''Лістинг 2. Файл science.html'''<br/>
 
'''Лістинг 2. Файл science.html'''<br/>
 
<pre>
 
<pre>
Рядок 272: Рядок 279:
 
</Html>
 
</Html>
  
</pre>
+
</pre><br/><br/>
 
'''Лістинг З. Видалення тегів з файлу HTML перед відображенням у браузері'''<br/>
 
'''Лістинг З. Видалення тегів з файлу HTML перед відображенням у браузері'''<br/>
 
<pre>
 
<pre>
Рядок 288: Рядок 295:
  
 
?>
 
?>
</pre><br/>
+
</pre><br/><br/>
 
'''Результат''' наведено нижче. Як бачите, з файлу science.html були вилучені всі теги HTML, що призвело до втрати форматування:<br/>
 
'''Результат''' наведено нижче. Як бачите, з файлу science.html були вилучені всі теги HTML, що призвело до втрати форматування:<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/>
+
''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/>
+
У деяких ситуаціях з файлу видаляються всі теги, крім деяких - наприклад, тегів розриву рядків. Лістинг 4 показує, як це робиться.<br/><br/>
 
'''Лістинг 4. Вибіркове видалення тегів з файлу HTML'''<br/>
 
'''Лістинг 4. Вибіркове видалення тегів з файлу HTML'''<br/>
 
<pre>
 
<pre>
Рядок 309: Рядок 316:
  
 
?>
 
?>
</pre><br/>
+
</pre><br/><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/>
 
''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/>
+
Як бачите, функція fgetss () спрощує перетворення файлів, особливо за наявності великої кількості файлів HTML, відформатованих схожим чином.<br/><br/><br/>
 
+
 
+
  
 
== '''Читання файлу в масив''' ==
 
== '''Читання файлу в масив''' ==
 
<br/>
 
<br/>
Функція file () завантажує весь вміст файлу в індексованих масив. Кожен елемент масиву відповідає одному рядку файлу. Синтаксис функції filе ():<br/>
+
Функція file () завантажує весь вміст файлу в індексованих масив. Кожен елемент масиву відповідає одному рядку файлу. Синтаксис функції filе ():<br/><br/>
''array file (string файл [, int включення_шляху])''<br/>
+
''array file (string файл [, int включення_шляху])''<br/><br/>
Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.ini. У лістингу 5 функція file () використовується для завантаження файлу pastry.txt (див. лістинг 1).<br/>
+
Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.ini. У лістингу 5 функція file () використовується для завантаження файлу pastry.txt (див. лістинг 1).<br/><br/>
 
'''Лістинг 5. Завантаження файлу pastry.txt функцією file ()'''<br/>
 
'''Лістинг 5. Завантаження файлу pastry.txt функцією file ()'''<br/>
 
<pre>
 
<pre>
Рядок 334: Рядок 339:
  
 
?>
 
?>
</pre>
+
</pre><br/><br/>
 
Кожен рядок масиву виводиться разом з номером:<br/>
 
Кожен рядок масиву виводиться разом з номером:<br/>
 
<pre>
 
<pre>
Рядок 348: Рядок 353:
  
 
Line 5: 3 tablespoons water
 
Line 5: 3 tablespoons water
</pre><br/><br/>
+
</pre><br/><br/><br/>
 
+
 
+
  
 
== '''Перенаправлення файлу в стандартний вихідний потік''' ==
 
== '''Перенаправлення файлу в стандартний вихідний потік''' ==
 
<br/>
 
<br/>
Функція readfile () читає вміст файлу і направляє його в стандартний вивід (у більшості випадків - в браузер). Синтаксис функції '''readfile ():'''<br/>
+
Функція readfile () читає вміст файлу і направляє його в стандартний вивід (у більшості випадків - в браузер). Синтаксис функції '''readfile ():'''<br/><br/>
''int readfile (string файл [, int включення_шляху])''<br/>
+
''int readfile (string файл [, int включення_шляху])''<br/><br/>
 
Функція повертає кількість прочитаних байтів. Файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP. Параметр файл задається за тими ж правилами, що і у функції fopen ().<br/>
 
Функція повертає кількість прочитаних байтів. Файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP. Параметр файл задається за тими ж правилами, що і у функції fopen ().<br/>
Припустимо, у вас є файл latorre.txt, вміст якого ви хочете вивести в браузері:<br/>
+
Припустимо, у вас є файл latorre.txt, вміст якого ви хочете вивести в браузері:<br/><br/>
 
''Restaurant "La Тоrrе." located in Nettuno, Italy, offers an eclectic blend of style. history, and fine seafood cuisine.''
 
''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''
 
''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/>
+
''village boutiques. Comfort coupled with only the freshest seafare make La Torre one of Italy's finest restaurants.''<br/><br/>
При виконанні наступного фрагмента весь вміст latorre.txt направляється в стандартний вихідний потік:<br/>
+
При виконанні наступного фрагмента весь вміст latorre.txt направляється в стандартний вихідний потік:<br/><br/>
 
<pre>
 
<pre>
 
<?
 
<?
 
$ Restaurant_file = "latorre.txt";
 
$ Restaurant_file = "latorre.txt";
/ / Направити весь файл у стандартний вихідний потік
+
// Направити весь файл у стандартний вихідний потік
 
readfile ($ restaurant_filе);
 
readfile ($ restaurant_filе);
</pre><br/><br/>
+
</pre><br/><br/><br/>
  
 
== '''Відкриття файлового маніпулятора процесу''' ==
 
== '''Відкриття файлового маніпулятора процесу''' ==
 
<br/>
 
<br/>
'''popen ()'''<br/>
+
'''popen ()'''<br/><br/>
Поряд зі звичайними файлами можна відкривати файлові маніпулятори для взаємодії з процесами на сервері. Завдання вирішується функцією рореn (), яка має наступний синтаксис:<br/>
+
Поряд зі звичайними файлами можна відкривати файлові маніпулятори для взаємодії з процесами на сервері. Завдання вирішується функцією рореn (), яка має наступний синтаксис:<br/><br/>
''int popen (string команда, string режим)''<br/>
+
''int popen (string команда, string режим)''<br/><br/>
Параметр команда визначає виконувану системну команду, а параметр режим описує режим доступу:<br/>
+
Параметр команда визначає виконувану системну команду, а параметр режим описує режим доступу:<br/><br/>
 
<pre>
 
<pre>
 
<?
 
<?
  
/ / Відкрити файл "spices.txt" для запису
+
// Відкрити файл "spices.txt" для запису
  
 
$ Fh = fopen ("spices.txt", "w");
 
$ Fh = fopen ("spices.txt", "w");
  
/ / Додати кілька рядків тексту
+
// Додати кілька рядків тексту
  
 
fputs ($ fh, "Parsley, sage, rosemary \ n");
 
fputs ($ fh, "Parsley, sage, rosemary \ n");
Рядок 392: Рядок 395:
 
fputs ($ fh, "Basil, sage, ginger \ n");
 
fputs ($ fh, "Basil, sage, ginger \ n");
  
/ / Закрити маніпулятор
+
// Закрити маніпулятор
  
 
fclose ($ fh);
 
fclose ($ fh);
Рядок 400: Рядок 403:
 
$ Fh - popen ("grep Basil <spices.txt", "r");
 
$ Fh - popen ("grep Basil <spices.txt", "r");
  
/ / Вивести результат роботи grep
+
// Вивести результат роботи grep
  
 
fpassthru ($ fh);
 
fpassthru ($ fh);
  
 
?>
 
?>
</pre><br/>
+
</pre><br/><br/>
Результат виглядає так:<br/>
+
Результат виглядає так:<br/><br/>
''Basil, sage, ginger''<br/>
+
''Basil, sage, ginger''<br/><br/>
Функція fpassthru () є аналогом функції passthru (), що розглядається у розділі «Запуск зовнішніх програм.<br/>
+
Функція fpassthru () є аналогом функції passthru (), що розглядається у розділі «Запуск зовнішніх програм.<br/><br/>
'''pclose ()'''<br/>
+
'''pclose ()'''<br/><br/>
Після виконання всіх операцій файл або процес необхідно закрити. Функція pclose () закриває з'єднання з процесом, заданим маніпулятором, за аналогією з тим, як функція fclose () закриває файл, відкритий функцією fopen (). Синтаксис функції pclose ():<br/>
+
Після виконання всіх операцій файл або процес необхідно закрити. Функція pclose () закриває з'єднання з процесом, заданим маніпулятором, за аналогією з тим, як функція fclose () закриває файл, відкритий функцією fopen (). Синтаксис функції pclose ():<br/><br/>
''int pclose (int маніпулятор)''<br/>
+
''int pclose (int маніпулятор)''<br/><br/>
 
У параметрі ''маніпулятор'' передається маніпулятор, отриманий раніше при успішному виклик рореn ().<br/>
 
У параметрі ''маніпулятор'' передається маніпулятор, отриманий раніше при успішному виклик рореn ().<br/>
  
  
 +
== '''Відкриття з'єднання через соkет''' ==
 +
<br/>
 +
PHP не обмежується взаємодією з файлами і процесами - ви також можете встановлювати з'єднання через сокети. Сокет (socket) являє собою програмну абстракцію, що дозволяє встановлювати зв'язок з різними службами іншого комп'ютера.<br/><br/>
 +
'''fsockopen ()'''<br/><br/>
 +
Функція fsockopen () встановлює сокет з'єднання з сервером в Інтернеті через протокол TCP або UDP. Синтаксис функції fsockopen ():<br/>
 +
''int fsockopen (string вузол, int порт [, int код_помилки [, string текст_ помилки [, int тайм-аут]]])''<br/>
 +
Необов'язкові параметри код_помилки і текст_помилки містять інформацію, яка буде виводитися у разі невдачі при підключенні до сервера. Обидва параметра повинні передаватися по посиланню. Третій необов'язковий параметр, тайм-аут, задає тривалість очікування відповіді від сервера (в секундах). У лістингу 6 продемонстровано застосування функції fsockopen () для отримання інформації про сервер. Однак перед розглядом лістингу 6 необхідно познайомитися ще з однією функцією - socket_set_blocking ().<br/>
 +
UDP (User Datagram Protocol) - комунікаційний протокол, не орієнтована на з'єднання.<br/><br/>
 +
''socket_set_blocking ()''<br/><br/>
 +
Функція socket_set_b1ocki ng () дозволяє встановити контроль над тайм-аутом для операцій з сервером:<br/>
 +
socket_set_blocking (int маніпулятор, boolean режим)<br/>
 +
Параметр маніпулятор задає відкритий раніше сокет, а параметр режим вибирає режим, в котрий перемикається сокет (TRUE для блокуючого режиму, FALSE для неблокуючого режиму). Приклад використання функції fsockopen( ) та socket_set_blocking( ) наведено в лістингу 6.<br/><br/>
 +
'''Лістинг 6. Використання функції fsockopen() для отримання інформації про сервер'''<br/>
 +
<pre>
 +
<?
 +
 +
function getthehost($host.$path) {
 +
 +
// відкрити підключення до вузла
 +
 +
$fp - fsockopen($host, 80, &$errno, &$errstr, 30);
 +
 +
// Перейти до блокуючого режиму
 +
 +
socket_set_blocking($fp, 1),
 +
 +
// Відправити заголовки
 +
 +
fputs($fp,"GET $path HTTP/1.1\r\n");
 +
 +
fputs ($fp, "Host: $host\r\n\r\n"); $x = 1;
 +
 +
// Отримати заголовки
 +
 +
while($x < 10) :
 +
 +
$headers = fgets ($fp, 4096);
 +
 +
print $headers;
 +
 +
$x++;
 +
 +
endwhile;
 +
 +
// Закрити маніпулятор
 +
 +
fclose($fp);
 +
 +
)
 +
 +
getthehost("www. apress.com", "/");
 +
 +
?>
 +
</pre><br/><br/>
 +
В результаті виконання лістингу 6 виводиться наступний результат:<br/>
 +
<pre>
 +
НТТР/1.1 200 OK Server: Microsoft-IIS/4.0 Content-location:
 +
http://www.apress.com/0efault.htm Date: Sat. 19 Aug 2000 23:03:25 GMT
 +
Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed. 19 Jul
 +
2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Content-Length: 1311
 +
</pre><br/><br/>
 +
pfsockopen( )<br/><br/>
 +
Функція pfsockopen( ) представляє собою стійку (persistent) версію fsockopen( ). Це означає, що з’єднання не буде автоматично розірвано по закінченню сценарію в якому була викликана функція. Синтаксис функції pfsockopen( ):<br/>
 +
''int pfsockopen (string вузол, int порт [, int код_помилкии [, string текст _помилки [, int тайм-аут]]])''<br/><br/>
 +
В залежності від конкретних цілей вашого додатку може стати зручнішим використання pfsockopen( ) замість fsockopen( ).<br/>
 +
<br/><br/>
  
  

Версія за 08:07, 23 квітня 2010

Перевірка існування та розміру файлу

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

file_exists ().

Функція filе_ехists () перевіряє, чи існує заданий файл. Якщо файл існує, функція повертає TRUE, в іншому випадку повертається FALSE. Синтаксис функції file_exists ():
bool file_exists (string файл)

Приклад перевірки існування файлу:

if (! file_exists ($ filename)):

print "File $ filename does not exist!";

endif:


is_file ()

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

bool is_file (string файл)

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

$File = "somefile.txt";

if (is_file ($file)):

print "The file $ file is valid and exists!";

else:

print "The file $ file does not exist or it is not a valid file!";

endif:


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

filesize ()

Функція filesize () повертає розмір (в байтах) файлу з заданим ім'ям або FALSE в разі помилки. Синтаксис функції filesize ():

int filesize (string ім'я_файлу)

Припустимо, ви хочете визначити розмір файлу pastry.txt. Для отримання потрібної інформації можна скористатися функцією filesize ():

$Fs = filesize ("pastry.txt"); print "Pastry.txt is $Fs bytes.";

Виводиться наступний результат:

Pastry.txt is 179 bytes.

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


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


Перш ніж виконувати операції вводу / виводу з файлом, необхідно відкрити його функцією fopen ().

fopen ()

Функція fopen () відкриває файл (якщо він існує) і повертає ціле число - так званий файловий маніпулятор (file handle). Синтаксис функції fopen ():

int fopen (string файл, string режим [, int включення_шляху])

Відкриває файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP.
Параметр файл може здаватися в декількох формах, перерахованих нижче:
• Якщо параметр містить ім'я локального файлу, функція fopen () відкриває цей файл і повертає маніпулятор.
• Якщо параметр заданий у вигляді php: / / stdin, php: / / stdout або php: / / stderr, відкривається відповідний стандартний потік вводу / виводу.
• Якщо параметр починається з префікса http://, функція відкриває підключення HTTP до сервера і повертає маніпулятор для зазначеного файлу.
• Якщо параметр починається з префікса ftp://, функція відкриває підключення FTP до сервера і повертає маніпулятор для зазначеного файлу. У цьому випадку слід звернути особливу увагу на дві обставини: якщо сервер не підтримує пасивний режим FTP, виклик fopen () завершується невдачею. Більш того, FTP-файли відкриваються або для читання, або для запису.
При роботі в пасивному режимі сервер &!!&!!&!!&&&!!&&&&&&&ЯР&&&&&!!&&&!!&!!&!!&& очікує підключення з боку клієнтів. При роботі в активному режимі сервер сам встановлює з'єднання з клієнтом. За замовчуванням звичайно використовується активний режим.
Параметр режим визначає можливість виконання читання і запису у файл. У табл. 1 перераховані деякі значення, що визначають режим відкриття файлу.


Таблиця 1. Режими відкриття файлу
Режим Опис
r Файл відкривається тільки для читання. Якщо файлу не існує, виклик реєструє помилку. Після успішного відкриття вказівник файлу встановлюється на його перший байт, тобто на початок.
r + Файл відкривається одночасно для читання та запису. Вказівник поточної позиції встановлюється в початок файлу, тобто на перший байт. Якщо файлу не існує повертається false. Якщо в момент запису вказівник файлу встановлено приміром в середину файлу, то дані запишуться прямо поверх існуючих, а не розсунуть їх, при необхідності збільшивши розмір файлу.
w Тільки запис. Покажчик поточної позиції встановлюється в початок файлу, а весь вміст файлу знищується. Якщо файл не існує, функція намагається створити його.
w + Читання і запис. Покажчик поточної позиції встановлюється в початок файлу, а весь вміст файлу знищується. Якщо файл не існує, функція намагається створити його.
a Відкриває існуючий файл тільки для запису. Покажчик поточної позиції встановлюється в кінець файлу. Якщо файл не існує, функція намагається створити його.
a + Відкриває файл для читання та запису. Покажчик поточної позиції встановлюється в кінець файлу, при цьому вміст файлу не знищується. Якщо файл не існує, функція створює його. Ця функція є корисною, якщо потрібно дописати в файл, але не відомо, чи існує файл.


Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.
Нижче наведено приклад відкриття файлу функцією fopen (). Виклик die (), який використовується у поєднанні з fopen (), забезпечує вивід повідомлення про помилку в тому випадку, якщо відкрити файл не вдасться:

$File = "userdata.txt"; // Певний файл

$Fh = fopen ($ file, "a +") or die ("File ($file) does not exist!");


Наступний фрагмент відкриває підключення до сайту PHP (http://www.php.net):

$Site = "http://www.php.net": / / Сервер, доступний через HTTP

$Sh = fopen ($site., "R"); / / Зв'язати маніпулятор з індексного сторінкою Php.net


Після завершення роботи файл завжди слід закривати функцією fclose ().
fclose ()

Функція fclose () закриває файл із заданим маніпулятором. При успішному закриття повертається TRUE, при невдачі - FALSE. Синтаксис функції fclose ():

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

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

$File = "userdata.txt";

if (file_exists ($file)):

$Fh = fopen ($file, "r");

// Виконати операції з файлом

fclose ($fh);

else:

print "File Sfile does not exist!";

endif;



Запис у файл


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

is_writeable ()

Функція is_writeable () дозволяє переконатися в тому, що файл існує і для нього дозволена операція запису. Можливість запису перевіряється як для файлу, так і для каталогу. Синтаксис функції is_writeable ():
bool is_writeable (string файл)
Одна важлива обставина: швидше за все, PHP буде працювати під ідентифікатором користувача, використовуваним web-сервером (як правило, «nobody»). Приклад використання is_writeable () наведено в описі функції fwrite ().

fwrite ()

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

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

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

<?
// Інформація про трафік на користувальницькому сайті

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

?>



Функція fputs () є псевдонімом fwrite () і може використовуватися всюди, де використовується fwrite ().

fputs ()

Функція fputs () є псевдонімом fwrite () і має точно такий же синтаксис. Синтаксис функції fputs ():

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


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


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

is_readable ()

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

bool is_readable (string файл]

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


if (is_readable ($ filename)):

// Відкрити файл і встановити покажчик поточної позиції у кінець файлу

$ Fh = fopen ($ filename, "r");

else:

print "$ filename is not readable!";

endif;


fread ()

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

$ 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

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


fgetc ()

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

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

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

$ 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, відформатованих схожим чином.


Читання файлу в масив


Функція file () завантажує весь вміст файлу в індексованих масив. Кожен елемент масиву відповідає одному рядку файлу. Синтаксис функції filе ():

array file (string файл [, int включення_шляху])

Якщо необов'язковий третій параметр включення_шляху дорівнює 1, то шлях до файлу визначається по відношенню до каталогу включення файл, вказаною у файлі php.ini. У лістингу 5 функція file () використовується для завантаження файлу pastry.txt (див. лістинг 1).

Лістинг 5. Завантаження файлу pastry.txt функцією file ()

<?

$ File_array = file ("pastry.txt");

while (list ($ line_num. $ line) = eacht ($ file_array)):

print "<b> Line $ line_num: </ b>", htmlspecialchars ($ line), "<br> \ n"

endwhile;

?>


Кожен рядок масиву виводиться разом з номером:

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



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


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

int readfile (string файл [, int включення_шляху])

Функція повертає кількість прочитаних байтів. Файл може знаходитися в локальній файловій системі, існувати у вигляді стандартного потоку вводу / виводу або представляти файл у віддаленій системі, що приймається засобами HTTP або FTP. Параметр файл задається за тими ж правилами, що і у функції fopen ().
Припустимо, у вас є файл latorre.txt, вміст якого ви хочете вивести в браузері:

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.

При виконанні наступного фрагмента весь вміст latorre.txt направляється в стандартний вихідний потік:

<?
$ Restaurant_file = "latorre.txt";
// Направити весь файл у стандартний вихідний потік
readfile ($ restaurant_filе);



Відкриття файлового маніпулятора процесу


popen ()

Поряд зі звичайними файлами можна відкривати файлові маніпулятори для взаємодії з процесами на сервері. Завдання вирішується функцією рореn (), яка має наступний синтаксис:

int popen (string команда, string режим)

Параметр команда визначає виконувану системну команду, а параметр режим описує режим доступу:

<?

// Відкрити файл "spices.txt" для запису

$ Fh = fopen ("spices.txt", "w");

// Додати кілька рядків тексту

fputs ($ fh, "Parsley, sage, rosemary \ n");

fputs ($ fh, "Paprika, salt, pepper \ n");

fputs ($ fh, "Basil, sage, ginger \ n");

// Закрити маніпулятор

fclose ($ fh);

/ / Відкрити процес UNIX grep для пошуку слова Basil у файлі spices.txt

$ Fh - popen ("grep Basil <spices.txt", "r");

// Вивести результат роботи grep

fpassthru ($ fh);

?>


Результат виглядає так:

Basil, sage, ginger

Функція fpassthru () є аналогом функції passthru (), що розглядається у розділі «Запуск зовнішніх програм.

pclose ()

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

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

У параметрі маніпулятор передається маніпулятор, отриманий раніше при успішному виклик рореn ().


Відкриття з'єднання через соkет


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

fsockopen ()

Функція fsockopen () встановлює сокет з'єднання з сервером в Інтернеті через протокол TCP або UDP. Синтаксис функції fsockopen ():
int fsockopen (string вузол, int порт [, int код_помилки [, string текст_ помилки [, int тайм-аут]]])
Необов'язкові параметри код_помилки і текст_помилки містять інформацію, яка буде виводитися у разі невдачі при підключенні до сервера. Обидва параметра повинні передаватися по посиланню. Третій необов'язковий параметр, тайм-аут, задає тривалість очікування відповіді від сервера (в секундах). У лістингу 6 продемонстровано застосування функції fsockopen () для отримання інформації про сервер. Однак перед розглядом лістингу 6 необхідно познайомитися ще з однією функцією - socket_set_blocking ().
UDP (User Datagram Protocol) - комунікаційний протокол, не орієнтована на з'єднання.

socket_set_blocking ()

Функція socket_set_b1ocki ng () дозволяє встановити контроль над тайм-аутом для операцій з сервером:
socket_set_blocking (int маніпулятор, boolean режим)
Параметр маніпулятор задає відкритий раніше сокет, а параметр режим вибирає режим, в котрий перемикається сокет (TRUE для блокуючого режиму, FALSE для неблокуючого режиму). Приклад використання функції fsockopen( ) та socket_set_blocking( ) наведено в лістингу 6.

Лістинг 6. Використання функції fsockopen() для отримання інформації про сервер

<?

function getthehost($host.$path) {

// відкрити підключення до вузла

$fp - fsockopen($host, 80, &$errno, &$errstr, 30);

// Перейти до блокуючого режиму

socket_set_blocking($fp, 1),

// Відправити заголовки

fputs($fp,"GET $path HTTP/1.1\r\n");

fputs ($fp, "Host: $host\r\n\r\n"); $x = 1;

// Отримати заголовки

while($x < 10) :

$headers = fgets ($fp, 4096);

print $headers;

$x++;

endwhile;

// Закрити маніпулятор

fclose($fp);

)

getthehost("www. apress.com", "/");

?>


В результаті виконання лістингу 6 виводиться наступний результат:

НТТР/1.1 200 OK Server: Microsoft-IIS/4.0 Content-location:
http://www.apress.com/0efault.htm Date: Sat. 19 Aug 2000 23:03:25 GMT
Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed. 19 Jul
2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Content-Length: 1311


pfsockopen( )

Функція pfsockopen( ) представляє собою стійку (persistent) версію fsockopen( ). Це означає, що з’єднання не буде автоматично розірвано по закінченню сценарію в якому була викликана функція. Синтаксис функції pfsockopen( ):
int pfsockopen (string вузол, int порт [, int код_помилкии [, string текст _помилки [, int тайм-аут]]])

В залежності від конкретних цілей вашого додатку може стати зручнішим використання pfsockopen( ) замість fsockopen( ).








Як створити новий файл і записати в нього щось?
Як прочитати вміст текстового файлу цілком?
Як прочитати вміст текстового файлу порядково?
Як додати інформацію в початок файлу?
Як видалити рядок з файлу?
Як надіслати файл користувачеві?
Як отримати масив файлів у каталозі з певним розширенням?
Як вивести випадкову рядок з файлу?
Як записати файл у певному кодуванні?
Як відредагувати певну рядок у файлі?
Як "обнулити" (очистити) вміст файлу?

http://base.vingrad.ru/view/2843-Rabota-s-faylami-v-PHP-FAQ


Как создать новый файл и записать в него что-то? Как прочитать содержимое текстового файла целиком? Как прочитать содержимое текстового файла построчно? Как добавить информацию в начало файла? Как удалить строчку из файла? Как послать файл пользователю? Как получить массив файлов в каталоге с определенным расширением? Как вывести случайную строку из файла? Как записать файл в определенной кодировке? Как отредактировать определенную строчку в файле? Как "обнулить" (очистить) содержимое файла?