Запис даних у файл Функція 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.