ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Огляд мережних функцій PHP
         

     

    Інформатика, програмування

    Огляд мережних функцій PHP

    В цій статті розглядається використання мережевих функцій популярної мови програмування PHP. При написанні цієї статті я вирішив відійти від загальноприйнятої схеми, яка вживається в керівництві по PHP:

    «тип назва (параметри) - опис »

    Навпаки, у статті зібрані корисні практичні приклади. З-за великого обсягу інформації (мова PHP призначений для Web-програмування, тому досить більшу частину функцій можна назвати мережевими), я обмежусь тільки тими, які використовую найчастіше.

    Змінні оточення інтерфейсу CGI

    При використанні інтерфейсу CGI (Common Gateway Interface) програмісту є безліч змінних оточення. Зараз ми розглянемо найбільш корисні в нашому випадку змінні (див. таблицю 1).

    Змінні оточення можна використовувати в програмі також як звичайні змінні. Наприклад, для виведення IP-адреси клієнта достатньо одного оператора:

    echo $ REMOTE_ADDR

    Таблиця 1.        

    Змінна         

    Опис             

    HTTP_USER_AGENT         

    За допомогою цієї зміною можна   визначити броузер користувача, а також його операційну систему. Наприклад,   для Netscape, запущеним під Linux, ця змінна буде содердать значення:   

    Mozilla/4.7 [en] (Linux; I)   

    Для Internet Explorer 5.0 і Win98:   

    Mozilla/4.0 (compatible; MSIE 5.0; Windows   98; DigExt)             

    HTTP_HOST         

    Містить доменне ім'я сервера,   на якому запущений сценарій.             

    SERVER_PORT         

    Порт сервера, до якого   звернувся броузер. Зазвичай використовується порт 80.             

    REMOTE_ADDR         

    Містить IP-адреса клієнта, то   є IP-адресу користувача, який запустив броузер             

    REMOTE_PORT         

    Порт для отримання відповіді   сервера. Цей порт закріплюється за кожною запущеної копією броузера     

    Отримання документа по протоколу HTTP

    Отримати документ по протоколу HTTP досить просто:

    Лістинг 1. Отримання документа по HTTP

    В першому рядку лістингу 1 ми одержуємо весь документ в рядок $ file, а другий -- відправляємо документ в броузер. Функція file () повертає масив рядків. N-ий елемент цього масиву відповідає N-ої рядку файлу.

    Якщо нас цікавить HTML-код одержуваного документа, вивести код в броузер допоможе лістинг 2, який я запозичив з керівництва по PHP.

    Лістинг 2. Висновок HTML-коду документа

    Робота з сокетами

    Функція file () (так само як і fopen ()) дозволяє нам працювати тільки з вмістом файла, який отриманий з того чи іншого протоколу. Припустимо, що нас цікавлять заголовки, передані сервером. Отримати ці заголовки ми можемо за допомогою функції

    int fsockopen (string $ host, int $ port, [, int & $ errno] [, string & $ errstr])

    Дана функція дозволяє ініціалізувати потокове з'єднання з зазначеним хостом і програмою, яка пов'язана із зазначеним портом. Крім того, ця функція підтримує Unix-сокети. При цьому параметр $ hostname буде використаний як шлях до файлу сокета, а параметр $ port повинен бути дорівнює 0.

    Після підтримання зв'язку функція повертає звичайний дескриптор файлу. З цим дескриптором можуть працювати функції fread (), fwrite (), fgets (), feof () і інші.

    В випадку помилки функція поверне false і, якщо вказані необов'язкові параметри $ errno і $ errstr, відповідно, номер помилки і текст повідомлення про помилку.

    Розглянемо лістинг 3 - «Віртуальний браузер»: ми посилаємо серверу HTTP-запит GET і, одержавши відповідь, виводимо його в броузер.

    Лістинг 3. «Віртуальний браузер»

    Як я вже зазначав вище, при використанні функції fsockopen ми отримуємо вся відповідь сервера - разом із заголовками. Функцію HtmlSpesialChars () ми використовуємо для коректного відображення HTML-коду в текстовому форматі. У броузері ми повинні отримати приблизно наступне:

    HTTP/1.1 200 OK

    Date: Sat, 16 Mar 2002 10:46:59 GMT

    Server: Apache/1.3.12 (Linux)

    Last-Modified: Sat, 20 Nov 1999 13:29:40 GMT

    ETag: "0-574-3836a244"

    Accept-Ranges: bytes

    Content-Length: 1396

    Connection: close

    Content-Type: text/html

    sp;

    Test Page for Apache Installation

    ...

    Відповідь сервера HTTP/1.1 200 OK відповідає коду відповіді 200 і означає безпомилкове виконання операції (в даному випадку передачі документа на запит GET).

    Встановити потрібний нам заголовок відповіді ми можемо з допомогою функції Header (). Наприклад, Header ( "Location:// www.softerra.ru/freeos");

    Заборонити кешування можна за допомогою установки заголовка Pragma: no-cache. На жаль одного цього заголовка явно не вистачить для заборони кешування. Для повного заборони потрібно використовувати цілих чотири заголовка. Встановити за допомогою Header їх можна так:

    Header ( "Pragma: no-cache ");

    Header ( "Cache-control: no-cache, must-revalidate ");

    Header ( "Expires: Mon, 01 Jan 1990 01:01:01 GMT ");

    Header ( "Last-Modified: ". gmdate (" D, d M Y H: i: s ")." GMT ");

    Перший з них встановлює заголовок заборони кешування згідно протоколу HTTP/1.0, а другий - HTTP/1.1. Третій визначає задає дату в минулому, а четвертий встановлює дату останнього оновлення документа. Функція gmdate () повертає дату в потрібному нам форматі. Встановлювати всі чотири заголовка вкрай бажано, так як заборона кешування може не спрацювати або на проксі-сервер або в броузері, і користувач отримає застарілу версію документа.

    Функції для роботи з DNS

    При написанні сценаріїв незалежно від мови програмування часто виникає потреба дозволу IP-адреса в доменне ім'я і навпаки.

    Перетворення IP-адреса в доменне ім'я виконує функція

    string gethostbyaddr (string $ ip_address);

    В випадку помилки повертається IP-адресу.

    Перетворення імені хоста в IP-адреса виконує функція

    string gethostbyname (string $ host);

    Якщо вам потрібно отримати всі IP-адреси хоста з іменем "$ host, використовуйте функцію

    array gethostbynamel (string $ host);

    В лістингу 4 застосована саме функція gethostbynamel.

    Лістинг 4. Отримання всіх IP-адрес хоста $ host

    Визначити почтовик для зазначеного хоста hostname можна за допомогою функції

    int getmxrr (string hostname, array mxhosts, array [weight]);

    Дана функція запитує DNS на предмет наявності записів MX для зазначеного хоста.

    Наступні функції ніякого відношення до DNS не мають, але щоб не створювати іншого розділу в статті, я описав їх тут.

    int getprotobyname (string name);

    Функція getprotobyname () повертає номер протоколу, який відповідає імені $ name.

    Зворотній їй функція

    string getprotobynumber (int number);

    повертає ім'я протоколу за його номером.

    Функція

    int getservbyname (string service, string protocol);

    повертає номер порту Internet-сервісу, назва якого зазначено в параметрі $ service. Другий параметр функції - це протокол: tcp чи udp.

    Наприклад, оператор

    echo getservbyname ( "ftp", "tcp");

    виведе у вікно броузера число 21.

    Для функції getservbyname () також існує зворотна їй:

    string getservbyport (int port, string protocol);

    При використанні функції getservbyport () потрібно вказати номер порту і протокол (tcp або udp) і, як результат, ви отримаєте назву Internet-сервісу.

    Наприклад,

    echo getservbyport (21, "tcp");

    виведе у вікно броузера назва сервісу - ftp.

    Опції протоколювання

    Іноді потрібно записати деяку інформацію, наприклад, повідомлення про помилку, в системний журнал syslog. У PHP для цього передбачена ціла серія функцій:

    int openlog (string ident, int option, int facility);

    int syslog (int priority, string message);

    int closelog (void);

    Перша з них відкриває з'єднання з демоном syslog. Друга - породжує системне повідомлення (іншими словами записує повідомлення з вказаним пріоритетом у протокол). Функція closelog () закриває з'єднання протоколу.

    Відправлення повідомлення

    Я не відкрию Америки, якщо заявлю, що для відправки пошти в PHP використовується функція mail. Тут я тільки наведу кілька рекомендацій щодо використання цієї функції.

    Нагадаю формат виклику функції:

    mail (string $ to, string $ subject, string $ msg [, string $ headers]);

    Наприклад,

    mail ( "root @ localhost", "Test", "MessagenLine2", "From: den @ localhostn "," Reply-To: den @ localhostn ");

    Всі працює добре до тих пір, поки не починаються проблеми з кодуваннями. Для вказівки кодування потрібно встановити заголовок

    Content-type: text/plain; charset = koi8-r

    Для перетворення самих кодувань використовується функція convert_cyr_string (). Використовувати її гранично просто, наприклад,

    convert_cyr_string ($ msg, "k", "w");

    Цим викликом функції convert_cyr_string () ми перетворимо кодування koi8-r в windows-1251. Зрозуміло, заголовок Content-type потрібно змінити на

    Content-type: text/plain; charset = win-1251

    При використанні функції mail доцільно зберігати всі заголовки в тексті листа. Тоді один раз викликавши функції convert_cyr_string () ми конвертуємо все листа до нужнию нам кодування. У цьому випадку виклик функції mail повинен бути зроблений так:

    mail ( "root @ localhost ","",$ msg);

    Значення змінної $ msg буде таким:

    $ msg = "From: Денис n

    To: Адміністратор n

    Content-type: text/plain; charset = win-1251n

    n

    Текст повідомлення

    ...

    Зверніть увагу, що після всіх заголовків має слідувати два символи нового рядка n: одна після останнього заголовка, а інший перед текстом повідомлення.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.i2n.ru

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status