Page 82 - 4636
P. 82
Звернення до функції readfile() відкриває файл, відображає його вміст у стандартному виводі (
вікні браузера), а потім закриває файл. Прототип цієї функції readfile() виглядає таким чином:
int readfile (string filename[, int use_include_path [, resource
context ]]) ;
Необов'язковий другий параметр use_include_path вказує, чи повинен PHP при пошуку файлу
використовувати шлях, що зберігається в include_path, і діє так само, як і у функції fopen().
Третій необов'язковий параметр context використовується, тільки якщо файл відкритий віддалено,
наприклад, через HTTP. Функція readfile() повертає загальну кількість байт, зчитаних з файлу.
Другий спосіб передбачає застосування функції fpassthru(). Спочатку необхідно відкрити
файл за допомогою функції fopen(). Потім можна передати покажчик файлу у функцію
fpassthru(), яка завантажить вміст файлу, починаючи з позиціїції, заданої покажчиком, у
стандартний вивід. Після закінчення цієї операції функція закриває файл. Представлений вище
сценарій можна замінити функцією fpassthru() таким чином :
$fp = fopen("$DOCUMENT_R0OT/../orders/orders.txt",'rb');
fpassthru ($fp);
Функція fpassthru() повертає значення true, якщо читання пройшло успішно, і false - у
протилежному випадку.
Третя можливість (зчитування всього файлу передбачає використання функції file(). Ця
функція ідентична функції readfile() за винятком того, що замість відображення файлу в
стандартному виводі вона перетворює його в масив.
Цю функцію можна викликати наступним чином :
$filearray = file("$DOCUMENT_ROOT/../orders/orders.txt");
Цей рядок призведе до зчитування всього файлу в масив з ім'ям $filearray. Кожен рядок файлу
зберігається в окремому елементі цього масиву. Зверніть увагу, що ця функція не є безпечною щодо
бінарних файлів у застарілих версіях РНР.
Як четвертий варіант можна скористатися функцією file_get_contents().Ця функція
ідентична функції readfile()за винятком того, що вона повертає вміст файлу у вигляді рядка
замість того, щоб виводити його у вікно браузера.
Читання символу : функція fgetc()
Ще одна можливість обробки файлів полягає в читанні з файлу по одному символу за раз. Це
реалізується за допомогою функції fgetc()("file get character" - "отримати символ з
файлу"). Як свій єдиний параметр вона приймає покажчик файлу і повертає такий символ із файлу.
За допомогою функції fgetc()цей код зчитує з файлу по одному символу за раз і зберігає його в
змінній $char, поки не буде досягнуто кінця файлу. Потім виконується невелика додаткова обробка з
метою заміни текстових символів кінця рядка \n HTML - роздільниками рядків <br/>.
Це робиться лише для гарного форматування. Якщо спробувати вивести файл у браузері з
символами нового рядка між записами, весь файл буде представлений у вигляді одного рядка. Веб-
браузери не відображають пробільні символи на зразок символів нового рядка, тому вони повинні
замінюватися HTML-дескрипторами, зокрема, <br/>. Для грамотного розв’язку даної задачі
використовується тернарна операція.
Незначний побічний ефект використання функції fgetc( )замість функції fgets()полягає в
тому, що fgetc()буде повертати символ EOF, в той час як fgets()цього не робить. Після читання
символу доводиться знову перевіряти feof(),оскільки символ EOF у вікні браузера відображатися
не повинен.
У загальному випадку зчитування файлу символ за символом не виправдано, якщо тільки з якоїсь
особливої причини не потрібна посимвольна обробка файлу.
79