Скачать материалы к учебному курсу:
Скачать 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-сервер, сценарный механизм и сервер баз данных:
Типичная транзакция базы данных для 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_once(имя_файла)
— делает то же, что иinclude()
, за одним исключением: прежде чем включать файл в программу, она проверяет, не был ли он включен ранее. Если файл уже был включен, вызовinclude_once()
игнорируется, а если нет — происходит стандартное включение файла. Во всем остальномinclude_once()
ничем не отличается отinclude()
.require(имя_файла)
— похожа наinclude(
) — она тоже включает шаблон в тот файл, в котором находится вызовrequire()
.
Тем не менее, между функциямиrequire()
иinclude()
существует одно важное различие. Файл, определяемый параметромrequire()
, включается в сценарий независимо от местонахожденияrequire()
в сценарии. Например, при вызовеrequiге()
в блокеif
при ложном условии файл все равно будет включен в сценарий!require_once(имя_сайта)
— гарантирует, что файл будет включаться в сценарий всего один раз. После вызоваrequirе_оnсе()
все дальнейшие попытки включения того же файла игнорируются. Если не считать дополнительной проверки, в остальном эта функция аналогичнаrequire()
.
У функции include()
есть одна интересная особенность — ее можно выполнять условно. Например, если вызов функции включен в блок команды if
то файл включается в программу лишь в том случае, если условие if
истинно. Если функция include()
используется в условной команде, то она должна быть заключена в фигурные скобки или в альтернативные ограничители.
Пример:
<?php
if (some_conditional) {
include("2.php");
}
else {
include("1.html");
}
?>
В окне веб-браузера это будет выглядеть ТАК.
Во многих ситуациях бывает удобно создать файл с переменными и другой информацией, которая используется в масштабах сайта, и затем подключать его по мере необходимости. Имя этого файла выбирается произвольно. Назовем его 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()
.
Построение компонентов
Как правило, в большинстве правильно организованных веб-сайтов присутствует заголовок, который практически не изменяется; в основной части выводится запрашиваемое содержание сайта, поэтому она часто изменяется; наконец, колонтитул содержит информацию об авторских правах и навигационные ссылки. Колонтитул, как и заголовок, обычно остается неизменным.
Создадим файл-заголовок.
<?
// Файл: 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 Таким образом, для доступа к значениям полей ввода приложению 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 " |
Очевидно, что при большом количестве сообщений пользователю придется долго ждать окончания загрузки страницы, поэтому имеет смысл гостевую книгу «разбить на страницы».
Для этого хорошо подходит передача параметров методом get, так как можно с помощью обычной гиперссылки передавать номер сообщения, с которого надо начать показ.
Например, до показа сообщений вывести строчку вида Следующие сообщения...
, а в самом начале анализировать строку запроса на присутствие параметра start
, и если он задан выдать соответствующую «порцию» сообщений.
Остальные модернизации «гостевой книги» ограничиваются только вашей фантазией. Удачи!
30 июля 200011 августа 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 "Я изучаю РНР"; ?> |
Рис. 1.1. Встраивание скрипта php. Синтаксис
Использование HTML-тегов внутри строк, выводимых оператором echo:
1 2 3 4 5 |
<?php echo "<b>я изучаю PHP</b>"; echo "<h2>пример заголовка</h2>"; echo "<hr>"; ?> |
Пример:
Рис. 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("Имя","Значение", [Нечувств-сть_к_регистру]);Рис. 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 — это оператор, который объединяет два отдельных выражения в одно новое. Это новое выражение будет иметь значение «истина», только если оба отдельных выражений будут истинны.
Иными словами, наше условие будет выполняться только для посетителей мужского пола И возрастом старше восемнадцати.
Т.е. несовершенолетние мальчики, равно как и совершенолетние девочки никакой картинки не увидят…
Понятие алгоритма
Наверняка многие из нас что-то слышали про алгоритмы на уроках информатики в школе. К сожалению, далеко не все школьные знания остаются с нами после её окончания. Тем не менее, понимание что такое алгоритм и умение эти самые алгоритмы строить — это очень важные навыки, без которых не получится решать даже относительно простые задачи.
Если говорить простыми словами, то алгоритм — это просто очень подробный план работы. Мы все в течение жизни что нибудь планируем: отпуск, какое нибудь мероприятия, свое самостоятельное обучение и т.п.
От простого списка шагов алгоритм отличает существование условий и повторяющихся действий.
Если вы в состоянии создать хороший, подробный алгоритм для реализации, скажем, какой нибудь возможности на сайте, то можно считать, что половина дела уже сделана!
Разберем для примера один алгоритм средней сложности.
На сайт нужно добавить форму обратной связи. Пользователь может заполнить эту форму, указать там свои контактные данные и написать сообщение. Информация из заполненной формы отправляется на электронную почту владельцу сайта. Вот как будет выглядеть алгоритм для этой задачи:
- Показать форму
- Проверить, что форма отправлена
- Составить список полей формы, обязательных для заполнения
- Для каждого поля из списка проверить, что оно заполнено
- Если поле не заполнено, показать ошибку и не отправлять форму
- Если все поля заполнены, сформировать сообщение электронной почты
- Отправить сообщение на адрес администратора сайта
Конфигурация PHP
Большинство программ всегда имеют отдельное окно настроек, где можно указать все основные параметры этого приложения. В PHP тоже есть свои настройки, только меняются они не через интерфейс, а путем редактирования специального файла — php.ini.
В файле php.ini задаются все настройки работы PHP. Из того, что нас будет интересовать в первую очередь — это режим управления ошибками, подключение дополнительных возможностей, настройки сессий и кук.
В разных ОС этот файл находится по разным путям. Проще всего пользователям сборки OpenServer — там php.ini можно открыть из главного меню.
Технология
CGI
позволяет создавать серверные приложения
любой сложности, без ограничения
возможностей программ CGI.
Однако данная технология обладает
рядом недостатков.
-
При
получении данных от клиента приложению
приходится производить сложный разбор
строки параметров запроса. Задача
усложняется, если в запросе присутствуют
строки в национальной кодировке. -
Содержимое
документа HTML
формируется приложением CGI.
При изменении дизайна приходится
осуществлять перекомпиляцию приложения. -
Приложения
CGI,
использующие интерфейс прикладных
программ (API)
локальной операционной системы сервера,
плохо переносимы.
Одним
из вариантов решения приведенных
проблем является использование
технологии PHP
для динамического формирования
документов HTML
на стороне сервера. Технология PHP
является технологией стороны сервера.
Аббревиатура PHP
раскрывается рекурсивно: «PHP:
Hypertext
Preprocessor».
Основными сферами применения данной
технологии являются создание серверных
приложений и интерфейсов к базам данных.
Приложения
PHP
встраиваются в документы HTML
в качестве сценариев, подобно сценариям
JavaScript,
однако, в отличие от JavaScript,
сценарии PHP
выполняются не пользовательским
агентом, а специальной программой –
проигрывателем сценариев PHP,
которая является приложением CGI
и запускается сервером. Пользовательский
агент получает результат выполнения
запрошенного им сценария и не видит
кода самого сценария. Документ HTML,
содержащий сценарий PHP,
как правило, имеет специальное расширение,
например, php3
или phtml.
При получении запроса такого документа
сервер выполняет следующие действия:
-
Запрашивает
локальную операционную систему о типе
файла php3
или phtml. -
Получив
ответ, что данный файл является сценарием
и путь к программе, выполняющей подобные
сценарии, запускает проигрыватель
сценариев, указав запрошенное
пользователем имя файла в качестве
параметра запуска. -
Проигрыватель
сценариев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.
Таблица |
|
Операции |
|
Знак |
Операция |
Арифметические |
|
+ |
Сложение |
– |
Вычитание |
* |
Умножение |
/ |
Деление |
% |
Остаток |
Строковые |
|
. |
Конкатенация |
Присваивание |
|
= |
Обычное |
+= |
Присваивание |
–= |
Присваивание |
*= |
Присваивание |
/= |
Присваивание |
%= |
Присваивание |
.= |
Присваивание |
Побитовые |
|
& |
Побитовое |
| |
Побитовое |
~ |
Побитовое |
Окончание |
|
Знак |
Операция |
Логические |
|
and |
Логическое |
or |
Логическое |
xor |
Логическое |
! |
Логическое |
&& |
Логическое |
|| |
Логическое |
Сравнение |
|
== |
Равно |
!= |
Не |
< |
Меньше |
> |
Больше |
<= |
Меньше |
>= |
Больше |
Сценарий
PHP
состоит из операторов. Помимо оператора
вычисления выражения, существует ряд
операторов, характерных для структурных
языков. Некоторые операторы PHP
имеют два синтаксиса: синтаксис языка
C
и модифицированный синтаксис для
вставки HTML-кода
внутрь операторов. В табл. 11 приведены
основные операторы PHP.
Операторы записаны с использованием
синтаксиса языка C.
Таблица |
|
Операторы |
|
Синтаксис |
Оператор |
if elseif … else |
Ветвление |
while |
Цикл |
do |
Цикл |
for |
Цикл |
break |
Безусловный |
continue |
Безусловный |
Окончание |
|
Синтаксис |
Оператор |
switch case case … default: } |
Выбор |
function {…} |
Определение |
return |
Возврат |
Синтаксис
определения функции в интерпретаторе
PHP
отличается от синтаксиса языка C.
Функция – это набор операторов или
часть кода, выполняемая при разборе
специальной операции, называемой
вызовом функции. Для вызова функции
указывается ее имя, за которым в круглых
скобках следует набор параметров,
передаваемых функции.
Пользовательские
функции определяются при помощи
оператора function.
При определении функции указывается
ее имя и список параметров. Параметры
перечисляются через запятую. Каждый
параметр считается локальной переменной
функции. Внутри блока операторов функции
могут определяться новые переменные.
Каждая переменная, определенная на
внутреннем уровне является локальной.
Все обычные локальные переменные
создаются в стеке при каждом вызове
функции и уничтожаются после завершения.
Функции
не имеют доступа к глобальным переменным.
Для получения доступа к глобальным
переменным последняя должна быть
локально переобъявлена. Локальное
переобъявление выполняется указанием
ключевого слова global
перед именем глобальной переменной, к
которой необходимо получить доступ.
Помимо
обычных (автоматических) локальных
переменных, в функции можно определить
статические переменные, которые
создаются при определении функции и
существуют все время пока выполняется
программа. Для определения статической
переменной перед ее именем нужно указать
ключевое слово static.
Статические переменные сохраняют свое
значение после выхода из функции.
Функции
могут возвращать значения. Для этого
используется оператор return.
Тип возвращаемого значения зависит от
типа параметра оператора return.
Стандартно
параметры передаются в функцию по
значению. Это означает, что при вызове
функции для каждого параметра создается
локальная переменная, куда копируется
значение передаваемого параметра. В
PHP
имеется возможность организовать
передачу параметров функции по ссылке.
Для этого в списке параметров при
определении функции перед именем
параметра необходимо указать символ
«&». При передаче по ссылке при
вызове функции для передаваемого
параметра создается еще одно имя,
которое является именем параметра или,
что то же самое, именем локальной
переменной функции. При передаче по
ссылке у функции имеется возможность
изменять значение передаваемой
переменной. Если необходимо при некоторых
вызовах одной и той же функции передавать
параметр по значению, а при других по
ссылке, то функция должна быть определена
обычным образом. При этом при вызове
функции с передачей параметра по ссылке
следует в списке параметров перед
соответствующим параметром указать
символ «&».
Параметры
функции могут иметь значение по
умолчанию. Для указания значения
параметра по умолчанию в списке
параметров после имени параметра
ставится символ «=», за которым
следует необходимое значение. Если
какой-либо параметр имеет значение по
умолчанию, то все последующие параметры
в списке также должны иметь значения
по умолчанию. При вызове функций со
значениями параметров по умолчанию
соответствующие параметры вызова можно
опустить.
В
интерпретаторе PHP
имеются встроенные функции. Встроенные
функции определены в самом интерпретаторе
или в загружаемых модулях. В табл. 12
приведены основные встроенные функции
PHP.
Таблица |
|
Встроенные |
|
Функция |
Описание |
Математические |
|
mixed |
Абсолютное |
int |
Наименьшее |
int |
Наибольшее |
Продолжение |
|
Функция |
Описание |
double |
Округление |
string |
Преобразование |
string |
Преобразование |
string |
Преобразование |
int |
Преобразование |
int |
Преобразование |
int |
Преобразование |
int int |
Получить |
void |
Инициализировать |
int |
Получить |
int int |
Получить |
void |
Инициализировать |
int |
Максимальное |
double |
Квадратный |
double |
Экспонента |
double double |
xy |
double |
Натуральный |
double |
Десятичный |
double |
|
double |
Косинус |
double |
Синус |
double |
Тангенс |
double |
Арккосинус |
double |
Арксинус |
double |
Арктангенс |
double double |
Арктангенс |
Обработка |
|
void |
Вывести |
int mixed |
Форматированный |
string string mixed |
Форматировать |
Продолжение |
|
Функция |
Описание |
string string |
Экранирование |
string string |
Удалить |
string |
Получить |
int |
Код |
string string string |
Перевод |
void |
Разбить |
Обработка |
|
int |
Число |
mixed |
Текущий |
mixed |
Псевдоним |
array |
Получить |
mixed |
Ключ |
mixed |
Установить |
mixed |
Переместить |
mixed |
Переместить |
mixed |
Установить |
void |
Сортировка |
void |
Сортировка |
void |
Сортировка |
void |
Сортировка |
int |
Сортировка |
Процессы |
|
string string array int ) |
Выполнить |
string string |
Выполнить |
int |
Изменить |
void |
Установить |
Продолжение |
|
Функция |
Описание |
string |
Получить |
void |
Задержка |
void |
Задержка |
int [, |
Получить |
int |
Уменьшение |
int |
Увеличение |
Файлы |
|
int string |
Копировать |
int string |
Переименовать |
int string |
Удалить |
int strinf |
Прочитать |
array |
Прочитать |
int string |
Размер |
int string |
TRUE, |
int string |
Открыть |
string |
Прочитать |
string int |
Прочитать |
int [, |
Записать |
string int |
Бинарное |
int string |
Бинарная |
int |
Текущая |
int |
Переместить |
int |
Переместить |
int |
TRUE, |
int |
Закрыть |
int string string |
Запустить |
Продолжение |
|
Функция |
Описание |
int |
Закрыть |
int int |
Создать |
int |
Удалить |
int |
Открыть |
string |
Получить |
void |
Переместить |
void |
Закрыть |
void |
Очистить |
flush() |
Очистка |
int int |
Открыть |
Дата |
|
int |
Получить |
string int |
Строковое |
string string int |
Преобразовать |
array int |
Преобразовать |
int int int int |
Дата |
int int int int |
Дата |
TCP/IP, |
|
string string |
Получить |
string string |
Получить |
int |
Отправить |
string string |
Преобразовать |
int |
TRUE, |
void |
Обработка |
void |
Завершить |
Окончание |
|
Функция |
Описание |
int |
Вывод |
string |
Вывод |
Более
подробную информацию о встроенных
функциях языка интерпретатора PHP
можно найти в руководствах по этому
языку.
Соседние файлы в предмете Программирование для Web
- #
- #
- #
- #