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
   77   78   79   80   81   82   83   84   85   86   87