Page 80 - 4636
P. 80
параметр handle, до того часу, поки не досягне кінця рядка або запише length байт, залежно від
того, що відбудеться раніше.
Довжину рядка в РНР можна отримати за допомогою вбудованої функції strlen():
fwrite($fp, $outputstring, strlen($outputstring));
Третій параметр може знадобитися при запису у бінарному режимі, оскільки він допомагає
уникнути деяких проблем несумісності між платформами.
Формати файлів
У процесі створення файлу даних, подібного на наш приклад, вибір формату, в якому дані будуть
зберігатися, цілком залежить від творця. (Але, якщо файл даних буде використовуватися в іншому
додатку, можливо, доведеться врахувати особливості інтерпретації даних у цьому додатку.)
Запишемо рядок, який представляє один запис у нашому файлі даних:
$outputstrinq =$date."\t".$tireqty." покрышек\t"
.$oilqty." бутылокMacлa\t".$sparkqty." свечейзажигания\t\$"
.$total."\t".$address."\n";
У цьому простому прикладі кожний запис замовлення зберігається в окремому рядку файлу. У
такому випадку як простий роздільник записів використовується символ нового рядка. Оскільки
символи нового рядка невидимі, ми представляємо їх у вигляді керуючої послідовності "\n".
Надалі поля даних будуть завжди записуватися в одному і тому ж порядку, а як роздільник полів
використовується символ табуляції. Оскільки і цей символ невидимий, він також буде представлений
керуючою послідовністю "\t". За роздільник можна використовувати будь-яку ознаку, що легко
читається.
Роздільником, або обмежувачем, повинен бути підрядок, який точно не траплятиметься у вихідних
даних, інакше доведеться піддати вихідні дані додатковій обробці з метою видалення або
перетворення всіх наявних обмежувачів. Припустимо, що ніхто не буде вводити символи табуляції в
майбутню форму замовлення. Помістити символи табуляції або нового рядка в однорядкове HTML-
поле введення хоч і важко, але аж ніяк не неможливо.
Використання спеціального роздільника полів спрощує поділ даних на окремі змінні під час їх
читання. Поки ж кожне замовлення ми будемо розглядати як окремий рядок.
Після обробки декількох замовлень вміст файлу може виглядати як в лістингу 3.1
Лістинг 3.1. Файл orders.txt - приклад вмісту файлу замовлень
Закриття файлу
Після завершення використання файлу його слід закрити. Для цієї мети служить функція
fclose() ("file close" - " закрити файл"), виклик якої показаний нижче:
fclose($fp);
Ця функція повертає значення true у випадку успішного закриття файлу і false, якщо щось
цьому завадило. Імовірність помилки при цьому набагато менша, ніж при відкритті файлу, тому можна
не здійснювати перевірку результату її виконання.
Функція feof()
Якщо використовується цикл while для читання з файлу до того часу, поки не буде досягнутий
кінець файлу, цикл while перевіряє, чи досягнуто кінець файлу, за допомогою функції feof() :
while (!feof ($fp))
77