Серверные сценарии php примеры

Статья является справочным материалом по основным командам PHP и MySQL, используемых в данном учебном курсе

Скачать материалы к учебному курсу:

Скачать Notepad++ Portable

Скачать Denwer3 (версия p5.3.13_m5.5.25_pma3.5.1)

Скачать папку CD_php для изучения курса «Уроки PHP и MySQL» (692 Кб)


Уроки PHP и MySQL. Урок 4. Введение и приложения

Введение

Web – это клиент-серверная среда. Технологии Web-программирования можно разделить на две основные группы: программирование на стороне клиента и на стороне сервера. Клиентские технологии объединяют то, что может быть исполнено непосредственно в браузере (HTML, CSS, JavaScript).

Для разработки клиентской части Web-сайта достаточно иметь текстовый редактор и браузер.

Для разработки серверной части Web-приложения инструментов понадобится значительно больше.

Серверное web-приложение может быть написано практически на любом языке, который поддерживается на сервере. Кроме того, существует технология серверного программирования, называемая «серверными скриптами» или «сценариями на стороне сервера». Эта технология позволяет включать программный код непосредственно в web-страницы. В качестве инструмента реализации серверной части сайта будем использовать язык программирования PHP. Этот язык разработан специально для Web.

Одно из самых важных свойств инструмента разработчика — наличие доступа к базам данных. PHP обладает встроенной возможностью подключения ко многим системам управления базами данных. Для каждой из поддерживаемых баз данных в PHP есть свой набор функций.

Базовый комплекс инструментария web-разработчика включает в себя web-браузер, web-сервер, сценарный механизм и сервер баз данных:

Уроки PHP и MySQL

Типичная транзакция базы данных для Web состоит, соответственно, из следующих этапов:

1. Web-браузер пользователя отправляет HTTP-запрос определенной web-страницы. (Например, запрос на поиск в базе данных рыжего кота). Страница с результатами запроса пусть называется result.php.

2. Web-сервер принимает запрос на генерирование страницы result.php, извлекает файл и передает его на обработку механизму PHP.

3. Механизм PHP начинает синтаксический анализ сценария. Сценарий содержит команду подключения к базе данных и выполнения запроса (на поиск кошки). PHP открывает соединение с сервером MySQL и отправляет ему соответствующий запрос.

4. Сервер MySQL принимает запрос базы данных, обрабатывает его, а затем отправляет результаты – в данном случае, список рыжих котов – обратно механизму PHP.

5. Механизм PHP завершает выполнение сценария, что обычно сопряжено с форматированием результатов запроса в виде HTML, после чего возвращает результаты в HTML-формате web-серверу.

6. Web-сервер пересылает браузеру HTML-страницу, в которой пользователь может посмотреть сформированный список.

Программное обеспечение web-сервера, механизм PHP, и сервер баз данных могут действовать на одном компьютере. Но достаточно часто сервер баз данных работает на другом компьютере. Это может быть обусловлено соображениями безопасности, или более эффективного распределения нагрузки.

Несмотря на то, что для каждой базы данных есть свой набор функций, существует типичная модель работы с базой данных. В данном уроке PHP и MySQL в следующем примере приведен псевдокод, иллюстрирующий алгоритм поиска и чтения данных из некоторой базы.

<?php
Подключение к СУБД()
Выбор таблицы()
Инструкции_SQL()
Чтение результатов()
While   (есть записи)
(чтение записи)
Отключение от СУБД()
?>

Чтобы нам можно было работать дальше, нужно иметь доступ к web-серверу с установленной на нем поддержкой PHP и доступ к MySQL-серверу.

Мы с Вами будем использовать для работы так называемый Джентльменский набор web-разработчика Apache+MySQL+PHP и отлаживать приложения, используя свой компьютер в режиме сервера. Этот набор представляет автоматически настраивающийся комплекс программ и серверов, предназначенный для разработки сайтов в Windows с расчетом использования их в Unix. Вместо того, чтобы настраивать отдельно Apache, PHP и т.д. по различным руководствам, рекомендуется воспользоваться этим проектом. Базовый пакет Денвера имеет размер 5-6 МБ. Его можно скачать по адресу http://www.denwer.ru/. Там же — подробная инструкция по установке и использованию.

Приложение 1

Справочник по синтаксису PHP

В наших уроках PHP и MySQL вы должны внимательно изучать примеры, запускать их, вносить в них различные изменения, анализировать результат.

Оформление PHP-сценария

Программа на языке PHP обычно вставляется в HTML-текст. Поэтому предусмотрены специальные теги для отделения PHP-текста от HTML.

<html>
<body>
<h1>Пример использования PHP в HTML-тексте</h1>
<? php
текст php-программы
?>
</body>
</html>

Если PHP-сценарий представляет собой самостоятельный модуль, он также должен начинаться с конструкции <?php и заканчиваться конструкцией ?>.

Любой файл, содержащий PHP-сценарий, имеет расширение php, независимо от того, встроен сценарий в HTML-текст или полностью написан на PHP.

Комментарии в PHP

PHP поддерживает использование однострочных и многострочных комментариев. Многострочные комментарии должны начинаться с символов /* и завершаться символами*/. Однострочные комментарии предваряются символами //. Закрывать их не нужно. Примеры комментариев приведены в листингах 1, 2,3, 4.

Типы данных в PHP

PHP поддерживает следующие типы данных: числа с плавающей точкой, целые числа, строки, массивы и объекты. Тип переменной обычно определяется тем, что в нее записано.

Переменные в PHP

В языке PHP имя переменной начинается со знака доллара ($), за которым следует собственно имя переменной. В именах переменных различаются верхний и нижний регистры. Имя переменной должно начинаться с буквы или символа подчеркивания, за которыми могут следовать буквы, цифры или знаки подчеркивания. Буквы должны быть из диапазона A—Z.

Область действия переменных

Термин область действия переменной означает область, из любого места которой видна эта переменная. В PHP используются следующие основные типы областей действия:

1. Встроенные суперглобальные переменные, которые видны из любого места сценария.

2. Глобальные переменные, объявленные в сценарии, которые видны в любом месте сценария, но не внутри функций.

3. Переменные, использованные внутри функций. Они являются локальными по отношению к этой функции.

Отметим некоторые из суперглобальных переменных:

1. $_GET — массив переменных, переданных в сценарий посредством метода GET.

2. $_POST — массив переменных, переданных в сценарий посредством метода POST.

3. $_REQUEST — массив всех переменных, вводимых пользователем.

PHP-операторы

Действия, которые должен выполнить php-интерпретатор, задаются php-операторами, помещаемыми

между специальными тегами:

<?php
print ("Пример оператора");
?>

В конце каждого оператора php обязательно ставится точка с запятой!

Функции в PHP

PHP имеет обширную библиотеку функций, которые можно использовать при разработке Web-приложений. Формат вызова функции: function(). Большинству функций нужно передавать некоторые данные, чтобы они возвращали соответствующие данные в качестве результатов. Например, для вывода строк в окне броузера мы будем использовать функцию print(), которой в качестве параметра передается строка для вывода:

<?php
print ("Пример функции");
?>

PHP обеспечивает поддержку многих баз данных. Для каждой из поддерживаемых баз данных в PHP есть свой набор функций. Функции для работы с MySQL имеют префикс mysql_ (приложение 2).

Технология создания серверного сценария

Мы еще не обсуждали технологию создания серверного сценария, размещение его на сервере и процедуру запуска. Важно помнить, что эти программы выполняются под управлением сервера. Их бесполезно запускать на клиентской машине. Этапы:

1. Откройте текстовый редактор (лучше Блокнот).

2. Наберите текст php-сценария.

3. Сохраните файл с расширением php.

4. Запустите FTP-клиент.

5. Скопируйте созданный php-файл на Web-сервер в свой каталог.

6. Запустите браузер.

7. Наберите адрес вашего сценария в адресной строке браузера (с учетом регистра).

Возможно, что при запуске php-сценария обнаружатся ошибки. Тогда вам придется отредактировать программу. Действия те же.

Маленький секрет: Вообще-то нельзя, но если очень надо… Можно редактировать код прямо на сервере, пользуюсь услугами встроенного редактора FTP-клиента. В таком случае нужно почаще сохраняться, поскольку сеанс связи с сервером весьма короткий (примерно 3 минуты).

Приложение 2

Алфавитный справочник по функциям PHP

mysql_close()

Закрывает соединение с MySQL-сервером., связанным с заданным идентификатором ссылки. Если аргумент функции не задан, то используется последняя открытая ссылка.

Пример:

<?php
$link=mysql_connect ("194.226.238.70", "name", "");
mysql_close($link);
?>

mysql_connect ($host, $user, $password)

Устанавливает связь с MySQL-сервером. Функция имеет следующие необязательные параметры: $host — имя узла, на котором размещен сервер MySQL, $user — имя пользователя для входа на сервер и $password — пароль. По умолчанию приняты следующие установки: $host=’localhost’, $username=имя пользователя, под которым запущен процесс PHP, $password=пустой пароль.

В случае успешного соединения функция возвращает идентификатор связи с базой данных, в случае неудачи — значение false.

Пример:

<?php
$link=mysql_connect ("194.226.238.70", "name", "");
if (!$link)
print ("Нет соединения");
else
print ("Соединение установлено");
mysql_close();
?>

mysql_fetch_array()

Получение результатов запроса. Возвращает массив, который соответствует выбранной строке, или false, если больше строк не существует. Это расширенная версия функции mysql_fetch_row. Кроме сохранения данных в числовых индексах массива результатов она также сохраняет данные в ассоциативных индексах, используя имена полей как ключи. Подразумевает выборку одной строки за один раз.

Пример:

<?php
//Предварительно определяются используемые переменные.
$query="select * from $usertable";
$result=mysql_query($query);
while ($row=mysql_fetch_array ($result))
{
print ($row['name']); //Вывод из всех записей значения выбранного поля
}
mysql_close();
?>

mysql_fetch_row()

Получение результатов запроса. Возвращает массив, который соответствует выбранной строке, или false, если больше строк не существует. Выбирает одну строку данных из результата, связанного с заданным идентификатором результата. Строка возвращается как нумерованный массив. Каждый столбец результата сохраняется в смещении массива, начиная со смещения 0. Последующий запрос функции mysql_fetch_row() возвращает следующую строку в результирующем множестве. Подразумевает выборку одной строки за один раз.

Пример:

<?php
//Предварительно определяются используемые переменные
$query="select * from $usertable";
$result=mysql_query($query);
while ($row=mysql_fetch_row ($result))
{
print ($row[0]); //Вывод из всех записей значения выбранного поля (первого в таблице)
}
mysql_close();
?>

mysql isset($var)

Предназначена для проверки состояния переменных. Возвращает true, если переменная $var существует, и false в противном случае. Эта функция может оказаться полезной, чтобы проверить, заполнил ли пользователь соответствующие поля формы.

Пример:

<?php
$var="test";
if(isset ($var))
print ("переменная существует");
else
print ("Переменная не определена");
?>

mysql_num_rows()

Получение результатов запроса. Функция сообщает количество строк, возвращенных запросом. Ей следует передать идентификатор результата. Если планируется отображать результаты, знание количества строк позволит организовать цикл.

Пример:

<?php
//Предварительно определяются используемые переменные
mysql_connect ($hostname, $username, $password) or die ("Нет"); // Соединяемся с сервером
mysql_select_db ($dbname); // Выбираем базу данных
$query="select * from $usertable"; 

// Формируем запрос
$result=mysql_query ($query); // Выполняем запрос с сохранением результата
$number=mysql_num_rows ($result); // Определяем количество строк в результате запроса
print ("Количество строк=$number"); 

// Выводим результат
$number=mysql_num_rows ($result)
for ($i=0; $i<$number; $i++) //Обработка результатов
}
?>

Чтение результатов запроса осуществляется с использованием один из видов цикла в PHP — например, цикла FOR. Основная структура цикла:

FOR(выражение1; условие; выражение2) выражение3;

Выражение1 устанавливает начальное значение счетчика цикла.

Выражение условие проверяется перед каждой итерацией. Если это выражение возвращает значение false, итерация прекращается. Обычно в нем значение счетчика сравнивается с предельным значением.

Выражение2 выполняется в конце каждой итерации. Обычно в нем меняется значение счетчика.

Выражение3 выполняется один раз во время каждой итерации. Обычно это выражение содержит собственно тело цикла.

mysql_query($query)

Отсылает запрос на сервер к текущей базе данных. Строка запроса не должна оканчиваться точкой с запятой. При успешном выполнении запросов SELECT, SHOW, EXPLAIN, DESCRIBE функция возвращает идентификатор результата, который следует сохранить, в случае неудачи — значение false. С помощью идентификатора результата можно получить результат запроса. (Идентификатор результата — это ключ доступа к возвращенным запросом строкам, которых может быть ноль, одна и более). Для запросов DELETE, INSERT, REPLACE, UPDATE функция возвращает значение true или false.

Пример:

<?php
$query="insert into dog (poroda) values ('доберман')";
$result=mysql_query($query);
?>

mysql_result()

Получение доступа к отдельному полю результата запроса. Для этого необходимо указать номер строки (от нуля до количества строк минус 1) и имя поля.

Пример:

<?php

//Предварительно определяются используемые переменные
$query="select * from $usertable";
$result=mysql_query($query);
$number=mysql_num_rows($result);
$i=0;
while ($i < $number){
print (mysql_result($result, $i, "name"));

//Вывод из всех записей значения выбранного поля
$i++;
}
mysql_close();
?>

mysql_select_db($dbname)

Устанавливает текущую активную базу данных на сервере. Возвращает true в случае успеха, false в случае ошибки.

Пример:

<?php
$dbname="library";
mysql_select_db($library);
?>

print (arg)

Выводит на печать аргумент arg.

Пример:

<?php 
print ("Привет"); //Привет 
$fi="Факультет информатики";
print ("Привет, $fi"); //Привет, Факультет информатики
?>

Серверные сценарии

В этом разделе сайта будут рассмотрены основные принципы и примеры создания серверных сценариев на языке РНР для решения типичных задач разработки веб-сайтов.

Здесь мы рассмотрим каким образом можно модифицировать содержимое веб-страниц и осуществлять навигацию при помощи ссылок и различных стандартных функций.

Простые ссылки

По ссылкам пользователь может переходить как на обычные страницы HTML, так и на страницы, содержащие код РНР.

Пример:

<?php

$link="../phppage20.php";

echo "<a href='$link'>Дата и время</a>";

?>

Для быстрого вывода списка ссылок в браузере можно воспользоваться массивом:

<?php

// Создать массив разделов

$cont=array("../phppage1", "../phppage2", "../phppage3", "../phppage4");
// Перебрать и последовательно вывести каждый элемент массива

for($i=0; $i<count($cont); $i++)

print " <a href = '$cont[$i].php'>$cont[$i]</a><br>n";

?>

В окне веб-браузера это будет выглядеть ТАК.

Шаблоны

Шаблоном (применительно к веб-программированию) называется часть веб-документа, которую вы собираетесь использовать в нескольких страницах. Шаблоны, как и функции РНР, избавляют вас от лишнего копирования/вставки фрагментов содержания страницы и программного кода. С увеличением масштабов сайта значение шаблонов возрастает, поскольку они позволяют легко и быстро проводить модификации на уровне целого сайта. В этом разделе будут описаны некоторые возможности, которые открываются при использовании простейших шаблонов.

Как правило, общие фрагменты содержания/кода (то есть шаблоны) сохраняются в отдельных файлах. При построении веб-документа вы просто «включаете» эти файлы в соответствующие места страницы.

Включение одного или нескольких файлов в сценарий осуществляется стандартными функциями РНР require() и include().

Функции для включения файлов в сценарии РНР:

  • include(имя_файла) — включает содержимое файла в сценарий.
  • У функции include() есть одна интересная особенность — ее можно выполнять условно. Например, если вызов функции включен в блок команды if то файл включается в программу лишь в том случае, если условие if истинно. Если функция include() используется в условной команде, то она должна быть заключена в фигурные скобки или в альтернативные ограничители.

    Пример:

    <?php

    if (some_conditional) {
    include("2.php");

    }

    else {
    include("1.html");

    }

    ?>

    В окне веб-браузера это будет выглядеть ТАК.

  • include_once(имя_файла) — делает то же, что и include(), за одним исключением: прежде чем включать файл в программу, она проверяет, не был ли он включен ранее. Если файл уже был включен, вызов include_once() игнорируется, а если нет — происходит стандартное включение файла. Во всем остальном include_once() ничем не отличается от include().
  • require(имя_файла) — похожа на include() — она тоже включает шаблон в тот файл, в котором находится вызов require().
    Тем не менее, между функциями require() и include() существует одно важное различие. Файл, определяемый параметром require(), включается в сценарий независимо от местонахождения require() в сценарии. Например, при вызове requiге() в блоке if при ложном условии файл все равно будет включен в сценарий!
  • Во многих ситуациях бывает удобно создать файл с переменными и другой информацией, которая используется в масштабах сайта, и затем подключать его по мере необходимости. Имя этого файла выбирается произвольно. Назовем его 80.php.

    Пример:

    <?php

    $site_title = "Основы РНР";

    $contact_email =

    "sevidi@yndex.ru";

    $contact_name =

    "Sevidi";

    ?>

    Пример использования этого файла:

    <?php require('80.php ');?>

    <html>

    <head>

    <meta charset="utf-8">

    <title><? print $site_title; ?></title>

    </head>

    <body>

    <?php

    print

    "Добро пожаловать на сайт. Контакты: <a href = mailto:$contact_email; > $contact_name</a>.";

    ?>

    </body>

    </html>

    В окне веб-браузера это будет выглядеть ТАК.

    С увеличением размеров сайта может оказаться, что некоторые файлы включаются в сценарий по несколько раз. Иногда это не вызывает проблем, но в некоторых случаях повторное включение файла приводит к сбросу значений изменившихся переменных. Если во включаемом файле определяются функции, могут возникнуть конфликты имен. Учитывая сказанное, мы приходим к следующей функции — require_once().

  • require_once(имя_сайта) — гарантирует, что файл будет включаться в сценарий всего один раз. После вызова requirе_оnсе() все дальнейшие попытки включения того же файла игнорируются. Если не считать дополнительной проверки, в остальном эта функция аналогична require().

Построение компонентов

Как правило, в большинстве правильно организованных веб-сайтов присутствует заголовок, который практически не изменяется; в основной части выводится запрашиваемое содержание сайта, поэтому она часто изменяется; наконец, колонтитул содержит информацию об авторских правах и навигационные ссылки. Колонтитул, как и заголовок, обычно остается неизменным.

Создадим файл-заголовок.

<?

// Файл: 228.php

// Назначение: заголовочный файл для сайта sevidi

// Дата: 28 января 2009 г.

//////////////////////////////////////////////////////////////////////

$site_name = "Основы РНР";

$site_title = "Динамическое создание страниц";

$site_email= "sevidi@yndex.ru";

$site_path = "..";

?>

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title><? print $site_title; ?></title>

<style type="text/css">

<!--

table{font-size:14px;

font-family:Verdana, Geneva, sans-serif;

color:#000000;

}

h1{ font-size:18px;

color: #CC0000;

text-align:center

}

.bottom{ font-size:12px; color:#0000FF}

-->

</style>

</head>

<body>

<table width="950" border="1" cellpadding="5" >

<tr>

<td valign="top" bgcolor="#3300FF">

<h1><?php print $site_name?></h1></td>

</tr>

<tr>

<td valign=

"top">

<?php

// Вывести текущую дату и время

print date ("F d, h:i a");

?>

</td>

</tr>

</table>

А теперь создадим файл-колонтитул. Колонтитулом обычно называется информация, расположенная в нижней части страниц сайта, — контактные данные, ссылки и информация об авторских правах. Эту информацию можно разместить в отдельном файле и включать в качестве шаблона так же, как это делается с заголовком. Допустим, c наступлением нового года вам потребовалось изменить информацию об авторских правах и привести ее к виду «Copyright © 2000-2001».

<table width="950" border="1" cellpadding="5" >

<tr>

<td valign="top" align="left"><span class="bottom">© Смирнов В.И.  2008-2009</span>| <a href = "mailto:<?=$site_email;?>" target="_blank">Контакты </a>|<a href =

"<?=$site_path;?>/phpstage24.html" target="_blank">Основы РНР</a></td>

</tr>

</table>

</body>

</html>

Создаем основную часть файла. К основной части страницы подключается содержимое заголовка и колонтитула. В сущности, именно основная часть содержит информацию, интересующую посетителей сайта. Заголовок эффектно выглядит, колонтитул содержит полезные сведения, но именно ради основной части страницы пользователи снова и снова возвращаются на сайт.

<table width="950" border="1" cellpadding="5">

<tr>

<td valign="top">

<a href = "<?=$site_path;?>/phppage4.php">Пример PHP-программы</a> <br>

<a href = "<?=$site_path;?>/phppage5.php">Типы данных</a> <br>

<a href = "<?=$site_path;?>/phppage6.php">Переменные, константы,

выражения</a> <br>

<a href = "<?=$site_path;?>/phppage7.php">Ссылочные переменные</a> <br>

<a href = "<?=$site_path;?>/phppage8.php">Выражения</a> <br>

</td>

</tr>

</table>

А теперь соединим все вместе в один файл

<?php

// Файл: 85.php

// Назначение: домашняя страница

// Дата: 28 января 2009 г

// Вывести заголовок

include ("82.php");

// Вывести основную часть

include ("84.php");

// Вывести колонтитул

include ("83.php");

?>

В окне веб-браузера это будет выглядеть ТАК.

читайте также по теме: Управляемый сайт

Приведённый здесь текст был написан мной на заре моего знакомства с программированием для web, когда я постигал азы CGI-интерфейса.
Можеть быть, для вас будет более интересен другой материал — «Управляемый сайт».

Для того чтобы создать свою страничку в глобальной сети сейчас достаточно приложить совсем немного собственных усилий, но чтобы «родной уголок» не выглядел набором «мертвых» статических HTML-документов, приходится использовать различные «динамические» технологии.
Часть из них позволяет «оживить» HTML-документ в окне браузера пользователя (Gif89a, DHTML, JavaScript, VBScript, Flash, Java).
Другая группа позволяет разработать «думающий» сайт, используя возможности сервера (CGI-приложения, SSI, PHP, ASP, Perl).
Рассмотрим на небольшом примере возможности динамической генерации HTML-документов на стороне сервера с помощью сценариев PHP и ASP.

Существует много способов для создания динамических HTML-страниц, но страницы, формируемые с помощью серверных сценариев, имеют несколько неоспоримых преимуществ.
По сравнению, например, со сценариями JavaScript или VBScript, которые не могут сохранять свое состояние (кроме как в «ключиках» клиентского браузера), серверные сценарии могут использовать ресурсы самого сервера для сохранения своего состояния или других данных.
Кроме того, так как сценарии выполняются на стороне сервера, их не надо передавать по сети, и скорость выполнения таких сценариев не зависит от возможностей клиентской машины.

Гостевая книга

Типичным примером взаимодействия личного сетевого HTTP-узла является функционирование так называемой гостевой книги.
Попробуем на этом примере рассмотреть и сравнить два вида сценариев PHP и ASP, применяемых на популярных web-серверах Apache и IIS соответственно.

Первая задача, которую необходимо решить, как передать и сохранить на сервере текст сообщения, посылаемый посетителем сетевого узла.
В таких случаях вполне подходит CGI (Common Gateway Interface) механизм передачи параметров от пользователя к серверу.
По спецификации CGI чтобы передать параметры приложению на сервере, надо либо разместить их в строке адреса URL (метод get), либо в самом HTTP-заголовке в виде переменных окружения (метод post).
То есть, если в HTML-документе имеется форма с текстовыми полями ввода, то после нажатия на кнопку отправки запроса имеем:

Метод get Метод post
HTML-документ
 action="myscript" method="get">
   type="text" name="Var1" value="Alex">
   type="text" name="Var2" value="Hello">
  ...
 action="myscript" method="post">
   type="text" name="Var1" value="Alex">
   type="text" name="Var2" value="Hello">
  ...
приложение на стороне сервера
Сформированная строка адреса запроса:
myscript?Var1=Alex&Var2=Hello
Командная строка вызова CGI-приложения:
myscript Var1=Alex Var2=Hello
Таким образом, приложение myscript получит при вызове два параметра в командной строке Var1=Alex и Var2=Hello, из которых и сможет получить необходимые значения полей ввода Var1 и Var2.
Сформированная строка адреса запроса:
myscript
Переменные окружения в HTTP-заголовке
Var1=Alex
Var2=Hello

Таким образом, для доступа к значениям полей ввода приложению myscript необходимо выбрать значения у переменных окружения Var1 и Var2.

Отсюда сразу видно, что для передачи длинных строк более удобен метод post, так как ограничения на длину строки адреса запроса не актуальны.
Зато метод get прост для передачи параметров при простом переходе по ссылке в HTML-документе и не требует наличия в документе формы с кнопкой отправки запроса.

Итак, в гостевой книге сообщение может иметь достаточно большую длину, поэтому будем использовать метод post.
Допустим, у нас имеется следующая форма:

Допустим, PHP сценарий добавления новой записи называется addsign.php, а ASP — addsign.asp.
Чтобы сообщения сохранялись на сервере, можно воспользоваться возможностью управления файлами на сервере.
Так, для каждого сообщения можно создавать отдельный текстовый файл, содержащий его тело.
Для удобства перечисления можно использовать числовое имя файла, а общее количество сообщений хранить в отдельном файле.
Перечислим необходимые функции и методы соответственно:

PHP ASP
Открытие текстового файла
integer fopen ( string Filename, string Ftatus )
Возвращает номер дескриптора открытого файла
Filename — имя открываемого файла
Status — вариант доступа к файлу, может принимать одно из следующих значений:
«r» — открыть для чтения
«w» — открыть для записи
«w+» — открыть для чтения и записи
Для начала надо создать объект файловой системы с помощью функции:
object CreateObject ( «Scripting.FileSystemObject» )
Возвращает объект файловой системы
Далее можно получить объект текстового файла с помощью метода объекта файловой системы:
object filesystem.OpenTextFile ( str Filename, int Status )
Возвращает объект, инкапсулирующий работу с текстовым файлом.
Filename — имя открываемого файла
Status — вариант доступа к файлу, может принимать одно из следующих значений:
1 — открыть для чтения
2 — открыть для записи
8 — открыть для чтения и записи
Чтение строки из текстового файла
string fgets ( integer FileDescriptor, integer StringLength );
Возвращает строку длины StringLength, считанную из открытого файла с дескриптором FileDescriptor.
str file.ReadLine
Возвращает строку, считанную из ассоциированного с объектом file открытого файла.
Запись строки в текстовый файл
fwrite ( integer FileDescriptor, string String, integer StringLength );
Записывает в открытый с дескриптором FileDescriptor файл StringLength символов строки String.
file.WriteLine str String
Записывает строку String в открытый файл, ассоциированный с объектом file.
Закрытие файла
fclose ( integer FileDescriptor );
Закрывает открытый с дескриптором FileDescriptor файл.
file.Close
Закрывает ассоциированный с объектом file открытый файл.
Доступ к переменным окружения
string getenv ( string EnvVariable );
Возвращает содержимое EnvVariable переменной окружения.
При запуске сценария переменные окружения автоматически отображаются в одноименные внутренние переменные PHP сценария.
str Request.ServerVariables ( str EnvVariable )
Возвращает содержимое EnvVariable переменной окружения.
Доступ к параметрам командной строки
При запуске сценария парметры командной строки автоматически отображаются в одноименные внутренние переменные PHP сценария. str Request.QueryString ( str ParamVariable )
Возвращает содержимое ParamVariable параметра командной строки.

Теперь код сценариев добавления новой записи. Будем считать, что через 1000 обращений новые сообщения начнут перезаписываться поверх старых, чтобы не переполнять дисковое пространство:

addsign.php addsign.asp
Получение значения переменных окружения
  set file = fs.OpenTextFile ("msgqty.txt", 2)
  file.WriteLine ( MsgQty )
  file.Close
%>;

А теперь код сценариев просмотра записей гостевой книги:

guestbook.php guestbook.asp
Получение текущего числа сообщений из файла «msgqty.txt»
  for i = MsgQty to 1 step -1
    ' Read messages
    FName = "msg" + CStr(i) + ".txt"
    set file = fs.OpenTextFile (FName, 1)
    str = file.ReadLine
    while not file.AtEndOfStream
      str = file.ReadLine
      Response.Write str
    wend
    Response.Write "
"
next %>

Очевидно, что при большом количестве сообщений пользователю придется долго ждать окончания загрузки страницы, поэтому имеет смысл гостевую книгу «разбить на страницы».
Для этого хорошо подходит передача параметров методом get, так как можно с помощью обычной гиперссылки передавать номер сообщения, с которого надо начать показ.
Например, до показа сообщений вывести строчку вида Следующие сообщения..., а в самом начале анализировать строку запроса на присутствие параметра start, и если он задан выдать соответствующую «порцию» сообщений.

Остальные модернизации «гостевой книги» ограничиваются только вашей фантазией. Удачи!

30 июля 2000—11 августа 2000

Максим Проскурня

Примеры

Пример #1 Пример использования сокетов: Простой сервер TCP/IP

Этот пример показывает работу простого сервера. Измените
переменные address и port
в соответствии с вашими настройками и выполните. Затем вы можете соединиться с
сервером с командой, похожей на: telnet 192.168.1.53
10000
(где адрес и порт должны соответствовать вашим
настройкам). Всё, что вы наберёте на клавиатуре, будет затем выведено на сервере
и отправлено вам обратно. Для отключения наберите ‘выход’.


#!/usr/local/bin/php -q
<?php
error_reporting
(E_ALL);/* Позволяет скрипту ожидать соединения бесконечно. */
set_time_limit(0);/* Включает скрытое очищение вывода так, что мы видим данные
* как только они появляются. */
ob_implicit_flush();$address = '192.168.1.53';
$port = 10000;

if ((

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo
"Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "n";
}

if (

socket_bind($sock, $address, $port) === false) {
echo
"Не удалось выполнить socket_bind(): причина: " . socket_strerror(socket_last_error($sock)) . "n";
}

if (

socket_listen($sock, 5) === false) {
echo
"Не удалось выполнить socket_listen(): причина: " . socket_strerror(socket_last_error($sock)) . "n";
}

do {
if ((

$msgsock = socket_accept($sock)) === false) {
echo
"Не удалось выполнить socket_accept(): причина: " . socket_strerror(socket_last_error($sock)) . "n";
break;
}
/* Отправляем инструкции. */
$msg = "nДобро пожаловать на тестовый сервер PHP. n" .
"Чтобы отключиться, наберите 'выход'. Чтобы выключить сервер, наберите 'выключение'.n";
socket_write($msgsock, $msg, strlen($msg));

do {
if (

false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo
"Не удалось выполнить socket_read(): причина: " . socket_strerror(socket_last_error($msgsock)) . "n";
break
2;
}
if (!
$buf = trim($buf)) {
continue;
}
if (
$buf == 'выход') {
break;
}
if (
$buf == 'выключение') {
socket_close($msgsock);
break
2;
}
$talkback = "PHP: Вы сказали '$buf'.n";
socket_write($msgsock, $talkback, strlen($talkback));
echo
"$bufn";
} while (
true);
socket_close($msgsock);
} while (
true);socket_close($sock);
?>

Пример #2 Пример использования сокетов: Простой клиент TCP/IP

Этот пример показывает использование простого одноразового HTTP-клиента. Он просто
соединяется со страницей, отправляет запрос HEAD, выводит ответ
и завершает работу.


<?php
error_reporting
(E_ALL);

echo

"<h2>Соединение TCP/IP</h2>n";/* Получаем порт сервиса WWW. */
$service_port = getservbyname('www', 'tcp');/* Получаем IP-адрес целевого хоста. */
$address = gethostbyname('www.example.com');/* Создаём сокет TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (
$socket === false) {
echo
"Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "n";
} else {
echo
"OK.n";
}

echo

"Пытаемся соединиться с '$address' на порту '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if (
$result === false) {
echo
"Не удалось выполнить socket_connect().nПричина: ($result) " . socket_strerror(socket_last_error($socket)) . "n";
} else {
echo
"OK.n";
}
$in = "HEAD / HTTP/1.1rn";
$in .= "Host: www.example.comrn";
$in .= "Connection: Closernrn";
$out = '';

echo

"Отправляем HTTP-запрос HEAD...";
socket_write($socket, $in, strlen($in));
echo
"OK.n";

echo

"Читаем ответ:nn";
while (
$out = socket_read($socket, 2048)) {
echo
$out;
}

echo

"Закрываем сокет...";
socket_close($socket);
echo
"OK.nn";
?>

javier,javiern at gmail dot com

10 years ago


You can easily extend the first example to handle any number of connections instead of jsut one

#!/usr/bin/env php
<?php
error_reporting
(E_ALL);/* Permitir al script esperar para conexiones. */
set_time_limit(0);/* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
* mientras llega. */
ob_implicit_flush();$address = '127.0.0.1';
$port = 10000;

if ((

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo
"socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "n";
}

if (

socket_bind($sock, $address, $port) === false) {
    echo
"socket_bind() falló: razón: " . socket_strerror(socket_last_error($sock)) . "n";
}

if (

socket_listen($sock, 5) === false) {
    echo
"socket_listen() falló: razón: " . socket_strerror(socket_last_error($sock)) . "n";
}
//clients array
$clients = array();

do {

$read = array();
   
$read[] = $sock;$read = array_merge($read,$clients);// Set up a blocking call to socket_select
   
if(socket_select($read,$write = NULL, $except = NULL, $tv_sec = 5) < 1)
    {
       
//    SocketServer::debug("Problem blocking socket_select?");
       
continue;
    }
// Handle new Connections
   
if (in_array($sock, $read)) {       

                if ((

$msgsock = socket_accept($sock)) === false) {
            echo
"socket_accept() falló: razón: " . socket_strerror(socket_last_error($sock)) . "n";
            break;
        }
       
$clients[] = $msgsock;
       
$key = array_keys($clients, $msgsock);
       
/* Enviar instrucciones. */
       
$msg = "nBienvenido al Servidor De Prueba de PHP. n" .
       
"Usted es el cliente numero: {$key[0]}n" .
       
"Para salir, escriba 'quit'. Para cerrar el servidor escriba 'shutdown'.n";
       
socket_write($msgsock, $msg, strlen($msg));

            }

// Handle Input
   
foreach ($clients as $key => $client) { // for each client       
       
if (in_array($client, $read)) {
            if (
false === ($buf = socket_read($client, 2048, PHP_NORMAL_READ))) {
                echo
"socket_read() falló: razón: " . socket_strerror(socket_last_error($client)) . "n";
                break
2;
            }
            if (!
$buf = trim($buf)) {
                continue;
            }
            if (
$buf == 'quit') {
                unset(
$clients[$key]);
               
socket_close($client);
                break;
            }
            if (
$buf == 'shutdown') {
               
socket_close($client);
                break
2;
            }
           
$talkback = "Cliente {$key}: Usted dijo '$buf'.n";
           
socket_write($client, $talkback, strlen($talkback));
            echo
"$bufn";
        }

            }       
} while (

true);socket_close($sock);
?>


Timofey Bugaevsky

1 month ago


Good example from Javier.

For using in docker container you can use 0 as an address:
$address = '0';

To broadcast a message to all clients, you can use socket_write() for all required clients:
...
    // Handle Input
    foreach ($clients as $key => $client) {
        if (in_array($client, $read)) {
            ...
            if ($buf == 'message') {
                $talkback = "$buf $keyn";
                foreach ($clients as $curClient) {
                    socket_write($curClient, $talkback, strlen($talkback));
                }
                continue;
            }
            ...
        }
    }
...


zital at riseup dot net

5 years ago


due to PHP standars modify the code to:
<?php
//...
   
$write = NULL;
   
$except = NULL;
   
$tv_sec = 5;// Set up a blocking call to socket_select
   
if(socket_select($read, $write, $except, $tv_sec) < 1)
//...
?>

PHP иногда сравнивают с заезженным рэпом, но он все еще актуален и активно развивается не только в некоторых из самых популярных CMS, но и в новейших стратегиях разработки, таких как адаптивный дизайн с компонентами серверной стороны (RESS).

Я обнаружил, что включение элементов PHP в мой процесс разработки интерфейсов делает код более продуктивным и ускоряет процесс развития проектов.

Это не отнимет много времени или сил. Вы легко сможете разобраться с азами PHP и ввести новые элементы в свой инструментарий. Давайте начнем с рассмотрения того, насколько введение в разработку интерфейса некоторых скриптов на стороне сервера может быть одновременно и простым, и полезным.

  • Приступая к работе с основами PHP
    • Создание простых шаблонов PHP
    • Обслуживание различных файлов в зависимости от страницы
    • С RESS мы можем пойти еще дальше
    • Шаблоны автоматической разметки
    • Это только верхушка айсберга

Если вы совсем недавно уже имели возможность поработать с базовыми элементами PHP, то можете сразу переходить к следующей части. Для остальных из нас это может быть хорошей возможностью немного освежить знания.

Так как PHP — это язык серверной стороны, то PHP-файлы (например, index.php или myAwesomeCatPhotos.php) преобразуются на сервере в HTML, перед тем, как быть отправленными в браузер. По этой причине вы должны размещать PHP-файлы на сервере во время работы с ними.

Это может быть либо удаленный сервер, либо локальный сервер на вашем компьютере. Настроить этот процесс на самом деле довольно просто благодаря специальному программному обеспечения, такому, например, как MAMP.

Одной из замечательных особенностей PHP является то, что вы можете смешивать его с обычным HTML в PHP-файле:

<div>
  <?php 
    echo "Привет, Мир";
  ?>
</div>

Теги определяют область файла, в которой вы используете PHP. Профессиональный совет: если вы обнаружите, что у вас выводятся пустые страницы, первым делом проверьте, не пропустили ли вы где-нибудь закрывающийся тег PHP.

Эхо-функция выводит все, что следует в разметке непосредственно за ней. В нашем случае «echo» будет выводить строку со словами «Привет Мир«. В PHP окончание оператора запятой является обязательным; пропущенная запятая являются еще одним распространенным источником ошибки в скриптах.

Этот простой PHP-код трансформируется в:

Переменные в PHP могут быть представлены в таком виде: $aWord, $manyWords, $a_lot_of_numbers, $a4 и т.д. Ключевым моментом является символ $ в начале имени переменной.

С помощью переменных мы могли бы написать приведенный выше код следующим образом:

<div>
  <?php 
    $whatDoYouSay = “Привет, Мир”;
    echo $whatDoYouSay;
  ?>
</div>

PHP также поддерживает циклы for и оператор if. Оператор if задает условие и выполняет задачу, если условие удовлетворяется.

Он может быть объединен с оператором else, который выполняет действие, если условие не удовлетворяется:

<?php
  if ($a == 7) {
    echo "Текущее значение переменной $a - 7.";
  } else {
    echo "Значение переменной $a отлично от 7, и ей должно быть стыдно за это.";
  }
?>

Если значение $a равно 7, то будет выводиться первая строка, но если $a равно чему-либо другому, например, 5, будет выводиться второй оператор.

Цикл for используется, чтобы повторять выполнение набора кодов, пока не будет выполнено некоторое условие:

<?php
  for ($d = 0; $d<7; $d++) {
    echo $d;
  }
?>

Этот код означает, что мы устанавливаем первоначальное значение переменной $d 0, и мы будем выводить значение $d до тех пор, пока оно будет меньше 7. В конце каждой итерации цикла мы будем увеличивать значение $d на единицу. Что даст нам следующий набор чисел «0123456«.

Мы также будем использовать функцию include(), которая принимает путь к другому PHP-файлу, находит файл, указанный в пути, и включает его содержимое в исходный файл.

Существует еще огромное количество элементов PHP, но эти базовые компоненты понадобятся нам во время рассмотрения темы этой статьи.

Если вы все еще чувствуете, что у вас недостаточно базовых знаний по PHP, я предлагаю продолжить чтение, а затем время от времени обращаться к специальной литературе. Встретившись с определенными понятиями в конкретном контексте, вы сможете лучше понять их.

В определенный момент времени вы можете обнаружить, что постоянно создаете разметку, которая повторяется для каждой страницы вашего проекта. Наиболее часто повторяющиеся части веб-проекта — это заголовок (шапка) сайта и подвал (футер).

Обычно если бы у нас что-то изменилось в заголовке сайта, мы должны были бы вручную отредактировать заголовок в каждом файле нашего проекта. Вот где PHP может существенно облегчить нам жизнь.

В PHP мы можем хранить разметку, связанную с заголовком нашего проекта в отдельном файле и использовать функцию include(), чтобы добавить ее код в наши файлы.

Естественно, мы можем сделать то же самое с элементом подвала и любым другим фрагментом, который вы, возможно, захотите использовать на нескольких страницах:

<?php include("includes/header.php"); ?>

<div>Основной контент этой страницы - это все, что сверх этого.</div>

<?php include("includes/footer.php"); ?>

В этом примере header.php и footer.php хранятся в папке «includes«, и на каждый из них ссылается основной файл. Представьте себе, сколько времени это может сэкономить разработчику.

Недостаток в обслуживании заголовка и подвала на каждой странице, заключается в том, что это ограничивает наши возможности гибкой настройки каждой страницы.

Например, если у нас есть файл JavaScript со слайдером изображений, который мы хотим размещать только на главной или скрипт проверки формы на странице контактов. К счастью, существует еще один простой прием, который может помочь нам в этом.

Для выполнения этого приема мне сперва нужно получить имя текущего файла и отбросить его расширение:

<?php
  $file = basename($_SERVER['PHP_SELF']);
  $pagename = str_replace(".php","",$file); 
?>

В первой строке мы получаем с сервера имя файла, а во второй отделяем расширение файла (вторая строка имеет скорее косметическое значение, чтобы сделать код немного чище, но я все равно рекомендую это).

Я, как правило, размещаю эту строку кода в самом начале своих файлов еще до открытия тега ; это позволяет мне использовать эти данные для различных элементов, например, для имен генерируемых классов.

Вторая часть этого приема заключается в том, чтобы включить в подвал страницы перед закрывающимся тегом body определение того, какие скрипты какие страницы должны обслуживать.

Мы будем использовать комбинацию операторов if/else, чтобы определить, является ли текущая страница страницей контактов. Если это так, тег скрипта ссылается на файл contact.min.js, который и будет выводиться, если нет, то мы выводим файл global.min.js:

<?php
  if ($pagename == 'contact') {
    echo '<script src="js/contact.min.js"></script>';
  } else { 
    echo '<script src="js/global.min.js"></script>';
  }
?>

Этот метод может быть использован для любых типов дополнительных файлов, который вы захотите включить. Я бы даже советовал использовать Grunt, чтобы организовывать JavaScript на странице или в разделах отдельных файлов, а затем применить эту технику.

Мы можем пойти еще дальше, и использовать подобный метод для обслуживания различных файлов в зависимости от устройств вывода. Это будет простым, но наглядным примером решения RESS.

RESS или Responsive Design with Server Side Components (Адаптивный дизайн с использованием компонентов на стороне сервера) означает, что вы добавляете немного логики на стороне сервера в ваш набор инструментов адаптивного дизайна, с целью создания таких удивительных вещей, как уменьшение объема некоторых страниц.

Для этого нам понадобится PHP-библиотека Mobile Detect, которая обеспечивает простой способ определить, какой тип устройства используют ваши посетители.

Включите библиотеку в каком-нибудь месте вашего проекта, я бы рекомендовал поместить ее в папку «scripts«, а затем включить ее через функцию require_once.

Вам также нужно будет инициировать экземпляр объекта класса Mobile_Detect, что я рекомендовал бы делать сразу после включения библиотеки в файле заголовка:

<?php
  require_once 'scripts/Mobile_Detect.php';
  $detect = new Mobile_Detect;
?>

Теперь я могу использовать, пару if/else в подвале для определения, использует ли посетитель мобильное устройство и применять ли нам соответствующий файл JavaScript.

ПРИМЕЧАНИЕ: Поскольку Mobile Detect рассматривает планшеты как мобильные устройства, я также проверяю, является ли устройство планшетом:

<?php
  if (isset($detect) && $detect->isMobile() && !$detect->isTablet()) {
    echo '<script src="js/global-mobile.min.js"></script>';
  } else{ 
    echo '<script src="js/global.min.js"></script>';
  }
?>

Используя этот метод, мы можем сделать JavaScript более подходящим для мобильных устройств и игнорировать все связанное с JavaScript, что создает дополнительную нагрузку на страницу.

Так же у вас могут быть определенные шаблоны разметки, которые не выводят одинаковый контент, однако выглядят очень похожими друг на друга. Стандартная ситуация — отображение группы изображений, которые принадлежат к тому же объекту галереи.

К счастью, Лара Шенк недавно показала замечательное решение для подобных случаев:

// Функция для вывода изображений
function printGalleryItem($path, $alt) {
  echo '<div class="gallery__item">';
    echo '<img src="' . $path . '" alt="' . $alt . '">';
  echo '</div>';
}

// Циклы для обработки папки с изображениями и разметка printGalleryItem для каждого из них
function printGallery($dir, $alt) {
  echo '<div class="gallery">';
  $fdir = 'assets/img/galleries/' . $dir . '/*';
  foreach (glob($fdir) as $img_path) {  
    printGalleryItem($img_path, $alt);
  }
  echo '</div>';
}

В PHP, как и в других языках программирования, можно создавать собственные пользовательские функции, чтобы упростить повторное использование кода.

Первая функция printGalleryItem() принимает путь к изображению и текст для тега alt и выводит тег изображения с контейнером <div>. Вторая функция printGallery() принимает путь к папке, содержащей изображения и строку, которая используется в тегах alt изображений.

Функция сначала выводит контейнер для галереи, а затем использует версию цикла, под названием foreach, чтобы перебрать массив путей к изображениям, присвоенных функцией glob, и применяет их для нашей функции printGalleryItem().

Функция foreach оказывается очень полезной, когда вам нужно перебрать массив переменных и сверить что-то со значением каждой из них.

Существует намного больше продвинутых концепций, которые касаются примеров, приведенных мною сегодня. Однако для понимания того, что эти функции делают и как они могут помочь в процессе разработки, этого должно быть достаточно.

Хотя конечно было бы здорово, если бы вы глубже изучили функции foreach и glob, когда вам представится такая возможность. Попробуйте самостоятельно создать собственные функции, чтобы автоматизировать некоторые из элементов вашей разметки.

Существует безграничное множество возможностей, которые откроются перед вами, если вы добавите немного PHP в свой процесс разработки. Большинство из наиболее полезных фрагментов кода довольно легки для понимания. Кроме того, чем больше вы будете вникать в PHP, тем понятнее для вас станет сам язык.

Добавление логики на стороне сервера перед отправкой страницы в браузер может сэкономить вам время в процессе разработки, повысит надежность веб-приложений и даже улучшит сами веб-страницы.

Методы, описанные в этой статье, должны послужить для вас отличной отправной точкой, независимо от того являетесь ли вы новичком в PHP в принципе или просто новичком в использовании PHP именно в этом направлении.

Я настоятельно рекомендую вам стараться вникать в суть, и, конечно, никогда не бойтесь экспериментировать; сломанный код всегда может быть исправлен. И эй, в конце концов, вам просто может понравиться копаться в PHP.

На уроке будут рассмотрены преимущества использования языка PHP для создания серверных приложений

Содержание:

    • Преимущества использования РНР
    • Краткий алгоритм работы с DENWER
    • Виды встраиваемого кода
    • Операторы вывода
  • Это базовый документ PHP
    • Типы данных
    • Комментарии в PHP
    • Оператор присваивания и слияние переменных
    • Объявление констант и арифметические операции
    • Операторы присваивания и логические операторы

Преимущества использования РНР

Для начала рассмотрим положительные моменты использования языка программирования PHP

  • язык очень прост в изучении;
  • PHP поддерживается практически на всех наиболее используемых платформах и почти во всех ОС;
  • в основе языка лежат две наиболее популярные парадигмы программирования – объектная и процедурная;
  • язык — скриптовый, это означает, что РНР-код можно встраивать непосредственно в НТML-документы;
  • эффективное взаимодействие с широким спектром разнообразных баз данных, файловых систем, электронной почтой;
  • встроена поддержка достаточно большого количества современных баз данных, включены функции для работы с файловой системой.

Краткий алгоритм работы с DENWER

Для апробации результатов заданий необходимо иметь возможность работы с PHP. Мы предлагаем установить на локальной машине пакет denwer.
При работе с Denwer:

  • разместить файл index.php в каталоге: z:homelocalhostwwwваш_сайт
  • в браузере ввести: http://localhost/ваш_сайт/

Виды встраиваемого кода

  • Стиль XML (является предпочтительным стилем)
  • Сокращенный стиль (не рекомендуется)

Пример встраиваемого использования:

<html>
<head>
<title>HTML_PHP</title>
<body>

Операторы вывода

1
2
3
4
<?php
echo "Я изучаю РНР";
print "Я изучаю РНР";
?>

Синтаксис php

Рис. 1.1. Встраивание скрипта php. Синтаксис

Использование HTML-тегов внутри строк, выводимых оператором echo:

1
2
3
4
5
<?php
echo "<b>я изучаю PHP</b>";
echo "<h2>пример заголовка</h2>";
echo "<hr>";
?>

Пример:

использование тегов в php

Рис. 1.2. Пример использования тегов в коде PHP

Результат:

Типы данных

В PHP поддерживаются следующие типы данных:

Скалярные типы данных:

  • boolean (логический)
  • integer (целочисленный)
  • float (число с плавающей точкой)
  • string (строковый)

Смешанные типы:

  • array (массив)
  • object (объектный)
  • callable

Специальные типы:

  • resource
  • NULL

Примеры:

1
2
3
4
5
6
7
8
9
10
<?php
$x_bool = TRUE;   // логический
$x_str1  = "foo";  // строковый
$x_str2 = 'foo';  // строковый
$x_int = 12;     // целочисленный
 
echo gettype($x_bool); // выводит: boolean
echo gettype($x_str1);  // выводит: string
 
?>

Комментарии в PHP

1.

<?php
 
# строчный комментарий
If (!$name){echo $error;}
 
?>

2.

<?php
 
$name=""; //строчный комментарий
 
?>

3.

<?php
 
/* блочный комментарий
echo "РНР-код";
echo "снова РНР-код";
*/
 
?>

Оператор присваивания и слияние переменных

Переменные в php используются со знаком $ непосредственно перед идентификатором:

Вывод значений переменных:

echo "Я изучаю РНР";
// или
print "Я изучаю РНР";

Присваивание значений других переменных:

$test1 = $test2;
echo $a, " ", $b; 
// или
echo $a; echo " "; echo $b;

Примеры:

1
2
3
4
5
6
7
8
<?php
$first = 'text1';
$second = $first;
$first = 'new text';
 
echo "Переменная first равна $first <br>";
echo "Переменная second равна". $second;
?>

Как видно из примера, оператор присваивания в php — это знак равенства.

Результатом выполнения программы будет:

Переменная first равна new text

Переменная second равна text1

Объявление констант и арифметические операции

define("Имя","Значение", [Нечувств-сть_к_регистру]);

Объявление констант php

Рис. 1.3. Объявление констант

Пример:

<?php
define("PASSWORD","qwerty"); 
define("PI","3.14", True);
echo (PASSWORD); //выведет значение qwerty 
 
// ниже выведется «password» и предупреждение, поскольку мы ввели регистрозависимую константу
echo (password);
echo pi; //выведет 3.14, поскольку константа PI регистронезависима
?>
Обозначение операции Наименование операции Пример
+ Сложение $a + $b
- Вычитание $a - $b
* Умножение $a * $b
/ Деление $a / $b
% Остаток от деления $a % $b
++ Инкремент (увеличение значения переменной на единицу): $a++;
-- Декремент  (уменьшение значения переменной на единицу) $a--;

Операторы присваивания и логические операторы

Обозначение операции Пример
= $a = ($b = 4) +5;
($a будет равна 9, $b будет равна 4)
+= $a+=5;
(эквивалентно $a = $a + 5;)
.= $b = "Привет"; $b .= "всем";
(эквивалентно $b = $b . «всем»;)
В результате: $b=Привет всем
Обозначение операции Наименование операции Пример
&& и $a && $b
|| или $a || $b
! Если $a=True, то !$a=False и наоборот !$a

Задание php1:

  • Создайте переменную $name и присвойте ей строковое значение, содержащее Ваше имя;
  • Создайте переменную $age и присвойте ей числовое значение — Ваш возраст;
  • Выведите значения переменных на экран, каждое с новой строки.
layout title permalink

page

Знакомство с языком. Часть 1

part1.html

Знакомство с языком

Определения

Давай начнем с определения того, чем именно является PHP. Сложно в одном предложении дать полное представление об этом языке, поэтому мы опишем его следующими тремя характеристиками:

PHP — это препроцессор гипертекста (HTML)
PHP — это серверный язык программирования
PHP — это скриптовый, интерпретируемый язык программирования

Зачем нужен PHP

Поясним каждое из определений и узнаем в каких задачах будет полезен PHP.

Основная задача PHP — это оживление HTML страниц.
Обычные HTML страницы статичны.
Статичность (или неизменность) означает, что после создания такой страницы верстальщиком, она лежит на сервере (хостинге) и при каждом обращении к этой странице браузер показывает её в абсолютно неизменном виде любому пользователю сети.
Но этого не всегда достаточно.

Бывает, что мы хотим показать посетителю сайта динамическую информацию. Например:

  • курс валют
  • текущая погода
  • счетчик посещений страницы

Разумеется, средствами одного HTML решить такую задачу не получится. Здесь то нам и понадобится PHP.
PHP работает в тесной связке с веб-сервером. От веб-сервера он принимает входящий запрос, выполняет сценарий и отдает результат в виде готового HTML обратно серверу. Сервер отправляет этот результат в браузер пользователю и ты видишь готовую веб-страничку.

РНР позволяет манипулировать содержанием веб-страницы на сервере непосредственно перед тем, как
она будет отправлена браузеру. Разберемся как это работает.
PHP умеет исполнять специально написанные сценарии. В ходе такого исполнения, PHP может изменить или создать любой HTML-код. Т.е. результат исполнения сценария — это всегда динамический сформированный HTML-код. Затем этот код сервер отправляет браузеру.
Тут важно понимать, что браузер не знает как была сформирована данная страница — статично сверстана верстальщиком или динамически создана при участии PHP. Браузеру это безразлично, т.к. он всегда работает только с тем, что получил от сервера.

Давай запомним, что сценарий — это программа, которая находится на стороне сервера и запускается в ответ на запрос от браузера.

Теперь мы можем понять, почему PHP называют препроцессором гипертекста.
Когда твой браузер запрашивает страницу с адресом *.php, веб-сервер обращается к PHP, и просит его выполнить сценарий из файла по этому адресу.

Процесс выполнения сценария также называют его интерпретацией, а сам PHP — интерпретатором.

Где используется PHP

Основная сфера применения языка PHP — это веб. Веб или всемирная паутина — это сайты, которые ты каждый день посещаешь из браузера твоего компьютера или мобильного устройства. Важно понимать, что веб — это не весь интернет, а только самая большая и популярная его часть. Помимо веба через интернет работает электронная почта, системы мгновенных сообщений, файлообменные сервисы, сетевые игры и многое другое.

Практически каждый сайт, который ты посещаешь, работает на PHP. Этот язык отлично подходит для любых динамических веб-сайтов, среди которых:

  • социальные сети
  • блоги и форумы
  • интернет-магазины
  • браузерные игры

Установка и использование

На нашем интенсиве мы будем работать с версией PHP 7.1

Где скачать

Мы рекомендуем использовать программную сборку OpenServer. После загрузки и установки дистрибутива у тебя на компьютере будет свежая версия PHP, веб-сервер, база данных, а также много удобных возможностей. Подробнее о процессе установки и использовании мы рассказываем на первой лекции.

Как выглядит сценарий

Типичный php-сценарий — это набор выражений. Каждое выражение начинается с новой строчки и заканчивается точкой с запятой.
Выражение — это инструкция, которая приказывает php интерпретатору выполнить одно действие, например сложить два числа или вывести на экран информацию.
Давай посмотрим как выглядит самый простой сценарий. Он будет выводить на экран одну строку: «Привет, Мир!»:
<?php print("Привет, мир");

Здесь важно отметить, что любой php-сценарий обязательно начинается с такой строки: <?php — так мы даем знать веб-серверу, что дальше пойдет код на php.
В нашем примере сценарий состоит из всего одной инструкции: print("Привет, мир");
Здесь мы просим функцию print вывести на экран наш текст — «Привет, Мир».
Это можно рассматривать как подлежащее и сказуемое в русском языке, где функция print — это сказуемое, а «Привет, Мир» — подлежащее.

Как мы уже знаем, php умеет встраиваться в статичные HTML файлы и модифицировать их с помощью инструкций. Вот как будет выглядеть тот же пример с выводом текста, но при реализации внутри HTML:

<html>
<head><title>Наша первая php страница</title></head>
<body>
<h1><?php print("Привет, мир"); ?></h1>
</body>
</html>

Обрати внимание, что в этом примере мы использовали дополнительный фрагмент — ?>.
Так мы даем серверу понять где заканчивается наш php сценарий. В случае, если наш код последний в документе и после него ничего не следует, этот фрагмент не обязателен.

Синтаксис языка

Разберемся из чего состоит любой язык программирования. Как и языки на которых мы говорим, язык программирования также строится из кирпичиков, которые, в конечном итоге, и составлют ту совокупность знаний называемую человеческим языком.
У каждого языка есть свои правила и конструкции, следуя которым мы выражаем свои мысли делаем их понятными для другого человека.
В программировании все точно также. Но вместо человеческого языка мы используем язык программирования PHP, а в роли нашего собеседника выступает PHP интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.

Переменные

Переменные — это основа любого языка программирования. Во время написания кода мы будем постоянно работать с переменными.
Понять концепцию переменных очень просто.
Переменная — это контейнер, в котором содержатся данные, так же как напиток содержится в чашке.
Любую информацию, которую мы будем использовать в коде, вначале необходимо сохранить в переменной.

У переменной обязательно должно быть имя, поэтому переменная всегда состоит из имени и значения. Значение — это любая информация, которая хранится внутри переменной.

Например, мы можем попросить посетителя нашей страницы указать свой возраст, а затем использовать это значение для других целей — узнать год рождения или показать этот возраст на самой странице.

Как работать с переменными

Любую переменную следует вначале объявить, т.е. дать ей имя и присвоить значение.
В синтаксисе языка PHP имя переменной записывается латинскими символами, но первым символом всегда должен быть знак доллара $, а затем уже идет само имя.
Не допускается начинать имя переменной с цифры, а также использовать любые значения, кроме букв алфавита и знака подчеркивания.
Примеры допустимых имен переменных:

  • $age
  • $favorite_color
  • $name2

Примеры недопустимых имен:

  • age — забыт знак доллара в начале
  • $42 — начинается с цифры
  • $my-age — содержит дефис

Присваивание

Пустая переменная не будет слишком полезна. Поэтому давай сразу что нибудь туда поместим. Такое действие называется операцией присваивания.
Вот как выглядит присваивание информации в новую переменную:
$favorite_color = "green";

Знак «равно» в PHP является оператором и всегда означает операцию присваивания.
Здесь мы записали слово «green» в переменную под именем favorite_color.
Обрати внимание: мы взяли в кавычки слово green. Кавычки всегда строго необходимы, если речь идет об использовании текста. Но если в переменную помещается не текст, а, к примеру, число, то в этом случае кавычки не нужны.
Пример:
$favorite_number = 42;

Использование

Мы научились сохранять информацию в переменных. Теперь посмотрим как получить доступ к этой информации в нашем сценарии.
Ведь когда мы пытаемся запомнить в своей голове новый телефонный номер, то делаем это не просто так, а для того чтобы на него позвонить, к примеру.
Это значит, что мы запоминаем информацию с целью вернуться к ней в дальнейшем и применить её для какого то действия — совершить звонок, написать сообщение и т.п.

Такая логика полностью работает и в программировании.
Сохранив информацию однажды, её можно использовать в дальнейшем для выполнения различных действий. Таким действием может быть вывод этой информации на экран.
Давай перепишем уже знакомый сценарий так, чтобы в нем использовались переменные.

<?php
$welcome_text = "Привет, мир";  
print($welcome_text);

Теперь этот простой сценарий состоит из двух шагов. В первом мы объявлем (инициализируем) новую переменную и помещаем туда текст.
Во втором шаге мы используем эту переменную, обращаясь к ней по имени в контексте вызова функции вывода на экран. Т.е. теперь функция print получает не текст напрямую, а переменную, которая содержит этот текст.

Конкатенация

Этим страшным словом называется операция склеивания нескольких строк в одну.
Предположим, у нас есть две уже знакомых переменных: $favorite_color и $favorite_number, а мы собираемся вывести их в одной строке, чтобы получить такой результат:

  • «Мой любимый цвет — зеленый, а любимое число — 42«

где значение цвета хранится в $favorite_color, а числа в $favorite_number».

Чтобы получить такую строку необходимо использовать оператор конкатенации — . (точка).
В качестве операндов он берет две строки или переменные, содержащие строку, а затем возвращает возвращает новую строку.
Выглядит это так:

<?php
$united_string = "Мой любимый цвет - " . $favorite_color . ", а любимое число - " . $favorite_number;
print($united_string);

Типы данных

Выше уже упоминалось, что данные, помещенные в переменную, могут быть строкой текста или числом. В действительность таких типов данных гораздо больше, но первое время мы будем работать только с несколькими. Однако нам все равно важно уже сейчас понимать что такое «типы данных».
Тип данных в языке программирования определяет допустимые значения, а также допустимые операции с данными этого типа.
Например, с данными типа «целое число» допускается выполнять арифметические операции, а с данными типа «строка» — нет. Поделить строку на строку невозможно.
Кроме того, числа могут быть только в определенных пределах (в версии PHP для 32-битной ОС, самое большое число: 2147483647), а строки обязательно должны находиться в кавычках.

Операторы

Оператором в программировании называется нечто, принимающее одно или более значений.
Например, в арифметике есть такие операторы: +, -, /, *. Что означает сложение, вычитание, деление и умножение. Оператор всегда работает только в паре с двумя значениями, например складывает два числа (операнда) или умножает их друг на друга.
PHP дополняет уже знакомые нам из арифметики операторы, несколькими новыми:

  • уже знакомый оператор присваивания =, который используется для присваивания значения переменной
  • очень полезны операторы сравнения: == != > < — равно, не равно, больше и меньше
  • % — оператор остатка от деления одного числа на другое. Например: 5 % 2 == 1; // true

Условные конструкции

Иногда, в зависимости от условия, нужно выполнять различные действия. Для этого используется оператор if.
Например, мы спросили пол посетителя нашей страницы, сохранили его в переменную, а теперь хотим вывести разное приветствие, в зависимости от того, мужчина это или женщина. Для этого пригодятся операторы if и else.

<?php
if ($gender == "мужчина") {
    print("Приветствую тебя, мой Господин!");
} else {
    print("Приветствую тебя, о Госпожа!");
}

Из примера видно, что условная конструкция состоит из трех частей:

  • условие if — выражение, которое возвращает истинный или ложный результат
  • блок if — строки кода, которые будут выполнены, если условие вернуло истину
  • блок else — строки кода, которые будут выполнены, если условие вернуло ложь

Обрати внимание, что каждый блок обрамляется и ограничивается фигурными скобками.

Выражения

Выражение в языке программирование — это минимальный блок кода, имеющий значение (результат). Звучит несколько сложно, но практике практически каждая строка сценария является выражением.
Вот несколько примеров выражений:

  • $amount = 2 + 2;
  • 2 > 3
  • $gender == "мужчина"

Важно усвоить одно главное свойство выражений — они всегда имеют результат.
Также различают два типа выражений: логические и арифметические.
Результатом выполнения логического выражение всегда будет истина или ложь.
Например, результатом выражения 2 > 3 будет «ложь», потому что два, очевидно, меньше трех.

Другим видом выражений является арифметическое выражение.
Результатом выражения $amount = 2 + 2 будет 4.

В каких случаях может понадобиться знать результат выражения?
Выражения особенно полезны в условиях, т.е. когда мы хотим выполнить или не выполнять какое-либо действие, в зависимости от результата выражения.
Выражения также можно объединять между собой таким образом, что несколько отдельных выражений в итоге вычисляются как одно.

Предположим, что на нашем сайте мы хотим показать определенную картинку только посетителям мужского пола и старше 18 лет.
Ранее в коде сценария, мы уже получили и сохранили год рождения и пол посетителя в переменные $age и $gender.
Напишем выражение и условие для реализации такого поведения:

<?php
if ($gender == "мужчина" and $age > 17) {
    print("<img src='/xxx.jpg'>");
}

Обрати внимание на ключевое слово and — это оператор, который объединяет два отдельных выражения в одно новое. Это новое выражение будет иметь значение «истина», только если оба отдельных выражений будут истинны.
Иными словами, наше условие будет выполняться только для посетителей мужского пола И возрастом старше восемнадцати.
Т.е. несовершенолетние мальчики, равно как и совершенолетние девочки никакой картинки не увидят…

Понятие алгоритма

Наверняка многие из нас что-то слышали про алгоритмы на уроках информатики в школе. К сожалению, далеко не все школьные знания остаются с нами после её окончания. Тем не менее, понимание что такое алгоритм и умение эти самые алгоритмы строить — это очень важные навыки, без которых не получится решать даже относительно простые задачи.

Если говорить простыми словами, то алгоритм — это просто очень подробный план работы. Мы все в течение жизни что нибудь планируем: отпуск, какое нибудь мероприятия, свое самостоятельное обучение и т.п.
От простого списка шагов алгоритм отличает существование условий и повторяющихся действий.
Если вы в состоянии создать хороший, подробный алгоритм для реализации, скажем, какой нибудь возможности на сайте, то можно считать, что половина дела уже сделана!

Разберем для примера один алгоритм средней сложности.
На сайт нужно добавить форму обратной связи. Пользователь может заполнить эту форму, указать там свои контактные данные и написать сообщение. Информация из заполненной формы отправляется на электронную почту владельцу сайта. Вот как будет выглядеть алгоритм для этой задачи:

  1. Показать форму
  2. Проверить, что форма отправлена
  3. Составить список полей формы, обязательных для заполнения
  4. Для каждого поля из списка проверить, что оно заполнено
  5. Если поле не заполнено, показать ошибку и не отправлять форму
  6. Если все поля заполнены, сформировать сообщение электронной почты
  7. Отправить сообщение на адрес администратора сайта

Конфигурация PHP

Большинство программ всегда имеют отдельное окно настроек, где можно указать все основные параметры этого приложения. В PHP тоже есть свои настройки, только меняются они не через интерфейс, а путем редактирования специального файла — php.ini.
В файле php.ini задаются все настройки работы PHP. Из того, что нас будет интересовать в первую очередь — это режим управления ошибками, подключение дополнительных возможностей, настройки сессий и кук.

В разных ОС этот файл находится по разным путям. Проще всего пользователям сборки OpenServer — там php.ini можно открыть из главного меню.

Технология
CGI
позволяет создавать серверные приложения
любой сложности, без ограничения
возможностей программ CGI.
Однако данная технология обладает
рядом недостатков.

  1. При
    получении данных от клиента приложению
    приходится производить сложный разбор
    строки параметров запроса. Задача
    усложняется, если в запросе присутствуют
    строки в национальной кодировке.

  2. Содержимое
    документа HTML
    формируется приложением CGI.
    При изменении дизайна приходится
    осуществлять перекомпиляцию приложения.

  3. Приложения
    CGI,
    использующие интерфейс прикладных
    программ (API)
    локальной операционной системы сервера,
    плохо переносимы.

Одним
из вариантов решения приведенных
проблем является использование
технологии PHP
для динамического формирования
документов HTML
на стороне сервера. Технология PHP
является технологией стороны сервера.
Аббревиатура PHP
раскрывается рекурсивно: «PHP:
Hypertext
Preprocessor».
Основными сферами применения данной
технологии являются создание серверных
приложений и интерфейсов к базам данных.

Приложения
PHP
встраиваются в документы HTML
в качестве сценариев, подобно сценариям
JavaScript,
однако, в отличие от JavaScript,
сценарии PHP
выполняются не пользовательским
агентом, а специальной программой –
проигрывателем сценариев PHP,
которая является приложением CGI
и запускается сервером. Пользовательский
агент получает результат выполнения
запрошенного им сценария и не видит
кода самого сценария. Документ HTML,
содержащий сценарий PHP,
как правило, имеет специальное расширение,
например, php3
или phtml.
При получении запроса такого документа
сервер выполняет следующие действия:

  1. Запрашивает
    локальную операционную систему о типе
    файла php3
    или phtml.

  2. Получив
    ответ, что данный файл является сценарием
    и путь к программе, выполняющей подобные
    сценарии, запускает проигрыватель
    сценариев, указав запрошенное
    пользователем имя файла в качестве
    параметра запуска.

  3. Проигрыватель
    сценариевPHP
    анализирует содержимое документа,
    выполняя инструкции PHP
    и передавая остальное содержимое
    клиенту без изменений.

На
рис. 3 приведено взаимодействие различных
компонентов при запросе клиентом
сценариев PHP.

Инструкции
PHP
внутри документа html
располагаются внутри специальных
скобок, состоящих из последовательностей
символов «<?» и «?>» или
«<?php»
и «?>». Можно также для включения
сценариев PHP
использовать элемент SCRIPT
с атрибутом language,
имеющим значение «php».
Текст, находящийся вне специальных
скобок, и называемый статической частью
документа, проигрывателем сценариев
PHP
не анализируется и передается клиенту
без изменений. Фактически, статическая
часть является шаблоном документа
HTML.

Синтаксис
языка сценариев PHP
похож на синтаксис языков программирования
C,
C++,
Java.
Сценарий PHP
представляет собой оператор PHP
или последовательность операторов
PHP,
разделенных символами «;».

Основными
объектами языка сценариев PHP
являются переменные, выражения, операторы
и функции.

Переменные
в PHP
не имеют типа. Тип переменной определяется
хранимым в данной переменной значением.
Тип переменной динамически изменяется
в зависимости от контекста. В PHP
различаются следующие типы:

целый
— integer;

действительный
— double;

строковый
— string;

массив
— array;

объект
— object.

Преобразование
типов осуществляется неявно, например,
при подстановке переменных в качестве
параметров функций, или явно, при
указании типа, к которому нужно
преобразовать значение переменной,
перед именем.

Переменные
различаются по именам. Имя переменной
в PHP
начинается с символа «$». Для
определения переменной нужно присвоить
ей значение при помощи операции
присваивания. Способы создания нового
значения переменной отличаются для
различных типов.

Переменной
скалярного типа (integer,
double,
string)
можно присвоить в качестве значения
соответствующую константу.

Массивы
в PHP
являются не набором переменных, а
переменными некоторого определенного
типа array.
В языке сценариев PHP
массивы ассоциативны. Это означает,
что индексом массива может являться
не только число, но и строка. Индекс
ассоциативного массива называется
ключом. Новый массив может быть создан
либо при создании элемента массива,
либо при помощи вызова array.
Для создания нового элемента массива
нужно при присваивании значения
переменной после имени указать ключ в
квадратных скобках. При этом имя
переменной будет именем созданного
массива, а значение в квадратных скобках
– ключом для получения доступа к
значению созданного элемента массива.
В PHP
массивы являются динамическими. При
присваивании значения элементу массива
проверяется, существует ли уже в массиве
элемент с заданным ключом. Если
существует, то его значение заменяется
на новое. В противном случае создается
новый элемент массива. Все элементы
массива объединены в двусвязный список.
В массиве имеется внутренний указатель
текущего элемента. Имеется возможность
просмотреть текущее значение указателя,
а также переместить указатель на
предыдущий или последующий элемент в
списке, а также на начальный или конечный
элементы списка. Таким образом, можно
осуществить последовательный доступ
к каждому элементу массива. Для элементов
массива с целочисленными ключами
ведется счетчик индексов. Значением
счетчика является увеличенное на
единицу максимальное в массиве значение
целочисленного ключа (индекса). Если
массив не содержит элементов с
целочисленными ключами, то счетчик
индексов имеет нулевое значение. Если
при присваивании значения элементу
массива не указывать ключа в квадратных
скобках, то ключом для нового элемента
будет значение счетчика индексов,
который после создания нового элемента
увеличится на единицу. Данная возможность
позволяет добавлять в конец массива
элементы с последовательными индексами.

Для
создания массива с несколькими начальными
элементами используется ключевое слово
array,
после которого в круглых скобках
перечисляются присваиваемые элементам
массива значения. В качестве ключей
элементов используется счетчик индексов.
Такое назначение ключей по умолчанию
можно изменить при помощи операции
«=>». Данная операция применяется
в следующем виде:

ключ
=> значение

Если
в списке значений array
встречается подобная операция, то
очередному элементу массива будет
присвоен указанный ключ. Данная
возможность используется для создания
массивов со строковыми ключами, а также
для пропуска значений целочисленных
ключей (индексов).

Объекты
в PHP
служат для поддержки объектного
программирования. Для создания нового
объекта используется вызов new.

Переменным
любого типа можно присваивать в качестве
значения другие переменные, а также
значения, возвращаемые функциями и
методами объектов.

В
PHP
можно создавать ссылки на переменные.
Ссылка – это имя переменной, отличное
от заданного при определении. Для
создания ссылки нужно определить
переменную, значением которой будет
имя ссылки. Если теперь присвоить
значение переменной, в которой хранится
имя ссылки, указав перед именем переменной
двойной символ «$$», то будет создана
ссылка, к которой можно обращаться по
имени как к обычной переменной. При
одновременной работе со ссылками и
массивами возникает неопределенность,
связанная с приоритетами символов «$»
и квадратных скобок. Для разрешения
данной неопределенности можно
использовать фигурные скобки как
символы явного определения приоритетов.

При
выполнении сценария PHP
интерпретатор определяет ряд переменных,
связанных с параметрами сервера,
протокола HTTP,
самого интерпретатора, а также полученным
запросом. Каждый орган управления
формы, содержащийся в документе HTML,
имеет атрибуты name
и value.
При разборе полученного от клиента
запроса интерпретатор PHP
создает переменные, именами которых
являются значения атрибутов name,
а значениями – значения атрибутов
value
соответствующих органов управления.
Это упрощает разбор форм в сценариях
PHP.

Важным
понятием языка интерпретатора PHP
является понятие выражения. Выражение
– это константа, переменная или
составленная из них при помощи операций
конструкция. Выражение может быть
составной частью более сложного
выражения. Каждое выражение имеет
значение, которое называется значением
выражения. Значением операции является
ее результат. Тип значения выражения
зависит от типов входящих в выражение
переменных и констант, а также от
операций.

Помимо
типов, которые могут иметь переменные,
значения выражений могут быть булевого
типа. Выражения булевого типа могут
принимать только значения FALSE
или TRUE.
Значения булевого типа не могут быть
присвоены переменным, но иногда
подставляются в функции и операторы.
При подстановке переменных вместо
булевых выражений происходит
преобразование типа переменной к
булевому. Для целых чисел значение
FALSE
имеет только 0, для строк – строки «»
и «0». Операции языка интерпретатора
PHP
приведены в табл. 10.

Таблица
10

Операции
PHP

Знак

Операция

Арифметические

+

Сложение

Вычитание

*

Умножение

/

Деление

%

Остаток
от деления

Строковые

.

Конкатенация
строк

Присваивание

=

Обычное
присваивание

+=

Присваивание
со сложением

–=

Присваивание
с вычитанием

*=

Присваивание
с умножением

/=

Присваивание
с делением

%=

Присваивание
с получением остатка

.=

Присваивание
с конкатенацией

Побитовые

&

Побитовое
умножение (И)

|

Побитовое
сложение (ИЛИ)

~

Побитовое
отрицание (НЕ)

Окончание
табл. 10

Знак

Операция

Логические

and

Логическое
И

or

Логическое
ИЛИ

xor

Логическое
исключающее ИЛИ

!

Логическое
отрицание

&&

Логическое
И

||

Логическое
ИЛИ

Сравнение

==

Равно

!=

Не
равно

<

Меньше

>

Больше

<=

Меньше
или равно (не больше)

>=

Больше
или равно (не меньше)

Сценарий
PHP
состоит из операторов. Помимо оператора
вычисления выражения, существует ряд
операторов, характерных для структурных
языков. Некоторые операторы PHP
имеют два синтаксиса: синтаксис языка
C
и модифицированный синтаксис для
вставки HTML-кода
внутрь операторов. В табл. 11 приведены
основные операторы PHP.
Операторы записаны с использованием
синтаксиса языка C.

Таблица
11

Операторы
PHP

Синтаксис

Оператор

if
(cond1) {…}

elseif
(cond2) {…}

else
{…}

Ветвление

while
(cond) {…}

Цикл
с предусловием (цикл ПОКА)

do
{…} while
(cond)

Цикл
с постусловием (цикл ДО)

for
(init; cond; expr) {…}

Цикл
с предусловием

break

Безусловный
переход на конец операторов while,
do
while,
for
и switch

continue

Безусловный
переход на следующий цикл

Окончание
табл. 11

Синтаксис

Оператор

switch
(var) {

case
val1: …

case
val2: …

default:

}

Выбор

function
name(parameters)

{…}

Определение
функции

return
val

Возврат
значения

Синтаксис
определения функции в интерпретаторе
PHP
отличается от синтаксиса языка C.
Функция – это набор операторов или
часть кода, выполняемая при разборе
специальной операции, называемой
вызовом функции. Для вызова функции
указывается ее имя, за которым в круглых
скобках следует набор параметров,
передаваемых функции.

Пользовательские
функции определяются при помощи
оператора function.
При определении функции указывается
ее имя и список параметров. Параметры
перечисляются через запятую. Каждый
параметр считается локальной переменной
функции. Внутри блока операторов функции
могут определяться новые переменные.
Каждая переменная, определенная на
внутреннем уровне является локальной.
Все обычные локальные переменные
создаются в стеке при каждом вызове
функции и уничтожаются после завершения.

Функции
не имеют доступа к глобальным переменным.
Для получения доступа к глобальным
переменным последняя должна быть
локально переобъявлена. Локальное
переобъявление выполняется указанием
ключевого слова global
перед именем глобальной переменной, к
которой необходимо получить доступ.

Помимо
обычных (автоматических) локальных
переменных, в функции можно определить
статические переменные, которые
создаются при определении функции и
существуют все время пока выполняется
программа. Для определения статической
переменной перед ее именем нужно указать
ключевое слово static.
Статические переменные сохраняют свое
значение после выхода из функции.

Функции
могут возвращать значения. Для этого
используется оператор return.
Тип возвращаемого значения зависит от
типа параметра оператора return.

Стандартно
параметры передаются в функцию по
значению. Это означает, что при вызове
функции для каждого параметра создается
локальная переменная, куда копируется
значение передаваемого параметра. В
PHP
имеется возможность организовать
передачу параметров функции по ссылке.
Для этого в списке параметров при
определении функции перед именем
параметра необходимо указать символ
«&». При передаче по ссылке при
вызове функции для передаваемого
параметра создается еще одно имя,
которое является именем параметра или,
что то же самое, именем локальной
переменной функции. При передаче по
ссылке у функции имеется возможность
изменять значение передаваемой
переменной. Если необходимо при некоторых
вызовах одной и той же функции передавать
параметр по значению, а при других по
ссылке, то функция должна быть определена
обычным образом. При этом при вызове
функции с передачей параметра по ссылке
следует в списке параметров перед
соответствующим параметром указать
символ «&».

Параметры
функции могут иметь значение по
умолчанию. Для указания значения
параметра по умолчанию в списке
параметров после имени параметра
ставится символ «=», за которым
следует необходимое значение. Если
какой-либо параметр имеет значение по
умолчанию, то все последующие параметры
в списке также должны иметь значения
по умолчанию. При вызове функций со
значениями параметров по умолчанию
соответствующие параметры вызова можно
опустить.

В
интерпретаторе PHP
имеются встроенные функции. Встроенные
функции определены в самом интерпретаторе
или в загружаемых модулях. В табл. 12
приведены основные встроенные функции
PHP.

Таблица
12

Встроенные
функции PHP

Функция

Описание

Математические
функции

mixed
abs(mixed x)

Абсолютное
значение аргумента x

int
ceil(double x)

Наименьшее
целое, большее x

int
floor(double number)

Наибольшее
целое, меньшее x

Продолжение
табл. 12

Функция

Описание

double
round(double x)

Округление

string
decbin(int dec)

Преобразование
десятичного числа в двоичное

string
dechex(int dec)

Преобразование
десятичного числа в шестнадцатеричное

string
decoct(int dec)

Преобразование
десятичного числа в восьмеричное

int
bindec(string bin)

Преобразование
двоичного числа в десятичное

int
hexdec(string hex)

Преобразование
шестнадцатеричного числа в десятичное

int
octdec(string oct)

Преобразование
восьмеричного числа в десятичное

int
rand([int min,

int
max])

Получить
случайное число

void
srand(int seed)

Инициализировать
генератор случайных чисел

int
getrandmax()

Получить
максимальное число, возвращаемое
rand

int
mt_rand([int min,

int
max])

Получить
случайное число

void
mt_srand(int seed)

Инициализировать
генератор случайных чисел

int
mt_getrandmax()

Максимальное
число, возвращаемое mt_rand

double
sqrt(double x)

Квадратный
корень

double
exp(double x)

Экспонента

double
pow(double x,

double
y)

xy

double
log(double x)

Натуральный
логарифм

double
log10(double x)

Десятичный
логарифм

double
pi()

double
cos(double x)

Косинус

double
sin(double x)

Синус

double
tan(double x)

Тангенс

double
acos(double x)

Арккосинус

double
asin(double x)

Арксинус

double
atan(double x)

Арктангенс

double
atan2(double y,

double
x)

Арктангенс
y/x

Обработка
строк

void
print(string str)

Вывести
строку в стандартный поток вывода

int
printf(string format,

mixed
arg, …)

Форматированный
вывод

string
sprintf(

string
format,

mixed
arg, …)

Форматировать
строку

Продолжение
табл. 12

Функция

Описание

string
addslashes(

string
str)

Экранирование
символов «$», «», «‘» и
0 в строке str

string
stripslashes(

string
str)

Удалить
экранирующие символы из строки

string
chr(int ascii)

Получить
символ с заданным кодом

int
ord(string ch)

Код
символа

string
convert_cyr_string(

string
str, string from,

string
to)

Перевод
строки из одной русскоязычной
кодировки в другую

void
parse_str(string str)

Разбить
строку запроса и создать соответствующие
переменные

Обработка
массивов

int
count(mixed arr)

Число
элементов массива

mixed
current(array arr)

Текущий
элемент массива

mixed
pos(array arr)

Псевдоним
current

array
each(array arr)

Получить
в виде массива пару ключ/значение
текущего элемента arr

mixed
key(array arr)

Ключ
текущего элемента массива

mixed
reset(array arr)

Установить
внутренний указатель массива на
начальный элемент

mixed
prev(array arr)

Переместить
указатель массива на предыдущий
элемент

mixed
next(array arr)

Переместить
указатель массива на следующий
элемент

mixed
end(array arr)

Установить
внутренний указатель массива на
последний элемент

void
sort(array arr)

Сортировка
массива

void
rsort(array arr)

Сортировка
массива в обратном порядке

void
asort(array arr)

Сортировка
ассоциативного массива array

void
arsort(array arr)

Сортировка
ассоциативного массива arr
в обратном порядке

int
ksort(array arr)

Сортировка
ассоциативного массива по ключам

Процессы

string
exec(

string
command [,

array
output [,

int
return_code]]

)

Выполнить
команду command
оболочки UNIX.
Стандартный вывод будет записан в
массив строк output,
код возврата – в переменную result_code.
Возвращается последняя строка
стандартного потока вывода

string
system(

string
cmd [, int ret])

Выполнить
команду и возвратить результат

int
chdir(string dir)

Изменить
текущий рабочий каталог

void
putenv(string str)

Установить
значение переменной окружения

Продолжение
табл. 12

Функция

Описание

string
getenv(string var)

Получить
значение переменной окружения

void
sleep(int sec)

Задержка
выполнения текущего процесса на sec
секунд

void
usleep(int us)

Задержка
выполнения текущего процесса на us
микросекунд

int
sem_get(int key

[,
int max [, int perm]])

Получить
идентификатор семафора

int
sem_acquire(int sem)

Уменьшение
счетчика семафора

int
sem_release(int sem)

Увеличение
счетчика семафора

Файлы
и каталоги

int
copy(string src,

string
dest)

Копировать
файл

int
rename(string old,

string
new)

Переименовать
файл

int
unlink(

string
filename)

Удалить
файл

int
readfile(

strinf
filename)

Прочитать
текстовый файл в стандартное устройство
вывода

array
file(string filename)

Прочитать
текстовый файл в массив строк

int
filesize(

string
filename)

Размер
файла

int
file_exists(

string
filename)

TRUE,
если
файл
существует

int
fopen(string filename,

string
mode)

Открыть
файл

string
fgetc(int fd)

Прочитать
символ из файла

string
fgets(int fd,

int
maxlen)

Прочитать
из файла строку максимальной длиной
maxlen

int
fputs(int fd, string str

[,
int length])

Записать
строку в файл

string
fread(int fp,

int
len)

Бинарное
чтение файла

int
fwrite(int fd,

string
str, int len)

Бинарная
запись в файл

int
ftell(int fd)

Текущая
позиция указателя

int
fseek(int fd, int offset)

Переместить
внутренний указатель файла

int
rewind(int fd)

Переместить
указатель файла на начало

int
feof(int fd)

TRUE,
если дескриптор fd
указывает на конец файла

int
fclose(int fd)

Закрыть
файл

int
popen(

string
command,

string
mode)

Запустить
процесс command
и возвратить дескриптор стандартного
потока ввода или стандартного потока
вывода созданного процесса

Продолжение
табл. 12

Функция

Описание

int
pclose(int fd)

Закрыть
поток, открытый popen

int
mkdir(string dir,

int
mode)

Создать
директорию

int
rmdir(string dir)

Удалить
директорию

int
opendir(string dir)

Открыть
директорию

string
readdir(int fd)

Получить
имя очередного файла в каталоге

void
rewinddir(int fd)

Переместить
указатель каталога на первый файл

void
closedir(int fd)

Закрыть
директорию

void
clearstatcache()

Очистить
файловый кэш

flush()

Очистка
буфера стандартного вывода

int
fsockopen(string host,

int
port)

Открыть
сокет

Дата
и время

int
time()

Получить
текущее время в формате UNIX

string
date(string format,

int
timestamp)

Строковое
представление локальной даты и
времени в указанном формате

string
gmdate(

string
format,

int
timestamp)

Преобразовать
дату и время GMT
в формате UNIX
в форматированную строку

array
getdate(

int
timestamp)

Преобразовать
дату и время в ассоциативный массив

int
mktime(int hour,

int
minute, int second,

int
month, int day,

int
year)

Дата
и время в формате UNIX

int
gmmktime(int hour,

int
minute, int second,

int
month, int day,

int
year)

Дата
и время GMT
в формате UNIX

TCP/IP,
HTTP, CGI, PHP

string
gethostbyname(

string
host)

Получить
IP-адрес
хоста

string
gethostbyaddr(

string
addr)

Получить
имя хоста по IP-адресу

int
header(string hdr)

Отправить
заголовок HTTP

string
htmlspecialchars(

string
str)

Преобразовать
специальные символы HTML
в строке str
в escape-последовательности

int
isset()

TRUE,
если переменная определена

void
eval(string code)

Обработка
code
в качестве вложенного сценария

void
exit()

Завершить
текущий сценарий

Окончание
табл. 12

Функция

Описание

int
phpinfo()

Вывод
информации о текущей реализации PHP

string
phpversion()

Вывод
информации о текущей версии PHP

Более
подробную информацию о встроенных
функциях языка интерпретатора PHP
можно найти в руководствах по этому
языку.

Соседние файлы в предмете Программирование для Web

  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Юморные поздравления с днем рождения женщине чтоб ржала до упада в стихах
  • Яркие поздравления с днем рождения девушке
  • Серверные сценарии cgi определение назначение ключевые особенности
  • Юморные поздравления с днем рождения директора
  • Яркие поздравления на день рождения