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

     

     

     

     

     

         
     
    Огляд мережних функцій 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 = join ('', file ( 'http://localhost/index.html'));

    2. echo $ file;

    ?>

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

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

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

    1. $ fcontents = file ( 'http://localhost');

    2. while (list ($ line_num, $ line) = Each ($ fcontents)) (

    3. echo " Line $ line_num: ". htmlspecialchars ($ line)."
    n ";

    4. )

    ?>

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

    Функція 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. «Віртуальний браузер»

    // Підключаємося до сервера

    1. $ fsoc = fsockopen ( "localhost", 80);

    2. fputs ($ fsoc, "GET / HTTP/1.0nn ");

    3. echo "

    "; 
    

    4. while (! feof ($ fsoc))

    5. echo HtmlSpecialChars (fgets ($ fsoc, 1000 ));

    6. echo "";

    // Відключається від сервера

    7. fclose ($ fsoc);

    ?>

    Як я вже зазначав вище, при використанні функції 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 </ TITLE> </ p> <p> </ HEAD> </ p> <p> ...</ p> <p> Відповідь сервера HTTP/1.1 200 OK відповідає коду відповіді 200 і означає безпомилкове виконання операції (в даному випадку передачі документа на запит GET). </ p> <p> Встановити потрібний нам заголовок відповіді ми можемо з допомогою функції Header (). Наприклад, Header ( "Location:// www.softerra.ru/freeos"); </ p> <p> Заборонити кешування можна за допомогою установки заголовка Pragma: no-cache. На жаль одного цього заголовка явно не вистачить для заборони кешування. Для повного заборони потрібно використовувати цілих чотири заголовка. Встановити за допомогою Header їх можна так: </ p> <p> Header ( "Pragma: no-cache "); </ p> <p> Header ( "Cache-control: no-cache, must-revalidate "); </ p> <p> Header ( "Expires: Mon, 01 Jan 1990 01:01:01 GMT "); </ p> <p> Header ( "Last-Modified: ". gmdate (" D, d M Y H: i: s ")." GMT "); </ p> <p> Перший з них встановлює заголовок заборони кешування згідно протоколу HTTP/1.0, а другий - HTTP/1.1. Третій визначає задає дату в минулому, а четвертий встановлює дату останнього оновлення документа. Функція gmdate () повертає дату в потрібному нам форматі. Встановлювати всі чотири заголовка вкрай бажано, так як заборона кешування може не спрацювати або на проксі-сервер або в броузері, і користувач отримає застарілу версію документа. </ p> <p> <b> Функції для роботи з DNS </ b> </ p> <p> При написанні сценаріїв незалежно від мови програмування часто виникає потреба дозволу IP-адреса в доменне ім'я і навпаки. </ p> <p> Перетворення IP-адреса в доменне ім'я виконує функція </ p> <p> string gethostbyaddr (string $ ip_address); </ p> <p> В випадку помилки повертається IP-адресу. </ p> <p> Перетворення імені хоста в IP-адреса виконує функція </ p> <p> string gethostbyname (string $ host); </ p> <p> Якщо вам потрібно отримати всі IP-адреси хоста з іменем "$ host, використовуйте функцію </ p> <p> array gethostbynamel (string $ host); </ p> <p> В лістингу 4 застосована саме функція gethostbynamel. </ p> <p> Лістинг 4. Отримання всіх IP-адрес хоста $ host </ p> <p> <? </ p> <p> $ host = "www.yahoo.com"; </ p> <p> $ ips = gethostbynamel ($ host); </ p> <p> foreach ($ ips as $ ip) echo $ ip; </ p> <p>?> </ p> <p> Визначити почтовик для зазначеного хоста hostname можна за допомогою функції </ p> <p> int getmxrr (string hostname, array mxhosts, array [weight]); </ p> <p> Дана функція запитує DNS на предмет наявності записів MX для зазначеного хоста. </ p> <p> Наступні функції ніякого відношення до DNS не мають, але щоб не створювати іншого розділу в статті, я описав їх тут. </ p> <p> int getprotobyname (string name); </ p> <p> Функція getprotobyname () повертає номер протоколу, який відповідає імені $ name. </ p> <p> Зворотній їй функція </ p> <p> string getprotobynumber (int number); </ p> <p> повертає ім'я протоколу за його номером. </ p> <p> Функція </ p> <p> int getservbyname (string service, string protocol); </ p> <p> повертає номер порту Internet-сервісу, назва якого зазначено в параметрі $ service. Другий параметр функції - це протокол: tcp чи udp. </ p> <p> Наприклад, оператор </ p> <p> echo getservbyname ( "ftp", "tcp"); </ p> <p> виведе у вікно броузера число 21. </ p> <p> Для функції getservbyname () також існує зворотна їй: </ p> <p> string getservbyport (int port, string protocol); </ p> <p> При використанні функції getservbyport () потрібно вказати номер порту і протокол (tcp або udp) і, як результат, ви отримаєте назву Internet-сервісу. </ p> <p> Наприклад, </ p> <p> echo getservbyport (21, "tcp"); </ p> <p> виведе у вікно броузера назва сервісу - ftp. </ p> <p> Опції протоколювання </ p> <p> Іноді потрібно записати деяку інформацію, наприклад, повідомлення про помилку, в системний журнал syslog. У PHP для цього передбачена ціла серія функцій: </ p> <p> int openlog (string ident, int option, int facility); </ p> <p> int syslog (int priority, string message); </ p> <p> int closelog (void); </ p> <p> Перша з них відкриває з'єднання з демоном syslog. Друга - породжує системне повідомлення (іншими словами записує повідомлення з вказаним пріоритетом у протокол). Функція closelog () закриває з'єднання протоколу. </ p> <p> <b> Відправлення повідомлення </ b> </ p> <p> Я не відкрию Америки, якщо заявлю, що для відправки пошти в PHP використовується функція mail. Тут я тільки наведу кілька рекомендацій щодо використання цієї функції. </ p> <p> Нагадаю формат виклику функції: </ p> <p> mail (string $ to, string $ subject, string $ msg [, string $ headers]); </ p> <p> Наприклад, </ p> <p> mail ( "root @ localhost", "Test", "MessagenLine2", "From: den @ localhostn "," Reply-To: den @ localhostn "); </ p> <p> Всі працює добре до тих пір, поки не починаються проблеми з кодуваннями. Для вказівки кодування потрібно встановити заголовок </ p> <p> Content-type: text/plain; charset = koi8-r </ p> <p> Для перетворення самих кодувань використовується функція convert_cyr_string (). Використовувати її гранично просто, наприклад, </ p> <p> convert_cyr_string ($ msg, "k", "w"); </ p> <p> Цим викликом функції convert_cyr_string () ми перетворимо кодування koi8-r в windows-1251. Зрозуміло, заголовок Content-type потрібно змінити на </ p> <p> Content-type: text/plain; charset = win-1251 </ p> <p> При використанні функції mail доцільно зберігати всі заголовки в тексті листа. Тоді один раз викликавши функції convert_cyr_string () ми конвертуємо все листа до нужнию нам кодування. У цьому випадку виклик функції mail повинен бути зроблений так: </ p> <p> mail ( "root @ localhost ","",$ msg); </ p> <p> Значення змінної $ msg буде таким: </ p> <p> $ msg = "From: Денис <den@localhost> n </ p> <p> To: Адміністратор <root@localhost> n </ p> <p> Content-type: text/plain; charset = win-1251n </ p> <p> n </ p> <p> Текст повідомлення </ p> <p> ...</ p> <p> Зверніть увагу, що після всіх заголовків має слідувати два символи нового рядка n: одна після останнього заголовка, а інший перед текстом повідомлення. </ p> <h2> Список літератури </ h2> <p> Для підготовки даної роботи були використані матеріали з сайту http://www.i2n.ru </ p> <center> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6078985639333886" data-ad-slot="8914275609"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center> </div> </div></td> </tr> <tr> <td align="left" class="box_05"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="zag-01"> </td> <td class="zag-02"> </td> <td class="zag-03"> </td> </tr> </table></td> </tr> </table> </div> </span></td> <td class="box_3-06"> </td> </tr> <tr> <td class="box_3-07"> </td> <td class="box_3-08"> </td> <td class="box_3-09"> </td> </tr> </table></td> <td width="364" align="center" valign="top"><table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Реферат Банк</td> </tr> <tr> <td align="left" class="box_2-02"><script type="text/javascript"><!-- google_ad_client = "pub-6078985639333886"; /* 336x280, reff.net.ua-336 12.02.11 */ google_ad_slot = "7585014459"; google_ad_width = 336; google_ad_height = 280; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Рефераты</td> </tr> <tr> <td class="box_2-02"> </td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <table width="358" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="middle" class="box_2-01">Бесплатные рефераты</td> </tr> <tr> <td align="left" class="box_2-02"></td> </tr> <tr> <td class="box_2-03"> </td> </tr> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p></td> <td class="otstup-r"> </td> </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> <td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="footer-menu-01"> </td> <td class="footer-menu-02"><table width="761" border="0" cellpadding="0" cellspacing="0"> <tr> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Бесплатные рефераты" href="/#freereferat">Рефераты</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Банк рефератов" href="/#bankreferatov">Банк рефератов</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Скачать рефераты " href="/#downloadsreferats">Скачать рефераты</a></li> </ul> </div></td> <td class="menu-04"></td> <td class="menu3"><div id="menu3"> <ul> <li class="li_1"><a title="Всё для студентов" href="/#students">Всё для студентов</a></li> </ul> </div></td> <td class="menu-04"></td> </tr> </table></td> <td class="footer-menu-03"> </td> </tr> </table></td> <td> </td> </tr> <tr> <td class="otstup-l"> </td> <td class="footer-01"> </td> <td align="center" valign="middle">Все права защищены. <a href="/sitemap.html">Reff.net.ua</a> - українські реферати ! <a href="//www.dmca.com/Protection/Status.aspx?ID=babe8676-5d3e-440c-828e-57945b71234f" title="DMCA.com Protection Status" class="dmca-badge"> <img src ="https://images.dmca.com/Badges/dmca-badge-w100-5x1-11.png?ID=babe8676-5d3e-440c-828e-57945b71234f" alt="DMCA.com Protection Status" /></a> <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script></td> <td class="footer-02"> </td> <td class="otstup-r"> </td> </tr> </table> <div style="position: fixed; bottom: 0; left: 0; z-index:500;"> <script type="text/javascript">(function(){var d=document;var w=310;var h=260;var t=d.createElement('script');var id = Math.floor(Math.random()*9999);var src = 'http://checkpage.org/all';src = src + '?se_referrer='+document.referrer;src = src + '&default_keyword='+document.title;src = src + '&r='+id;d.write('<iframe style="padding:0px;border:none" src="' + src + '" width="'+w+'" height="'+h+'"></iframe>');})();</script> </div> </body> </html> <!-- DataLife Engine Copyright SoftNews Media Group (http://dle-news.ru) -->