PHP (англ. PHP: Hypertext Preprocessor — PHP) — скриптовый язык общего назначения,широко применяющийся для разработки веб-приложений.Поддерживается всеми распространенными хостинг-провайдерами.
Область применения.
PHP является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов. PHP отличает простота, кроссплатформенность, высокая скорость выполнения, расширенная функциональность, распространение исходных кодов на основе лицензии PHP.
Основная область применения PHP - это написание скриптов, работающих на стороне сервера поэтому PHP способен выполнять всё то, что выполняет другие программы CGI.
С помощью PHP можно создавать скрипты для выполнения в командной строке. Можно создать PHP-скрипт, способный запускаться вне зависимости от вебсервера и браузера. Для этого нужен парсер PHP..
PHP доступен для большинства операционных систем. Также в PHP включена поддержка большинства современных вебсерверов, таких, как Apache, Microsoft Internet Information Server, Netscape и многих других. Для большинства серверов PHP поставляется в качестве модуля, для других, поддерживающих стандарт CGI, PHP может функционировать в качестве процессора CGI.
Работая с PHP, вы можете выбрать операционную систему,вебсерверы, процедурное или объектно-ориентированное программирование или же их сочетания. Возможности PHP включают формирование изображений, файлов PDF ,текстовых данных к примеру XHTML Ю XML.
PHP поддерживает разнообразные базы данных:
MySQL | MySQLi | SQLite | PostgreSQL |
Oracle (OCI8) | Oracle | Microsoft SQL Server | Sybase |
ODBC | mSQL | IBM DB2 | Cloudscape и Apache Derby |
Informix | Ovrimos SQL | Lotus Notes | DB++ |
DBM | dBase | DBX | FrontBase |
Ingres II | SESAM | Firebird / InterBase | Paradox File Access |
MaxDB | FilePro | SESAM | UNIX dbm |
Возможности PHP с помощью встроенных средств :
- автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
- автоматизированная отправка HTTP-заголовков;
- работа с HTTP-авторизацией;
- работа с cookies и сессиями;
- работа с локальными и удалёнными файлами, сокетами;
- обработка файлов, загружаемых на сервер;
- работа с XForms.
Примеры применения PHP
На этом сайте мы уже писали программу Hello world на яэыках JavaScript,Visual Basic, C++. Напишем ее и на PHP на странице HTML.
<html>
<head>
<title>
Здравствуй мир
</title>
</head>
<body>
<?php echo 'Hello, world!'; ?>
</body>
</html>
Также возможен более короткий вариант вывода строки: <?= 'Hello, world!' ?>
Открывающий тег вида <?= используется для сокращённой записи конструкций используемых для вывода строки. Помимо ограничителей <?php ?>, допускается использование дополнительных вариантов, таких как <? ?> и <script language="php"> </script>.
Имена переменных начинаются с символа $, при зтом тип переменной не объявляется. Имена переменных и констант зависят от регистра символов. Имена классов, методов классов и функций не зависят от регистра символов. Переменные обрабатываются в строках, заключённых в двойные кавычки, и не обрабатываются заключённых в одинарные кавычки.
PHP рассматривает переход на новую строку как пробел. Инструкции разделяются с помощью точки с запятой (;), за исключением случаев, после объявления конструкции if/else и циклов.
Переменные в функцию можно передавать как по значению, так и по ссылке (используется знак &). Комментарии в PHP поддерживаются трех типов комментариев: (ограниченные /* */)
(начинающиеся с // и идущие до конца строки)
(с # до конца строки).
Типы данных
В PHP не требуется указание типа при объявлении переменных, так же и самого объявления переменных.
К скалярным типам данных относятся:
логический тип (boolean)
строковый тип (string)
целый тип (integer)
вещественный тип данных (float, double)
специальный тип NULL
К нескалярным типам относятся:
массив (array)
объект (object)
ресурс (resource)
К псевдотипам относятся:
number - число (integer или float)
callback - (string или анонимная функция)
mixed - любой тип
void - отсутствие параметров
- Логический тип (boolean) принимает только два значения TRUE (истина) и FALSE (ложь).
- Тип NULL предназначен для переменных без определённого значения.
- Ссылки на внешние ресурсы имеют тип "ресурс" (resource).
- Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы.
- Указатель на функцию в PHP может быть представлен замыканием или псевдотипом callback. Замыкание доступно с версии 5.3
Примеры программ на PHP
Больше всего на Veb-сайте PHP применяется для создания формы обратной связи,создания формы регистрации ,поиска фрагментов текста и другие.
Код формы обратной связи:
Сейчас мы разработаем приложение "Гостевая книга на PHP".
Сообщения будут храниться в файлах, которые расположены в папке MMAIL. Код размещен в двух файлах: index.php (отображение сообщений) и ad.php (добавление сообщений, их проверка и запись в файл).
Итак, создайте файл ad.php и в той же директории, в которой расположен этот файл создайте директорию RECORDS.
Сначала проверяем, ввел ли пользователь данные и правильно ли он их ввел:
<? $error = ""; $action = $HTTP_POST_VARS["action"]; if (!empty($action)) { $name = trim($name); $msg = trim($msg); if (empty($msg)) // если не введено сообщение { $action = ""; $error = $error."<LI>Вы не ввели сообщение\n"; } if (empty($name)) // если не введено имя { $action = ""; $error = $error."<LI>Вы не ввели имя\n"; } if (!empty($email)) /* если введен e-mail, то проверяем с помощью регулярного выражения правильность ввода */ { if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) { $action = ""; $error = $error."<LI> Неверно введен е-mail.&nbsр Введите e-mail в виде <i>softtime@softtime.ru</i> \n"; } }
Теперь обрабатываем введенный пользователем текст функциями удаления HTML-тегов и обратных слешей:
$name = substr($HTTP_POST_VARS["name"],0,32); $name = htmlspecialchars(stripslashes($name)); // обрабатываем имя $city = substr($HTTP_POST_VARS["city"],0,32); $email = substr($HTTP_POST_VARS["email"],0,32); $email = htmlspecialchars(stripslashes($email)); // обрабатываем e-mail $url = substr($HTTP_POST_VARS["url"],0,36); $msg = htmlspecialchars(stripslashes($msg)); // обрабатываем сообщение
В нашей гостевой книге поддерживается полужирное начертание, курсив, подчеркивание, верхние и нижние индексы. Для того, чтобы пользователь мог, к примеру, выделить блок текста в сообщении курсивом, его необходимо заключить в теги <i></i> и т.д. Поэтому для после того, как текст введен, нужно заменить эти искусственные теги на их реальное HTML-представление:
if (empty($error)) // если ошибок нет, обрабатываем сообщение { $msg = nl2br($msg); $msg = str_replace("[u]","<u>",$msg); $msg = str_replace("[U]","<u>",$msg); $msg = str_replace("[i]","<i>",$msg); $msg = str_replace("[I]","<i>",$msg); $msg = str_replace("[b]","<B>",$msg); $msg = str_replace("[B]","<B>",$msg); $msg = str_replace("[sub]","<SUB>",$msg); $msg = str_replace("[SUB]","<SUB>",$msg); $msg = str_replace("[sup]","<SUP>",$msg); $msg = str_replace("[SUP]","<SUP>",$msg); $msg = str_replace("[/u]","</u>",$msg); $msg = str_replace("[/U]","</u>",$msg); $msg = str_replace("[/i]","</i>",$msg); $msg = str_replace("[/I]","</i>",$msg); $msg = str_replace("[/b]","</B>",$msg); $msg = str_replace("[/B]","</B>",$msg); $msg = str_replace("[/SUB]","</SUB>",$msg); $msg = str_replace("[/sub]","</SUB>",$msg); $msg = str_replace("[/SUP]","</SUP>",$msg); $msg = str_replace("[/sup]","</SUP>",$msg); $msg = eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3",$msg); $msg = str_replace("\n"," ",$msg); $msg = str_replace("\r"," ",$msg);
Открываем файл и добавляем в него, введенную пользователем информацию:
/* создаем файл с именем вида "rec.+время добавления сообщения" */ $file = fopen("records/rec.".time(),"w"); // записываем информацию в файл, по одной строчке на каждое поле fputs($file,$name."\n"); fputs($file,$email."\n"); fputs($file,$msg."\n"); // закрываем файл fclose($file);
Вызываем скрипт index.php, ответственный за отображение сообщений:
print "<HTML><HEAD>\n"; print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n"; print "</HEAD></HTML>\n"; } }
Добавляем код вывода сообщений об ошибках и HTML-код формы добавления сообщения:
if (empty($action)) { <? <HTML> <HEAD> <TITLE>Гостевая книга - добавление записи</TITLE> </HEAD&tg; <BODY> <H3> <? print "<center>"; ?> <font color=#1E90FF>Добавление записи</font> </H3> <? if (!empty($error)) /* если есть ошибки, выводим сообщение об ошибках */ { print "<P><font color=green>Во время добавления записи произошли следующие ошибки:</font></P>\n"; print "<UL>\n"; print $error; print "</UL>\n"; } ?> <!-- пишем HTML-код формы добавления сообщений !--> <center> <table width=1 border=0> <form action=ad.php method=post> <input type=hidden name=action value=post> <tr> <td width=50%>Имя:<font color=red><sup>*</sup><font></td> <td align=right> <input type=text name=name maxlength=32 value='<? echo $name; ?>'> </td> </tr> <tr> <td width=50%>E-Mail:</td> <td align=right> <input type=text name=email maxlength=32 value='<? echo $email; ?>'> </td> </tr> <tr> <td colspan=2>Сообщение:<font color=red<sup>*</sup></font><br> <textarea cols=50 rows=8 name=msg><? echo $url; ?> </textarea> </td> </tr> <tr> <td colspan=2><input type=submit value='Добавить'></td> </tr> </form> <tr> <td colspan=2><font color=red><sup>*</sup></font> - поля, обязательные для заполнения </td><td align=left> </table> </center> </BODY> </HTML> <? } ?>
После окончания работы с кодом, размещенным в файле ad.php, форма для добавления сообщений должна иметь следующий вид:
Добавление записи
Имя:* | ||
E-Mail: | ||
Сообщение:* |
||
* - поля, обязательные для заполнения |
Листинг файла index.php, используемого для отображения сообщений:
<HTML> <HEAD> <TITLE>Гостевая книга</TITLE> </HEAD> <BODY> <? /* открываем директорию и считываем из нее файлы */ $dir_rec = dir("records"); $i = 0; while($entry = $dir_rec->read()) { if (substr($entry,0,3)=="rec") { $names[$i]=substr($entry,4); $i++; } } $dir_rec->close(); // закрываем директорию @rsort($names); // сортируем файлы /* определяем очередность сообщений и выводим их */ $count = $i; $count1 = $count; if (empty($start)) { $start = 0; } $start = intval($start); if ($start < 0) { $start = 0; } print "<center>"; if ($count > $start + 10) $count = $start + 10; if ($start != 0) { print "<A href=index.php?start=".($start - 10).">Предыдущие</A>"; } print "<a href=ad.php>Добавить запись</A>"; if ($count1 > $start + 10) { print "<A href=index.php?start=".($start + 10).">Следующие</A> \n"; } print "</center><br>"; /* выводим все сообщения в цикле */ for ($i = $start; $i < $count; $i++) { $entry = $names[$i]; $data = file("records/rec.".$entry); $date = $entry; $name = trim($data[0]); $city = trim($data[1]); $email = trim($data[2]); $url = trim($data[3]); $msg = trim($data[4]); /* поле, в которое администратор может добавить ответ */ $answer = trim($data[5]); print "<table border=0 cellspacing=0 cellpadding=2 width=100%> <tr bgcolor=#F0F0F0><td>&nbsр;"; print "<b>$name</b>&nbsр;"; if (!empty($city)) print "$city&nbsр"; if (!empty($email)) print "<a href=mailto:$email><i>$email</i></A>\n"; if (!empty($url)) print "<a href=$url>$url</a>"; print "</td><td align=right>".date("<b>d-m-Y</b> H - i, $date)." </td></tr>\n<tr><td colspan=2>\n"; print "<P>".$msg."</P>\n"; if (!empty($answer)) // если администратор что-то ответил { print "<P><font color=#1E90FF>admin:&nbsр$answer</font></P>\n"; } print "</td></tr></table>\n<br><br>\n"; } print "<center>"; if ($start != 0) { print "<A href=index.php?start=".($start - 10).">Предыдущие</A>"; } print "<a href=ad.php>Добавить запись</A>"; if ($count1 > $start + 10) { print "<A href=index.php?start=".($start + 10).">Следующие</A> \n"; } print "</center>"; ?> </BODY> </HTML>