Запис даних у файл Функція fwrite
Для того, щоб записати дані у файл, доступ до якого відкритий функцією fopen(), можна використовувати функцію fwrite(). Синтаксис у неї наступний:
int fwrite ( покажчик на файл, рядок [, довжина])
Ця функція записує вміст рядка рядок у файл, на який вказує покажчик на файл. Якщо вказаний додатковий аргумент довжина, то запис закінчується після того, як записана кількість символів, рівна значенню цього аргументу, або коли буде досягнутий кінець рядка.
В результаті своєї роботи функція fwrite() повертає число записаних байтів або false, в разі помилки.
Хай в нашій робочій директорії немає файлу my_file.html. Створимо його і запишемо в нього рядок тексту:
<?php $h = fopen("my_file.html","w");
$text = "Цей текст запишемо у файл.";
if (fwrite($h,$text))
echo "Запис пройшов успішно";
else
echo "Сталася помилка при записі даних";
fclose($h);
?>
В результаті роботи цього скрипта в браузері ми побачимо повідомлення про те, що запис пройшов успішно, а у файлі my_file.html з'явиться рядок “Цей текст запишемо у файл.”. Якби цей файл існував до того, як ми виконали цей скрипт, то всі дані що знаходяться в нім були б видалені.
Якщо ж ми напишемо такий скрипт:
<?php $h = fopen("my_file.html","a");
$add_text = "Додамо текст у файл.";
if(fwrite($h,$add_text,7))
echo "Додавання тексту пройшло успішно<br>";
else
echo "Сталася помилка при додаванні даних<br>";
fclose($h); ?>
то до рядка, що вже існує у файлі my_file.html, додасться ще сім символів з рядка, що міститься в змінній $add_text, тобто слово «Додамо»
Функція fwrite() має псевдонім fputs(), використовуваний так само, що і сама функція.
Читання даних з файлу Якщо ми хочемо прочитати дані з існуючого файлу, однієї функції fopen(), як і у випадку із записом даних, недостатньо. Вона лише повертає покажчик на відкритий файл, але не прочитує жодного рядка з цього файлу. Тому для того, щоб прочитати дані з файлу, потрібно скористатися одній із спеціальних функцій: file, readfile, file_get_contents, fread, fgets і тому подібне
Функція fread
Ця функція здійснює читання даних з файлу. Її можна використовувати і для читання даних з бінарних файлів, не побоюючись їх пошкодження. Синтаксис fread() такий:
string fread (покажчик на файл, довжина)
При виклику цієї функції відбувається читання даних довжини (у байтах), визначеної параметром довжина, з файлу, на який вказує покажчик на файл. Параметр покажчик на файл має бути реально існуючій змінній типа ресурс, що містить в собі зв'язок з файлом, відкритий, наприклад, за допомогою функції fopen(). Читання даних відбувається до тих пір, поки не зустрінеться кінець файлу або доки не буде прочитано вказане параметром довжина число байтів.
В результаті роботи функція fread() повертає рядок з ліченою з файлу інформацією.
У цій функції параметр довжина – обов'язковий. Отже, якщо ми хочемо рахувати весь файл в рядок, потрібно знати його довжину. PHP може самостійно обчислити довжину вказаного файлу. Для цього потрібно скористатися функцією filesize(ім'я файлу). В разі помилки ця функція поверне false. На жаль, її можна використовувати лише для здобуття розміру локальних файлів.
Прочитаємо вміст файлу my_file.html
<?php
$h = fopen("my_file.html","r+");
// відриваємо файл на запис і читання
$content = fread($h,filesize(“my_file.html”));
// прочитуємо вміст файлу в рядок
fclose($h);
// закриваємо з'єднання з файлом
echo $content;
// виводимо вміст файлу
// на екран браузеру
?>
Для того, щоб рахувати вміст бінарного файлу, наприклад зображення, в таких системах, як Windows, рекомендується відкривати файл за допомогою прапора rb або йому подібних, таких, що містять символ b в кінці.
Функція filesize() кешує результати своєї роботи. Якщо змінити вміст файлу my_file.html і знову запустити приведений вище скрипт, то результат його роботи не зміниться. Більш того, якщо запустити скрипт, що прочитує дані з цього файлу за допомогою іншої функції (наприклад, fgetss), то результат може виявитися таким, неначебто файл не змінився. Аби цього уникнути, потрібно очистити статичний кеш, додавши в код програми команду clearstatcache();
Функція fgets
За допомогою функції fgets() можна рахувати з файлу рядок тексту. Синтаксис цієї функції практично такий же, як і в fread(), за винятком того, що довжину прочитуваного рядка вказувати необов'язково:
string fgets ( покажчик на файл [, довжина])
В результаті роботи функція fgets() повертає рядок завдовжки (довжина–1) байт з файлу, на який вказує покажчик на файл. Читання закінчується, якщо прочитано (довжина–1) символів і зустрівся символ перекладу рядка або кінець файлу. Нагадаємо, що в PHP один символ – це один байт. Якщо довжина прочитуваного рядка не вказана (дана можливість з'явилася починаючи з PHP 4.2.0), то прочитується 1 Кбайт (1024 байт) тексту або, що те ж саме, 1024 символи. Починаючи з версії PHP 4.3, якщо параметр довжина не заданий, прочитується рядок цілком. В разі помилки функція fgets() повертає false. Для версій PHP починаючи з 4.3 ця функція безпечна для двійкових файлів.
<?php
$h = fopen("my_file.html","r+");
$content = fgets($h,2);
// вважає перший символ з
// першого рядка файлу my_file.html
fclose($h);
echo $content;
?>
Обидві функції, fread() і fgets(), припиняють прочитування даних з файлу, якщо зустрічають кінець файлу. У PHP є спеціальна функція, перевіряюча, чи дивиться покажчик позиції файлу на кінець файлу. Це булева функція feof(), як параметр якої передається покажчик на з'єднання з файлом.
Наприклад, ось так можна рахувати всі рядки файлу my_file.html:
<?php
$h = fopen("my_file.html","r");
while (!feof ($h)) {
$content = fgets($h);
echo $content,"<br>";
}
fclose($h); ?>
Функція fgetss
Існує різновид функції fgets() – функція fgetss(). Вона теж дозволяє прочитувати рядок з вказаного файлу, але при цьому видаляє з нього html-теги, що все зустрілися, за виключенням, мабуть, деяких. Синтаксис fgetss() такий:
string fgetss(покажчик на файл, довжина [, допустимі теги])
Зверніть увагу, що тут аргумент довжина обов'язковий.
Хай у нас є файл my_file.html наступного вмісту:
<h1>Без зусиль не виймеш і рибку із ставка.</h1>
<b>Тихіше їдеш – далі будешь</b>
В семи няньок дитя без ока</i>.
\begin{verbatim}
Виведемо на
екран всі рядки файлу \verb"my_file.html", видаливши з них все теги, окрім
\verb"<b>" і \verb"<i>":
\begin{verbatim}
<?php
$h = fopen("my_file.html","r");
while (!feof ($h)) {
$content = fgetss($h,1024,'<b><i>');
echo $content,"<br>";}
fclose($h);
?>
В результаті роботи цього скрипта отримаємо:
\textbf{Тихіше їдеш – далі будеш}
Без зусиль не виймеш і рибку із ставка.
У семи няньок дитя без ока.
\textbf{Функція fgetc}
Природно, якщо можна прочитувати інформацію
файлу відрядковий, то можна прочитувати її і посимвольний. Для цього
призначена функція \verb"fgetc()". Синтаксис в
її наступний:
\begin{verbatim}
string fgetc ( покажчик на файл )
Ця функція повертає символ з файлу, на який посилається покажчик на файл, і значення, що обчислюється як FALSE, якщо зустрінутий кінець рядка.
Ось так, наприклад, можна рахувати файл по одному символу:
<?php
$h = fopen("my_file.html","r");
while (!feof ($h)) {
$content = fgetc($h);
echo $content,"<br>";
}
fclose($h);
?>
Насправді для того, щоб прочитати вміст файлу, відкривати з'єднання з ним за допомогою функції fopen() зовсім не обов'язково. У PHP є функції, які дозволяють робити це, використовуючи лише ім'я файлу. Це функції readfile( ), file( ) і file_get_contents( ).
Функція readfile
Синтаксис:
int readfile ( ім’я_файлу [, use_include_path])
Функція readfile() прочитує файл, ім'я якого передане їй як параметр ім’я_файлу, і виводить його вміст на екран. Якщо додатковий аргумент use_include_path має значення TRUE, то пошук файлу із заданим ім'ям проводиться і по директоріях, що входять в include_path.
У програму ця функція повертає число лічених байтів (символів) файлу, а в разі помилки – FALSE. Повідомлення про помилку в цій функції можна подавити оператором @ .
Наступний скрипт виведе на екран вміст файлу my_file1.html і розмір цього файлу, якщо він існує. Інакше виведеться наше повідомлення про помилку – рядок "Error in readfile".
<?php
$n = @readfile ("my_file1.html");
/* виводить на екран вміст файлу і записує його розмір в змінну $n */
if (!$n) echo "Error in readfile";
/* якщо функція readfile() виконалася з помилкою
то $n=false і виводимо повідомлення про ошибке*/
else
echo $n;
// якщо помилки не було, то виводимо число
// лічених символів
?>
За допомогою функції readfile() можна читати вміст видалених файлів, вказуючи їх URL-адрес як ім'я файлу, якщо ця опція не відключена в налаштуваннях сервера.
Відразу ж виводити вміст файлу на екран не завжди зручно. Деколи потрібно записати інформацію з файлу в змінну, аби надалі провести з нею які-небудь дії. Для цього можна використовувати функцію file() або file_get_contents().
Функція file
Функція file() призначена для прочитування інформації з файлу в змінну типа масив. Синтаксис у неї такий же, як і у функції readfile(), за винятком того, що в результаті роботи вона повертає масив:
array file ( имя_файла [, use_include_path])
Ця функція повертає масив, кожен елемент даного масиву є рядком у файлі, інформацію з якого ми прочитуємо (його ім'я задане аргументом ім’я_файлу). Символ нового рядка теж включається в кожен з елементів масиву. В разі помилки функція file(), як і все вже розглянуті, повертає false. Додатковий аргумент use_include_path знову ж таки визначає, шукати чи ні даний файл в директоріях include_path. Відкривати видалені файли за допомогою цієї функції теж можна, якщо не заборонено сервером. Починаючи з PHP 4.3 робота з бінарними файлами за допомогою цієї функції стала безпечною.
Наприклад, у нас є файл my_file.html наступного вмісту:
<h1>Без праці не виймеш і рибку із ставка.</h1>
<b>Тише їдеш – далі будешь</b>
Прочитаємо його вміст за допомогою функції file():
<?php
$arr = file ("my_file.html");
foreach($arr as $i => $a)
echo $i,": ", htmlspecialchars($a), "<br>";
?>
В результаті на екран буде виведено наступне повідомлення:
0: <h1>Без праці не виймеш
і рибку із ставка.</h1>
1: <b>Тише їдеш – далі будешь</b>
Дата добавления: 2016-04-02; просмотров: 938;