68925

Структура програми в РНР. Стандартний вид РНР-сценарія

Лекция

Информатика, кибернетика и программирование

Це означає наступне: Обробка PHPкоду проводиться на стороні сервера ще до того як Web-сторінка буде передана браузеру. Виходить що PHP є транслюючим інтерпретатором або інтерпретуючим транслятором як кому більше подобається. Варто відзначити що PHP версії 3 був чистим...

Украинкский

2014-09-27

87 KB

0 чел.

Лекція № 1

Тема: Структура програми в РНР. Стандартний вид РНР-сценарія.

План

  1.  Загальні поняття і опис РНР.
  2.  Перша програма (скрипт) на РНР.

Загальні поняття і опис РНР

Спершу познайомимося з самим РНР. Мова програмування РНР спеціально призначена для роботи в Інтернет, що поєднує достоїнства мов C і Perl. Синтаксис мови дуже сильно нагадує C — якщо ви програмуєте на C, то скоро ви це відмітите.

У офіційній документації мова РНР подається як server-side HTML-embedded scripting language, тобто, як вбудована в HTML скриптова мова з обробкою на сервері. Це означає наступне:

Обробка PHP-коду проводиться на стороні сервера ще до того, як Web-сторінка буде передана браузеру. Це, до речі, відрізняє мову РНР від мови JavaScript.

РНР-код може бути безпосередньо вбудований в HTML-код сторінки. Цим він відрізняється від Perl і відрізняється в кращу сторону.

Ми знаємо, що мови програмування бувають двох видів: інтерпретатори і компілятори. Чим же є РНР? Щоб з'ясувати це, нам потрібно розібратися в термінології. Програма, що переводить код, написаний на одній мові програмування, на іншій називається транслятором. Наприклад, програма р2с, яка переводить Pascal-код в С-код, є транслятором. Компілятор — це теж транслятор. Він переводить код, написаний на мові високого рівня, в машинний код. Мова високого рівня зрозуміла людині і близька до людського (Pascal, С, РНР), а машинний код (0 і 1) зрозумілий комп'ютеру — з двійковими даними комп'ютеру простіше працювати. В результаті роботи компілятора, як правило, створюється двійковий виконуваний файл (у Windows/DOS — з розширенням .ехе або com), який можна виконувати без допомоги компілятора.

Інтерпретатор — це абсолютно інший тип мови програмування, що не має нічого спільного з компілятором. Інтерпретатор нічого не переводить, а тільки виконує код. Він аналізує код програми і виконує кожну її строчку. Наприклад, припустимо, що інтерпретатор знайшов рядок «А = А + 7». Він аналізує і перевіряє її коректність, а потім шукає змінну А.. Якщо  змінна була оголошена до рядка «А = А + 7», то інтерпретатор збільшує її значення на 7 — він виконує код. Була б замість рядка «А = А + 7» рядок print "Hello", наш інтерпретатор вивів би на екран рядок «Hello». Виконавши код, інтерпретатор не створює виконуваний файл, тому для наступного запуску вашого коду знову потрібний інтерпретатор.

По продуктивності інтерпретатори значно поступаються компілятору, оскільки машинний код виконується набагато швидше. Зате інтерпретатори дозволяють повністю контролювати програму під час її виконання.

РНР не є ні компілятором, ні інтерпретатором. РНР є щось середнє, між компілятором і інтерпретатором. Розглянемо, як РНР обробляє сценарії. На вхід РНР подається сценарій. Він переводить (транслює) його в спеціальний байт-код (внутрішнє уявлення). Потім РНР виконує байт-код (а не код самої програми!), при цьому він не створює виконуваний файл. Байт-код значно компактніший ніж звичайний код програми, тому його легше (і швидше) інтерпретувати (виконувати). Як бачите, РНР більше є інтерпретатором, ніж компілятором. Для чого потрібна була така подвійна робота — спочатку переводити у внутрішнє уявлення, а потім — виконувати? Невже не простіше відразу виконати кожен рядок програми?

Вдумайтеся в цей вираз «кожен рядок програми». Уявимо, що у нас є цикл:

for (I=0;I<10;I++)

{

оператор_1;

оператор_10 0;

}

Наш цикл «крутитиметься» не нескінченно, а всього лише десять разів. За кожний з цих десять проходів інтерпретатор повинен проаналізувати і виконати СТО рядків коду. Разом йому потрібно проаналізувати і виконати (я не дарма двічі згадую цю фразу) 10x100 = 1000 рядків коду. Якщо перевести один раз весь цикл в байт-код, то аналізувати йому доведеться в 10 разів менше! А це означає, що ваші сценарії виконуватимуться в 10 разів швидше.

Виходить, що PHP є транслюючим інтерпретатором або інтерпретуючим транслятором — як кому більше подобається. Варто відзначити, що PHP версії 3 був «чистим» інтерпретатором, і лише з появою четвертої версії сценарії стали виконуватися значно швидше. П'ята версія, як і четверта, є інтерпретуючим транслятором.

Проте, щоб не робили розробники PHP, двійкові виконувані файли, що відкомпілювалися, працюють значно швидше — в десятки, а може і в сотні разів. Але продуктивність PHP цілком достатня для створення Інтернет-додатків. Зараз поясню чому.

Хай вищезазначений цикл, переписаний на мові С, виконується за 0.1 секунди. На мові PHP він виконуватиметься в 10 разів довше — за 1 секунду. Проте передача даних користувачеві — результатів роботи циклу — триватиме 3 секунди. Отримуємо, відповідно, в сумі 3.1 і 4 секунди. Погодитеся, різниця між 3.1 і 4 секунди незначна — як користувач Інтернету ви навіть її не відчуєте. Навіть якщо у вас швидкий виділений канал, різниця все одно не відчуватиметься — може позначитися навантаження на сервер або інші чинники, навіть не залежні від PHP.

Використання інтерпретатора (а значить і PHP) має свої незаперечні переваги:

Вам не потрібно піклуватися про звільнення виділеної пам'яті, вам не потрібно закривати файл після закінчення роботи з ним — за вас все зробить інтерпретатор,    оскільки ваша програма виконується під його пильним контролем.

Вам не потрібно думати про типи змінних, вам також не потрібно оголошувати змінну до його першого використання.

Відладка програми і виявлення помилок істотно спрощуються — інтерпретатор неодмінно повідомить вас, якщо щось пішло не так.

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

Пишемо першу програму (скрипт) на PHP

Згідно традиції, знайомство з будь-якою мовою програмування починається з програми Hello, World! Ця програма нічого особливого не робить, вона тільки виводить на екран напис «HelloWorld!». Ми зараз небагато відступимо від традиції і напишемо програму, яка вітатиметься не зі всім світом (все одно цього ніхто не почує), а тільки з нами. Текст програми приведений в лістингу.

Лістинг. Перша програма (скрипт) на PHP

<?

echo "<html><body><hl>";

echo "Hello $my_name";

echo "</hl></body></html>";

?>

Перш, ніж запустити програму, її потрібно правильно «встановити» на сервері. Для цього збережете сценарій під ім'ям first.php і скопіюйте його в каталог DocumentRoot вашого сервера. Якщо ви працюєте під Linux, таким каталогом буде /var/www/html (у старих версіях — /home/ httpd/html). Якщо ви працюєте під Windows і слідували моїм рекомендаціям , каталогом DocumentRoot буде c:\www\html.

На відміну від звичайних CGI-програм, сценарії PHP є для сервера звичайними документами і їх не потрібно поміщати в каталог cgi-bin. Також не потрібно робити їх виконуваними (у випадку, якщо ви працюєте під Linux).

Виконавши вищезгадані рекомендації по установці, в рядку браузера введіть http://localhost/first.php?my_name=Denis. В результаті у вікні браузера ви побачите Hello,   Denis

Якщо тепер сторінку, відображену в браузері, переглянути у вигляді HTML-коду, то можна побачити наступне:

<html><body><hl> Hello,   Denis </hl></body></html>

Як бачите РНР-код виконався, підставив потрібне значення змінної $my_name і видав готову HTML-сторінку.

Це ми РНР-сценарій запустили через CGI-інтерфейс. При цьому ми передали змінною $my_name значення Denis. Проте будь-яку РНР-програму можна запустити так: php file.php. При цьому CGI-змінні будуть недоступні — адже ви запустили програму з командного рядка. Демонстраційні РНР-програми, не вимагаючі CGI.

Примітка.

Вводити текст програми краще в текстовому редакторові, що підтримує підсвічування синтаксису PHP. Якщо ви працюєте під Linux, можу порекомендувати трьох редакторів: До Write (команда kwrite), Kate (kate) і Quanta (quanta). Під Windows також не складає труднощів знайти такий редактор (у Інтернеті). Якщо ви не знайдете редактор з підсвічуванням синтаксису PHP, можна використовувати редактор з підсвічуванням синтаксису мови С.

Тепер розглянемо саму програму. Код PHP полягає в спеціальні теги <? і ?>. Після тега початку сценарію (<?) слідує перший оператор — echo. Оператора echo здійснює виведення інформації. Його з повною упевненістю можна назвати найголовнішим оператором — адже без нього було б неможливе виведення інформації в браузер і користувач не побачив би результату роботи сценарію.

Що виводиться оператором echo рядок полягає в лапки. Перший оператор виводить теги HTML, BODY і H1. В принципі, можна було б і не виводити перші два тега, але потрібно звикнути до дисципліни із самого початку.

Другий оператор echo "Hello, Smy_name"; виводить слово Hello і значення змінної $my_name. Щоб якось відрізняти змінні від звичайних рядків, перед ім'ям змінної ставиться знак долара. І це стосується не тільки рядків, у будь-якому випадку перед ім'ям змінної потрібно ставити знак долара. Знаю, що це незвично, але ви досить швидко звикніть до цього. Правда, спочатку ви припускатиметеся багато «грошових» помилок. Привласнення змінній якого-небудь значення здійснюється оператором привласнення, який позначається значком «=» (рівно). Приклади використання змінних:

$i=0; $d=7; $i=5   +   $d//   $i=12

Ще один приклад:

$wordl = "Hello"; $word2 = "world";

echo "$wordl $word2"; echo "$wordl, word2";

Перший оператор виведе в браузер рядок «Hello, world», а другою — «Hello, word2». В даному прикладі ми визначили дві змінні — $wordl і $word2. Так як ми забули дописати символ долара в другому операторові, PHP сприйняв «word2» як звичайний рядок, а не як змінну.

Зверніть увагу, що в нашому першому прикладі (first.php) ми не оголосили змінну $my_name. Її оголосив автоматично сам PHP — адже це параметр, переданий сценарію браузером. У цьому полягає ще одна перевага PHP перед іншими мовами програмування.

Ви коли-небудь програмували на С або Pascal? Звернення до параметра, переданого програмі, здійснюється по номеру, наприклад, прочитати значення параметра номер 1 можна, викликавши функцію ParamStr(l), а не по імені. Відчуваєте різницю? Тобто, якщо ми програмуємо на Pascal або С, нам обов'язково потрібно знати номер параметра. Наприклад, нам потрібно передати програмі два параметри — файл-джерело і файл-призначення. Програма повинна скопіювати дані з джерела в призначення. Якщо ми переплутаємо порядок файлів, може відбутися непоправне — файл-джерело буде перезаписаний файлом-призначення. У PHP нам немає ніякої різниці, як слідуватимуть параметри:

src=filel&dest=file2   або   dest=file2&src=filel

(так передаються браузером параметри нашому сценарію).

Дуже зручно! І це не говорячи вже про те, що PHP сам виконує розбір переданого рядка, оголошує і ініціалізував змінні.

Третій оператор нашої програми особливих коментарів не потребує, як і тег закінчення РНР-програми (?>).

Модифікуємо небагато наш текст програми first.php, щоб він виглядав так:

<?

echo "<html><body><hl>";

echo "Hello $my_name";

echo "<br> $var";

echo "</hl></body></html>";

?>

Якщо ми не передамо програмі параметр $var, тобто, як завжди, запустимо програму тільки з параметром $my_name, то у вікні браузера ми побачимо повідомлення про те, що змінна $var не визначена. Для того, щоб позбавитися від цієї помилки, безпосередньо перед оператором echo   "<br>   $var"; додайте рядок:

$var="   ";

Змінна буде оголошена і ініціалізувала. У PHP, як і в С++, ви можете оголошувати змінні в будь-якому місці сценарію, але до місця першого використання змінної. Як ви вже знаєте, будь-який інший інтерпретатор, наприклад, Perl, в подібній ситуації згенерував би повідомлення 500: «Помилка сценарію». Інтерпретатор PHP вирішує проблему просто і елегантно, позбавляючи тим самим Web-програміста від проглядання багатотомних журналів Web-сервера.


 

А также другие работы, которые могут Вас заинтересовать

24741. English Speaking Countries 17.49 KB
  The Commonwealth of Australia territories are the continent of Australia the island of Tasmania and number of smaller islands. Australia has an area of nearly eight million square kilometres. The population of Australia is over sixteen million people.
24742. Outstanding people of Russia Federation 16.41 KB
  The names of Russian scientists and writers poets composers and painters are worldfamous Pushkin Lermontov Chehov Levitan. It is almost impossible to name a branch of science in the development of which the Russian scientists haven't played the greatest role. Works of our Russian writes and poets are translated into many languages.
24743. Службы разрешения имен DNS и WINS 15.76 KB
  Для решения этой проблемы Windows XP и Windows Server 2003 обеспечивают возможность сопоставления разрешения IPадреса с именем компьютера. В состав Windows XP и Windows Server 2003 входят также две службы обеспечивающие централизованное хранение информации о соответствии имен компьютеров IPадресам и обслуживание запросов на поиск такого соответствия: служба WINS Windows Internet Name Service обеспечивающая управление именами NetBIOS. Эта служба включена для поддержки клиентских компьютеров управляемых версиями Windows 9x Me NT; ...
24744. Сетевая технология 23.5 KB
  Принципиально эти решения можно разделить на три группы: передача разных типов трафика по отдельным физическим линиям создание двух независимых сетевых инфраструктур; передача различных типов трафика по одной линии; преобразование одного вида трафика в другой с последующей транспортировкой и коммутацией.
24745. Физическая структуризация сетей. Примеры 26.36 KB
  Примеры Для построения простейшей односегментной сети достаточно иметь сетевые адаптеры и кабель подходящего типа. Повторитель улучшает электрические характеристики сигналов и их синхронность и за счет этого появляется возможность увеличивать общую длину кабеля между самыми удаленными в сети станциями. Логический сегмент построенный с использованием концентраторов Появление устройств централизующих соединения между отдельными сетевыми устройствами потенциально позволяет улучшить управляемость сети и ее эксплуатационные характеристики...
24746. Логическая структуризация сети 26 KB
  Логическая структуризация сети Несмотря на появление новых дополнительных возможностей основной функцией концентраторов остается передача пакетов по общей разделяемой среде. Коллективное использование многими компьютерами общей кабельной системы в режиме разделения времени приводит к существенному снижению производительности сети при интенсивном трафике. Общая среда перестает справляться с потоком передаваемых кадров и в сети возникает очередь компьютеров ожидающих доступа. Это явление характерно для всех технологий использующих разделяемые...
24747. Функции маршрутизатора в сети 26.5 KB
  Функции маршрутизатора в сети Маршрутиза́тор сетевое устройство пересылающее пакеты данных между различными сегментами сети и принимающее решения на основании информации о топологии сети и определённых правил заданных администратором. Нередко маршрутизатор используется для обеспечения доступа из локальной сети в глобальную сеть Интернет осуществляя функции трансляции адресов и межсетевого экрана.
24748. Функции шлюза в сети 23.5 KB
  Функции шлюза в сети Сетевой шлюз аппаратный маршрутизатор или программное обеспечение для сопряжения компьютерных сетей использующих разные протоколы например локальной и глобальной. Сетевой шлюз может быть специальным аппаратным роутером или программным обеспечением установленным на обычный сервер или персональный компьютер.
24749. Многоуровневый подход к разработке средств сетевого взаимодействия 22.5 KB
  Многоуровневый подход к разработке средств сетевого взаимодействия В компьютерных сетях идеологической основой стандартизации является многоуровневый подход к разработке средств сетевого взаимодействия. Именно на основе этого подхода была разработана стандартная семиуровневая модель взаимодействия открытых систем ставшая своего рода универсальным языком сетевых специалистов.