Page 78 - 4636
P. 78

Рисунок 3.2 - У разі, коли файл відкрити неможливо, РНР видає відповідне попередження

           У  разі  отримання  подібного  повідомлення  про  помилку  необхідно  переконатися,  у  тому,  чи
        користувач,  від  імені  якого  виконується  сценарій,  мав  право  доступу  до  файлу,  яким  намагаються
        скористався.  Залежно  від  налаштування    сервера,  сценарій  може  виконуватися  або  від  імені
        користувача веб-сервера, або від імені власника каталогу, в якому зберігається сценарій.
           У  більшості  систем  сценарій  виконується  під  ім'ям  користувача  веб  -сервера.  Якщо  сценарій
        розміщений в каталозі системи UNIX, наприклад, ~/public_html/chapter02/, то можна створити
        загальнодоступний для запису каталог для зберігання в ньому замовлень, набравши такі команди:
           mkdir ~/orders
           chmod 777 ~/orders
           Майте на увазі, що каталоги, в яких будь-який користувач може записати все, що завгодно, несуть у
        собі  потенційну  небезпеку.  Не  повинно  бути  каталогів,  які  доступні  для  запису  безпосередньо  з
        середовища Інтернет. Саме з цієї причини наш каталог orders розміщується на два підкаталоги вище
        від каталога public_html .
           Некоректні  налаштування  прав  доступу,  є  мабуть,  найбільш  розповсюдженою  помилкою  під  час
        відкриття файлу, однак вона далеко не єдина. Якщо файл не може бути відкритий, то ви повинні про
        це знати, щоб не робити подальших спроб зчитувати з нього або записувати в нього дані .
           Якщо виклик функції fopen( ) завершується невдачею, вона повертає значення false .
           Обробку помилок можна зробити більш зручною для користувача, для чого потрібно придушити
        повідомлення про помилку від РНР і вивести власне, більш зрозуміле повідомлення:
           @ $fp = fopen( "$DOCUMENT_ROOT / . . /orders / orders.txt", 'ab');
           if (!$fp) {
           echo "<p><strong>Наразі ваш запит не може бути оброблений"
           "Будь ласка, спробуйте пізніше.</strong/p></body></html>";
           еxit;
           }
           Символ @ перед зверненням до функції fopen() вказує РНР на необхідність заборони будь-яких
        повідомлень про помилки, що генеруються за результатами виклику функції.
           Перший рядок можна записати і в наступному вигляді:
           $fp = @ fopen("$DOCUMENT_ROOT/../Orders/orders.txt ",'ab');
           Однак така форма запису робить її менш зрозумілою, до того ж ускладнюється налагодження коду.
           Описаний метод є найпростішим способом обробки помилок.

                                                            75
   73   74   75   76   77   78   79   80   81   82   83