Технология CGI позволяет создавать серверные приложения любой сложности, без ограничения возможностей программ CGI. Однако данная технология обладает рядом недостатков.
1. При получении данных от клиента приложению приходится производить сложный разбор строки параметров запроса. Задача усложняется, если в запросе присутствуют строки в национальной кодировке.
2. Содержимое документа HTML формируется приложением CGI. При изменении дизайна приходится осуществлять перекомпиляцию приложения.
3. Приложения CGI, использующие интерфейс прикладных программ (API) локальной операционной системы сервера, плохо переносимы.
Одним из вариантов решения приведенных проблем является использование технологии PHP для динамического формирования документов HTML на стороне сервера. Технология PHP является технологией стороны сервера. Аббревиатура PHP раскрывается рекурсивно: "PHP: Hypertext Preprocessor". Основными сферами применения данной технологии являются создание серверных приложений и интерфейсов к базам данных.
Приложения PHP встраиваются в документы HTML в качестве сценариев, подобно сценариям JavaScript, однако, в отличие от JavaScript, сценарии PHP выполняются не пользовательским агентом, а специальной программой – проигрывателем сценариев PHP, которая является приложением CGI и запускается сервером. Пользовательский агент получает результат выполнения запрошенного им сценария и не видит кода самого сценария. Документ HTML, содержащий сценарий PHP, как правило, имеет специальное расширение, например, php3 или phtml. При получении запроса такого документа сервер выполняет следующие действия:
1. Запрашивает локальную операционную систему о типе файла php3 или phtml.
2. Получив ответ, что данный файл является сценарием и путь к программе, выполняющей подобные сценарии, запускает проигрыватель сценариев, указав запрошенное пользователем имя файла в качестве параметра запуска.
![]() |
|
Таблица 10 |
|
|
Операции PHP |
|
|
Знак |
Операция |
|
Арифметические |
|
|
+ |
Сложение |
|
– |
Вычитание |
|
* |
Умножение |
|
/ |
Деление |
|
% |
Остаток от деления |
|
Строковые |
|
|
. |
Конкатенация строк |
|
Присваивание |
|
|
= |
Обычное присваивание |
|
+= |
Присваивание со сложением |
|
–= |
Присваивание с вычитанием |
|
*= |
Присваивание с умножением |
|
/= |
Присваивание с делением |
|
%= |
Присваивание с получением остатка |
|
.= |
Присваивание с конкатенацией |
|
Побитовые |
|
|
& |
Побитовое умножение (И) |
|
| |
Побитовое сложение (ИЛИ) |
|
~ |
Побитовое отрицание (НЕ) |
|
Окончание табл. 10 |
|
|
Знак |
Операция |
|
Логические |
|
|
and |
Логическое И |
|
or |
Логическое ИЛИ |
|
xor |
Логическое исключающее ИЛИ |
|
! |
Логическое отрицание |
|
&& |
Логическое И |
|
|| |
Логическое ИЛИ |
|
Сравнение |
|
|
== |
Равно |
|
!= |
Не равно |
|
< |
Меньше |
|
> |
Больше |
|
<= |
Меньше или равно (не больше) |
|
>= |
Больше или равно (не меньше) |
|
Таблица 11 |
|
|
Операторы PHP |
|
|
Синтаксис |
Оператор |
|
if (cond1) {...} elseif (cond2) {...} ... else {...} |
Ветвление |
|
while (cond) {...} |
Цикл с предусловием (цикл ПОКА) |
|
do {...} while (cond) |
Цикл с постусловием (цикл ДО) |
|
for (init; cond; expr) {...} |
Цикл с предусловием |
|
break |
Безусловный переход на конец операторов while, do while, for и switch |
|
continue |
Безусловный переход на следующий цикл |
|
Окончание табл. 11 |
|
|
Синтаксис |
Оператор |
|
switch (var) { case val1: ... case val2: ... ... default: ... } |
Выбор |
|
function name(parameters) {...} |
Определение функции |
|
return val |
Возврат значения |
|
Таблица 12 |
|
|
Встроенные функции PHP |
|
|
Функция |
Описание |
|
Математические функции |
|
|
mixed abs(mixed x) |
Абсолютное значение аргумента x |
|
int ceil(double x) |
Наименьшее целое, большее x |
|
int floor(double number) |
Наибольшее целое, меньшее x |
|
Продолжение табл. 12 |
|
|
Функция |
Описание |
|
double round(double x) |
Округление |
|
string decbin(int dec) |
Преобразование десятичного числа в двоичное |
|
string dechex(int dec) |
Преобразование десятичного числа в шестнадцатеричное |
|
string decoct(int dec) |
Преобразование десятичного числа в восьмеричное |
|
int bindec(string bin) |
Преобразование двоичного числа в десятичное |
|
int hexdec(string hex) |
Преобразование шестнадцатеричного числа в десятичное |
|
int octdec(string oct) |
Преобразование восьмеричного числа в десятичное |
|
int rand([int min, int max]) |
Получить случайное число |
|
void srand(int seed) |
Инициализировать генератор случайных чисел |
|
int getrandmax() |
Получить максимальное число, возвращаемое rand |
|
int mt_rand([int min, int max]) |
Получить случайное число |
|
void mt_srand(int seed) |
Инициализировать генератор случайных чисел |
|
int mt_getrandmax() |
Максимальное число, возвращаемое mt_rand |
|
double sqrt(double x) |
Квадратный корень |
|
double exp(double x) |
Экспонента |
|
double pow(double x, double y) |
xy |
|
double log(double x) |
Натуральный логарифм |
|
double log10(double x) |
Десятичный логарифм |
|
double pi() |
p |
|
double cos(double x) |
Косинус |
|
double sin(double x) |
Синус |
|
double tan(double x) |
Тангенс |
|
double acos(double x) |
Арккосинус |
|
double asin(double x) |
Арксинус |
|
double atan(double x) |
Арктангенс |
|
double atan2(double y, double x) |
Арктангенс y/x |
|
Обработка строк |
|
|
void print(string str) |
Вывести строку в стандартный поток вывода |
|
int printf(string format, mixed arg, ...) |
Форматированный вывод |
|
string sprintf( string format, mixed arg, ...) |
Форматировать строку |
|
Продолжение табл. 12 |
|
|
Функция |
Описание |
|
string addslashes( string str) |
Экранирование символов "$", "\", "'" и 0 в строке str |
|
string stripslashes( string str) |
Удалить экранирующие символы из строки |
|
string chr(int ascii) |
Получить символ с заданным кодом |
|
int ord(string ch) |
Код символа |
|
string convert_cyr_string( string str, string from, string to) |
Перевод строки из одной русскоязычной кодировки в другую |
|
void parse_str(string str) |
Разбить строку запроса и создать соответствующие переменные |
|
Обработка массивов |
|
|
int count(mixed arr) |
Число элементов массива |
|
mixed current(array arr) |
Текущий элемент массива |
|
mixed pos(array arr) |
Псевдоним current |
|
array each(array arr) |
Получить в виде массива пару ключ/значение текущего элемента arr |
|
mixed key(array arr) |
Ключ текущего элемента массива |
|
mixed reset(array arr) |
Установить внутренний указатель массива на начальный элемент |
|
mixed prev(array arr) |
Переместить указатель массива на предыдущий элемент |
|
mixed next(array arr) |
Переместить указатель массива на следующий элемент |
|
mixed end(array arr) |
Установить внутренний указатель массива на последний элемент |
|
void sort(array arr) |
Сортировка массива |
|
void rsort(array arr) |
Сортировка массива в обратном порядке |
|
void asort(array arr) |
Сортировка ассоциативного массива array |
|
void arsort(array arr) |
Сортировка ассоциативного массива arr в обратном порядке |
|
int ksort(array arr) |
Сортировка ассоциативного массива по ключам |
|
Процессы |
|
|
string exec( string command [, array output [, int return_code]] ) |
Выполнить команду command оболочки UNIX. Стандартный вывод будет записан в массив строк output, код возврата – в переменную result_code. Возвращается последняя строка стандартного потока вывода |
|
string system( string cmd [, int ret]) |
Выполнить команду и возвратить результат |
|
int chdir(string dir) |
Изменить текущий рабочий каталог |
|
void putenv(string str) |
Установить значение переменной окружения |
|
Продолжение табл. 12 |
|
|
Функция |
Описание |
|
string getenv(string var) |
Получить значение переменной окружения |
|
void sleep(int sec) |
Задержка выполнения текущего процесса на sec секунд |
|
void usleep(int us) |
Задержка выполнения текущего процесса на us микросекунд |
|
int sem_get(int key [, int max [, int perm]]) |
Получить идентификатор семафора |
|
int sem_acquire(int sem) |
Уменьшение счетчика семафора |
|
int sem_release(int sem) |
Увеличение счетчика семафора |
|
Файлы и каталоги |
|
|
int copy(string src, string dest) |
Копировать файл |
|
int rename(string old, string new) |
Переименовать файл |
|
int unlink( string filename) |
Удалить файл |
|
int readfile( strinf filename) |
Прочитать текстовый файл в стандартное устройство вывода |
|
array file(string filename) |
Прочитать текстовый файл в массив строк |
|
int filesize( string filename) |
Размер файла |
|
int file_exists( string filename) |
TRUE, если файл существует |
|
int fopen(string filename, string mode) |
Открыть файл |
|
string fgetc(int fd) |
Прочитать символ из файла |
|
string fgets(int fd, int maxlen) |
Прочитать из файла строку максимальной длиной maxlen |
|
int fputs(int fd, string str [, int length]) |
Записать строку в файл |
|
string fread(int fp, int len) |
Бинарное чтение файла |
|
int fwrite(int fd, string str, int len) |
Бинарная запись в файл |
|
int ftell(int fd) |
Текущая позиция указателя |
|
int fseek(int fd, int offset) |
Переместить внутренний указатель файла |
|
int rewind(int fd) |
Переместить указатель файла на начало |
|
int feof(int fd) |
TRUE, если дескриптор fd указывает на конец файла |
|
int fclose(int fd) |
Закрыть файл |
|
int popen( string command, string mode) |
Запустить процесс command и возвратить дескриптор стандартного потока ввода или стандартного потока вывода созданного процесса |
|
Продолжение табл. 12 |
|
|
Функция |
Описание |
|
int pclose(int fd) |
Закрыть поток, открытый popen |
|
int mkdir(string dir, int mode) |
Создать директорию |
|
int rmdir(string dir) |
Удалить директорию |
|
int opendir(string dir) |
Открыть директорию |
|
string readdir(int fd) |
Получить имя очередного файла в каталоге |
|
void rewinddir(int fd) |
Переместить указатель каталога на первый файл |
|
void closedir(int fd) |
Закрыть директорию |
|
void clearstatcache() |
Очистить файловый кэш |
|
flush() |
Очистка буфера стандартного вывода |
|
int fsockopen(string host, int port) |
Открыть сокет |
|
Дата и время |
|
|
int time() |
Получить текущее время в формате UNIX |
|
string date(string format, int timestamp) |
Строковое представление локальной даты и времени в указанном формате |
|
string gmdate( string format, int timestamp) |
Преобразовать дату и время GMT в формате UNIX в форматированную строку |
|
array getdate( int timestamp) |
Преобразовать дату и время в ассоциативный массив |
|
int mktime(int hour, int minute, int second, int month, int day, int year) |
Дата и время в формате UNIX |
|
int gmmktime(int hour, int minute, int second, int month, int day, int year) |
Дата и время GMT в формате UNIX |
|
TCP/IP, HTTP, CGI, PHP |
|
|
string gethostbyname( string host) |
Получить IP-адрес хоста |
|
string gethostbyaddr( string addr) |
Получить имя хоста по IP-адресу |
|
int header(string hdr) |
Отправить заголовок HTTP |
|
string htmlspecialchars( string str) |
Преобразовать специальные символы HTML в строке str в escape-последовательности |
|
int isset() |
TRUE, если переменная определена |
|
void eval(string code) |
Обработка code в качестве вложенного сценария |
|
void exit() |
Завершить текущий сценарий |
|
Окончание табл. 12 |
|
|
Функция |
Описание |
|
int phpinfo() |
Вывод информации о текущей реализации PHP |
|
string phpversion() |
Вывод информации о текущей версии PHP |
![]() |
![]() |
|
Таблица 13 |
|
|
Основные классы библиотеки компонентов BDE |
|
|
Название класса |
Описание |
|
TDataModule |
Контейнер для хранения остальных компонентов BDE |
|
TDatabase |
База данных. Содержит название БД или папку с таблицами БД |
|
TQuery |
SQL запрос. Включает содержимое запроса и метод для его отправки серверу |
|
TDataSet |
Набор данных. Включает данные, полученные от сервера в качестве ответа |
|
Таблица 14 |
|
|
Основные функции библиотеки MySQL |
|
|
Функция |
Описание |
|
MYSQL *mysql_init( MYSQL *mysql); |
Инициализация структуры MYSQL для последующего подключения к СУБД |
|
MYSQL *mysql_connect( MYSQL *mysql, const char *host, const char *user, const char *passwd); |
Установка соединения с СУБД без соединения с БД |
|
int mysql_create_db( MYSQL *mysql, const char *db); |
Создание новой БД. Возвращает 0 в случае успешного завершения |
|
int mysql_select_db( MYSQL *mysql, const char *db); |
Установить соединение с БД. Возвращает 0 в случае успешного завершения |
|
Продолжение табл. 14 |
|
|
Функция |
Описание |
|
int mysql_query( MYSQL *mysql, const char *query); |
Отправить запрос SQL. Возвращает 0 в случае успешного завершения |
|
int mysql_real_query( MYSQL *mysql, const char *qyery, unsigned int length); |
Отправить запрос SQL, содержащий двоичные данные. Возвращает 0 в случае успешного завершения |
|
MYSQL_RES * mysql_store_result( MYSQL *mysql); |
Получить результат последнего запроса |
|
unsigned int mysql_num_fields( MYSQL_RES *result); |
Количество полей в полученном результате |
|
int mysql_num_rows( MYSQL_RES *result); |
Количество записей в полученном результате |
|
MYSQL_FIELD * mysql_fetch_fields( MYSQL_RES *result); |
Возвращает массив структур MYSQL_FIELD, содержащих поля полученного ответа |
|
MYSQL_ROW mysql_fetch_row( MYSQL_RES *result); |
Выбрать текущую запись из набора и переместить указатель на следующую запись |
|
void mysql_data_seek( MYSQL_RES *res, unsigned int offset); |
Перемещение указателя в наборе данных на указанную позицию |
|
my_bool mysql_eof( MYSQL_RES *res); |
Возвращает ненулевое значение, если указатель набора данных перемещен за последнюю запись в наборе |
|
void mysql_free_result( MYSQL_RES *result); |
Освобождает память, занятую результатами последнего запроса |
|
Окончание табл. 14 |
|
|
Функция |
Описание |
|
int mysql_drop_db( MYSQL *mysql, const char *db); |
Уничтожение БД. Возвращает 0 в случае успешного завершения |
|
unsigned int mysql_errno( MYSQL *mysql); |
Возвращает номер последней ошибки |
|
char *mysql_error( MYSQL *mysql); |
Возвращает строку с сообщением о последней ошибке |
|
void mysql_close( MYSQL *mysql); |
Разрыв соединения с сервером БД |
![]() |
|
Таблица 15 |
|
|
Основные функции PHP для доступа к БД MySQL |
|
|
Функция |
Описание |
|
int mysql_affected_rows(int [link_identifier] ) |
Количество столбцов, использованных предыдущими mysql операциями |
|
int mysql_close(int [link_identifier] ) |
Закрывает mysql соединение |
|
int mysql_connect(string [hostname] [:port] , string [username] , string [password] ) |
Открывает соединение с mysql сервером |
|
int mysql_create_db(string database name, int [link_identifier] ) |
Создает базу данных mysql |
|
int mysql_data_seek(int result_identifier, int row_number) |
Перемещает внутренний указатель результата |
|
int mysql_db_query(string database, string query, int [link_identifier] ) |
Посылает mysql запрос |
|
int mysql_drop_db(string database_name, int [link_identifier] ) |
Удаляет базу данных mysql |
|
int mysql_errno(int [link_identifier] ) |
Возвращает номер сообщения об ошибке предыдущей операции mysql |
|
string mysql_error(int [link_identifier] ) |
Возвращает текст сообщения об ошибке предыдущей операции mysql |
|
array mysql_fetch_array(int result) |
Выбрать результат как ассоциативный массив |
|
object mysql_fetch_field(int result, int [field_offset] ) |
Получает информацию о столбце из результата и возвращает ее как объект |
|
Продолжение табл. 15 |
|
|
Функция |
Описание |
|
array mysql_fetch_lengths(int result) |
Получает максимальный размер данных для каждого выходного значения |
|
object mysql_fetch_object(int result) |
Получает строку результата как объект |
|
array mysql_fetch_row(int result) |
Получите строку результата как пронумерованный массив |
|
string mysql_field_name(int result, int field_index) |
Получает имя определенного поля в результате |
|
int mysql_field_seek(int result, int field_offset) |
Устанавливает указатель запроса в определенное поле |
|
string mysql_field_table(int result, int field_offset) |
Получает имя таблицы, в которой находится указанное поле |
|
string mysql_field_type(int result, int field_offset) |
Получает тип указанного поля в результате |
|
string mysql_field_flags(int result, int field_offset) |
Получает флаги, связанные с указанным полем в результате |
|
int mysql_field_len(int result, int field_offset) |
Возвращает длину указанного поля |
|
int mysql_free_result(int result) |
Освобождает память результата |
|
int mysql_insert_id(int [link_identifier] ) |
Получает id сгенерированный предыдущим выполнением SQL-запроса INSERT |
|
int mysql_list_fields(string database_name, string table_name, int [link_identifier] ) |
Показывает список полей mysql в результате запроса |
|
int mysql_list_dbs(int [link_identifier] ) |
Показывает список доступных Баз Данных на сервере |
|
int mysql_list_tables(string database, int [link_identifier] ) |
Показывает список таблиц в базе данных mysql |
|
Окончание табл. 15 |
|
|
Функция |
Описание |
|
int mysql_num_fields(int result) |
Получает количество полей в результате |
|
int mysql_num_rows(int result) |
Получает количество столбцов в результате |
|
int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] ) |
Открывает устойчивое соединение с mysql-сервером |
|
int mysql_query(string query, int [link_identifier] ) |
Отправляет SQL-запрос на mysql |
|
int mysql_result(int result, int row, mixed field) |
Получает данные результата |
|
int mysql_select_db(string database_name, int [link_identifier] ) |
Выбирает Базу Данных mysql |
|
string mysql_tablename(int result, int i) |
Получает имя таблицы, содержащей указанное поле |