Сокращенный стиль можно использовать при установке значения On
директивы register_globals
в файле php.ini. При установке значения Off
нужно установить также значение On
директивы track_vars
.
Команды PHP отделяются друг от друга точкой с запятой. Хотя перед закрывающим тегом (?>) точку с запятой ставить не обязательно.
PHP поддерживает комментарии в стиле C, C++ и Unix shell. Например:
<?php echo "test"; // Комментарий /* Это многострочный комментарий */ echo "test2"; echo "Test3"; # Это unix-shell комментарий ?>
Переменная, созданная внутри функции является локальной. Для описания переменной как глобальной, требуется перед ней поставить инструкцию global
. Чтобы описанная переменная, с одной стороны, была локальной, а с другой, не сохраняла свое последнее значение от вызова к вызову функции, следует использовать инструкцию static
.
$a = 1; /* глобальное определение */ Function Test (){ $a=2; echo $a; /* локальная переменная */ } Test (); echo $a; Ответ 2 1Если требуется использовать глобальные переменные внутри функции, необходимо декларировать с помощью оператора global:
$a = 1; /* глобальное определение */ Function Test (){ global $a; $a=2; echo $a; /* локальная переменная */ } Test (); echo $a; Ответ 2 2
При написании скриптов часто используются переменные c динамически изменяемым наименованием. Например,
$a = "hello"; $$a = "world";В данной ситуации переменной с именем a присваивается значение "hello". Следующей операцией переменной с именем, хранящимся в переменной с именем a, то есть - переменной hello мы присваиваем значение "world".
echo "$a ${$a}";
что то же:
echo "$a $hello";В результате получаем hello world.
PHP поддерживает следующие типы данных:
Преобразование типов происходит следующим образом. Если переменной приравнивается строка (текст в кавычках), то эта переменная становится строковой. Если же с ней совершается одна из многих математических функций или она приравнивается численной переменой, она становится численной, причем если приравнивается не целому значению - то станет типом double. Пример:
$stud = "0"; // $stud строка (ASCII 48) $stud++; // $stud строка "1" (ASCII 49) $stud += 1; // $stud integer (2) $stud = $stud + 1.1; // $stud теперь double (3.1)
Преобразовывать в стиле С:
$stud = 1; // $stud это integer $stud = (double) $stud; // $stud это double
Операции преобразования типов:
$a + $b $a - $b $a * $b $a / $b $a % $b (остаток от деления $a на $b)Для работы со строками используется операция сложения двух строк. Символом этой операции является точка:
$a . $b;При использовании операции присваивания возможны конструкции С:
$a = ($b = 4) + 5; // $a будет равна 9, а $b 4. $a += 5; // что то же $a = $a + 5; $b = "Hello "; $b .= "world"; // что то же $b="Hello world"Рассмотрим битовые операции
Два разных обозначения логических операций не есть их дублирование. Разные обозначения определяют разный их приоритет
Приоритеты операторов ++ == / * % + - < <= => > == === != && || = += -= /= *= 5= .= and xor orПриведем пример двух эквивалентных выражений
$a and $b || $c ($a && $b) || $c
if
Структура:
if (выражение) блок_выполнения
Пример:
if ($a > $b) print "a больше, чем b"; if ($a > $b){ print "a больше, чем b"; $b = $a; }
if...else
Пример:
if ($a > $b) { print "a больше, чем b"; } else { print "a не больше, чем b"; }
elseif
Применяется в случае, когда следует использовать if
сразу после else
. Пример:
if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; }
if(): ... endif;
Пример использования:
<?php if ($a==5): ?> A = 5 <?php endif; ?>
Пример совместного использования оператора elseif
if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!"; else: print "a is neither 5 nor 6"; endif;
while
Структура:
while (выражение): блок_выполнения ... endwhile;
Пример:
$i = 1; while ($i <= 10) { print $i++; }
do...while
Выполняется блок выполнения
до тех пор, пока справедливо выражение
. Структура:
do блок_выполнения while (выражение);
for
Структура:
for (выражение1; выражение2; выражение3) блок_выполнения
Существует модификация этого оператора:
for (выражение1; выражение2; выражение3): блок_выполнения; ...; endfor;
Перед блоком выполнения стоит двоеточие.
break
Позволяет выходить из любого цикла (for, while, do...while)
до окончания его выполнения. Пример:
$i = 0; while ($i < 10) { if ($arr[$i] == "stop") { break; } $i++; }
continue
Позволяет пропустить дальнейшее действия блока_выполнения любого цикла и продолжить выполнение с нового цикла. Пример:
while (выражение) { if (выражение2) continue; действие; };
Пример программы аналогичной предыдущей, но без использования continue:
while (выражение) { if (!выражение2) действие; };
switch
Оператор выбора. Пример: фрагмент программы
if ($i == 0) { print "i равно 0"; } else if ($i == 1) { print "i равно 1"; } else if ($i == 2) { print "i равно 2"; } else print "ни одно условие не прошло"можно записать в виде:
switch ($i) { case 0: print "i равно 0"; break; case 1: print "i равно 1"; break; case 2: print "i равно 2"; break; default: print " ни одно условие не прошло" }
В таком представлении есть и еще одно преимущество. Если вы не поставите оператор
Пример
Пример
Пример
Для определения количества элементов массива используется функция
Для пролистывания элементов массива используется функция
Пример
Для слияния массивов используется функция
Пример
Пример
";
}
Для работы с ассоциированными массивами используются функции, отличные от рассмотренных. Для просмотра ассоциированного массива используется конструкция
Так же как у предка PHP - языка С строка представляет собой массив элементов с начальным индексом равным нулю.
Важной функцией является нахождение подстроки в строке. Для этой цели служит функция Функция Функция
Следующий пример определяет клиентов у которых адрес электронной почты определен доменом Украины и в этом случае выводится специальное сообщение.
Строка, получаемая от клиента может содержать символы игнорируемые браузером - символы пробелов в начале и в конце строки, знаки табуляции, перенос строки и возврат каретки. Для очистки строки существует от этих символов существует функция
Для вывода потока данных в PHP существуют конструкции Например, результатом выполнения скрипта
break
, например, перед case 1:
, то в случае, когда $i
будет равен нулю после вывода на экран сообщения об этом программа пойдет дальше и выведет также сообщение о том, что $i
равна еще и 1
и только после, встретив break;
продолжит свое выполнение за пределами
switch
Функции
Конструкция функций PHP имеет следующий вид
function name_function($argument1, $argument2,...)
{
//body function
}
Пример
<html>
<body>
<?php
finction print_hello()
{
print "Hello";
}
print_hello();
?>
</body>
</html>
Функция может возвращать значение или объект с использованием оператора return
.
<html>
<body>
<?php
finction Sum($FistNumber,$SecondNumber)
{
$Add=$FistNumber+$SecondNumber;
return $Add;
}
print Sum(1,2);
?>
</body>
</html>
В PHP представлена возможность присвоить имя функции некоторой переменной и использовать ее так же как и функцию.
<html>
<body>
<?php
finction print_hello()
{
print "Hello";
}
$fname="print_hello";
$fname();
?>
</body>
</html>
Это предоставляет возможность получать имя функции на основании параметров запроса.
Массивы
Массивы в PHP можно создавать либо непосредственным перечислением, либо используя функцию array()
.
$symbol=array("alpha","beta","gamma");
либо
$symbol[] "alpha";
$symbol[] "beta";
$symbol[] "gamma";
В этой случае $symbol[1]
содержит "beta"
.
Допустимы такие конструкции, как отсутствие инициализации промежуточных значений массива. Например, можно ввести $symbol[32] "delta";
. В этом случае все элементы массива от третьего до тридцать первого не будут инициализированы и обращение к ним вызовет ошибку выполнения программы.
count()
. Заметим, что так как нумерация элементов массива начинается с нуля, то номер последнего элемента массива $symbol
равен count($symbol)-1
.
foreach($array as $temp)
, где $array
имя массива, а $temp
имя временной переменной, в которой хранится текущее значение элемента.
foreach($symbol as $temp)
{
print "$temp
В результате выводятся элементы массива
";
}
$symbol
.
array_merge()
$lat=array("a","b","c");
$cyr=array("а","б","в");
$symbol=array_merge($lat,$cyr);
Добавление элементов к массиву проводится с помощью функции array_push()
$lat=array("a","b","c");
$symbol=array_push($lat,"d","e");
Для выделения части массива используется функция array_slice()
с тремя аргументами - имя массива, начальная позиция или смещение от начала и длина участка. Если последний аргумент не указан, то выделяется участок до конца массива. Полезной функцией является array_shift()
, удаляющая первый элемент массива (кроме того, она возвращает удаляемый элемент). Приведем пример проверяющий остались ли в массиве элементы.
$symbol=array("alpha","beta","gamma");
while(count($symbol))
{
$tmp=array_shift($symbol);
print "Удален символ "."$tmp
Функция
";
print "Массив \$symbol содержит".count($symbol). "элементов sort()
сортирует массив в алфавитном порядке, если хотя бы один его элемент является строкой и в числовом порядке, если все его элементы числа. Для сортировки в обратном порядке используется функция rsort()
.
Ассоциированные массивы
Ассоциированный массив (структура) это массив, позволяющий ссылаться на его элементы по имени. Порядок создания ассоциированных массивов такой же, как и для простых массивов.
Приведем пример.
$kadry=array(
Name=>"Бендер",
SecondName=>"Остап",
age=>33,
speciality=>"свободный художник"
)
print $kadry[age];
Результатом выполнения программы будет число 33.
foreach( $array as $key=$tmp)
$array
- имя массива, $key
переменная, в которой сохраняет имя элемента массива,
а $tmp
переменная сохраняющая значение элемента.
Сортировка ассоциированного массива производится функцией asort()
. Для сортировки ассоциированного массива по именам полей используется функция ksort()
. Сортировка в обратном порядке проводится функцией krsort()
.
Пример просмотра двумерного ассоциированного массива и этого же отсортированного массива.
$kadry = array (
array (
Name=>"Бендер",
SecondName=>"Остап",
age=>33,
speciality=>"свободный художник"
),
array (
Name=>"Балаганов",
SecondName=>"Шура",
age=>28,
speciality=>"сын лейтенанта Шмидта"
),
array (
Name=>"Паниковский",
SecondName=>"",
age=>63,
speciality=>"нищий"
)
);
foreach (
$kadry as $val)
{
foreach (
$val as $key=>$newVal)
{
print " $key: $newVal
";
}
}
asort($kadry);
foreach (
$kadry as $val)
{
foreach (
$val as $key=>$newVal)
{
print " $key: $newVal
";
}
}
?>
Функции обработки строк
Одной из основных строковых операция является операция конкатенации - сложения строк. В PHP точка является оператором конкатенации.
Например,
$str="строка";
print $str[0];//получим "c"
Для определения длины строки служит функция strlen()
.
strstr
. Функция использует два аргумента - исходная строка и подстрока. Возвращает false
при отсутствии искомой подстроки и при наличии подстроки возвращает часть строки, которая начинается с подстроки.
strpos()
имеет два обязательных параметра - искомая строка и подстрока и необязательный параметр определяющий позицию, с которого начинается поиск подстроки. В случае вхождения подстроки возвращает номер символа, с которого начинается подстрока.
substr()
возвращает часть строки, начиная с заданной позиции. Эта функция получает два аргумента - исходную строку и начало позиции. Может задаваться необязательный параметр задающий число возвращаемых символов. Если вторым аргументом будет отрицательное число, то отсчет начинается с конца строки.
$client="bender@mail.ua";
if ($ua_client = substr($client,-3)==".ua")
print "Оплата производится в гривнах";
else
print "Оплата производится в EURO";
Функция substr_replace()
позволяет заменить часть строки. Аргументами функции являются обрабатываемая строка, подставляемый текст и начальный индекс. Необязательным параметром является четвертый аргумент, определяющий длину вырезаемой строки. Функция находит часть строки определяемую начальным индексом и заданной длиной вырезаемой подстроки, заменяет эту часть и возвращает измененную строку.
trim()
. Для удаления пробела в конце строки используется функция chop()
. Для очистки начала строки от символов табуляции, пробелов и пустых строк используется функция ltrim()
.
print
и echo
. Для вывода форматированных строк используется функция printf()
, синтаксис которой во многом сходен с аналогом этой функции в С. Отметим некоторые особенности оператора форматированного вывода. В нем можно указать количество позиций для выводимой информации, указав размер поля сразу за знаком %. Например, printf("10s\n","десять");
указывает, что запись будет выводиться в поле размером в десять значений. По умолчанию поле выравнивается по правому краю. Для выравнивания по левому краю следует поставить знак минус перед определителем ширины поля, например, printf("-10s\n","десять");
Функция printf
выводит данные в окно браузера. Для того, чтобы отформатированное значение сохранить в переменной, следует использовать функцию sprintf()
с тем же синтаксисом.
$cash=spintf("%.2",3.33333);
print "Остаток на счету $cash";
будет сообщение
Остаток на счету 3.33
В PHP есть две функции специально предназначенные для работы с косой чертой. Это AddSlashes()
, добавляющая косую черту к строке аргумента и StripSlashes()
ее удаляющую.
Работа с формами.
При взаимодействии PHP с формой HTML действию ACTION
, выполняемому формой, должно быть присвоено имя PHP-сценария. В общем случае значением атрибута ACTION
является URL-адрес, загружаемый при нажатии кнопки SUBMIT
. Данные, введенные клиентом в форму, будут отправлены по этому адресу с использованием метода определенного атрибутом METHOD
. Это может быть либо GET
или POST
. В первом случае все данные введенные в форму будут высланы в виде строки присоединенной к URL-адресу. При использовании метода POST
они будут отправлены отдельным пакетом. Получение данных PHP от формы зависит от стиля определения PHP. В случае использования сокращенного стиля переменные формы передаются в скрипт PHP также как аргументы передаются в функцию. При использовании длинного стиля определения PHP переменные формы, в зависимости от метода отправки, нужно получать из массивов $HTTP_POST_VARS
или $HTTP_GET_VARS
.
Во время отсылки данных автоматически создается набор переменных окружения, описывающих как клиента, так и сервер. Приведем наиболее часто встречающиеся переменные окружения.
Переменная | Описание |
$HTTP_USER_AGENT | Информация о клиенте (название и версия) |
$REMOTE_ADDR | IP-адрес клиента |
$REQUEST_NETHOD | Метод запроса GET или POST
|
$QUERY_STRING | При запросе GET данные переданные вместе с URL
|
$HTTP_REFERER | Адрес страницы, с которой был сделан запрос |
Приведем пример использования PHP для обработки данных с HTML - форм.
Создадим файл shop.html. .
<HTML><HEAD> <TITLE>Запрос информации</TITLE> <BODY><CENTER><h3>Информация о наших товарах</h3><P> <TABLE WIDTH = 400><TR><TD align = right><FORM ACTION="email.php" METHOD="POST">Ваша фамилия и имя: <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30"><P>Ваш email: <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30"><P>Меня интересуют: <SELECT NAME="preference" ><OPTION value ="Стулья">Стулья <OPTION value = "Рога">Рога <OPTION value = "Копыта">Копыта </SELECT><P> <INPUT TYPE="submit" VALUE="Отправить запрос!"> </FORM></TD></TR></TABLE></CENTER> </BODY></HTML>В нем мы указали, что данные формы будут обрабатываться файлом email.php. Приведем его содержание:
<? $name=$HTTP_POST_VARS["name"]; $email=$HTTP_POST_VARS["email"]; $preference=$HTTP_POST_VARS["preference"]; PRINT "<CENTER>";PRINT "<h3>ООО Рога и копыта </h3> приветствует Вас, $name. "; PRINT "<p>"; PRINT "Вас интересуют $preference. <p> Подробную информацию мы пошлем вам на email:<i> $email.</i>"; PRINT "</CENTER>";?>Теперь, если пользователь вызовет shop.html и наберет в форме имя "Остап Бендер", email: bender@mysite.com и скажет, что его интересуют "Стулья", а после этого нажмет "Отправить запрос!", то в ответ вызовется email.php, который выведет на экран примерно следующее:
Вас интересуют Стулья.
Подробную информацию мы пошлем вам на email: bender@mysite.com
Режим блокировки | Тип блокировки | Описание |
1 | Частичная | Разрешает другим процессам читать файл, но запрещает запись |
2 | Полная | Запрещает другим процессам как чтение, так и запись в файл |
3 | Освобождение | Снимает блокировку файла |
Для отправления электронной почны используется функция PHP mail()
. Приведем ее синтаксис
mail(string_address, string_theme, string_message, string [heading])Первые три параметра представляют собой адрес, по которому отправляется сообщение, строку темы и текст сообщения. Четвертый параметр представляет собой дополнительные заголовки - например, сообщения From, Reply-To и подобное. В качестве разделителя можно использовать символ \n.
Функции FTP (File Transfer Protocol) используются для передачи файлов между хостами. Так как по умолчанию эти функции не подключаются, то при установке PHP следует с файл php.ini добавить строку
extension=php_ftp.dllСоединение с FTP сервером обеспечивается функцией
ftp_connect()
аргументом которой является
адрес хоста. Необязательным аргументом является номер порта, через который происходит соединение (по умолчанию стандартный FTP порт - 21). При удачном соединении возвращает дескриптор соединения, в противном случае возвращает false
.
Результат регистрации на сервере возвращается функцией ftp_login()
. Функция имеет три аргумента - дескриптор соединения, имя пользователя и пароль. Как правило, если пользователь анонимный, в качестве пароля используют адрес его электронной почты.
Разрыв соединения производится функцией ftp_quit()
.
fopen()
и вызвать функцию закачки ftp_fget()
. Эта функция имеет четыре аргумента- дескриптор ftp-соединения, дескриптор локального файла, путь к удаленному файлу и режим доступа к файлу - FTP_BINARY или FTP_ASCII, в зависимости от того, скачивается ли бинарный файл или текстовый.
Для загрузки файла от клиента к серверу служит функция ftp_fput()
с тем же синтаксисом.
Вместо функции ftp_fget()
можно использовать функцию ftp_get()
с синтаксисом
ftp_fget(int ftp_connection, string path_local_file,string path_downloads_file, mode)В отличие от функции
ftp_fget()
, в этом случае не требуется открытия локального файла - просто нужно указать имя локального файла на клиентской машине.
Аналогично, вместо функции ftp_fput()
можно использовать функцию ftp_put()
ftp_put(int ftp_connection,string path_downloads_file, string path_local_file, mode).
Приведем пример скрипта для загрузки файла с FTP-сервера.
<html> <head> <title> Downloads file </title> </head> <body> <? $host="dnepr.org.ua"; //адрес хоста $user="anonymous"; //имя пользователя $password ="my@mail.net"; //пароль (адрес, полученный в результате регистрации) $download_file="/articles/web_programming/Net.zip"; //скачиваемый файл $local_file="$DOCUMENT_ROOT/downloads/net.zip"; //имя скачиваемого файла на клиентской машине $ftpcon=ftp_connect($host); if (!$ftpcon) { print "Нет соединения с FTP-сервером<p>"; exit; } else print "Соединение с FTP-сервером прошло успешно"; @ $reg=ftp_login($ftpcon, $user, $password); if (!reg) { print "Зарегистрируйтесь"; ftp_quit($ftpcon); exit; } $f=fopen($local_file,"w"); if (!ok=ftp_fget($ftpcon,$f,$download_file,FTP_BINARY)) { print "Файл $download_file не существует"; ftp_quit($ftpcon); exit; } fcose($f); print "Закачка файла прошла удачно"; ftp_quit($ftpcon); ?> </body> </html>Для определения размера файла на удаленном сервере, можно использовать функцию
int frp_size(int ftp_connection,string path_file)возвращающую размер файла в байтах и -1 в случае ошибки.
Для получения списка файлов в определенном каталоге, используется функция ftp_nlist()
$listing=ftp_nlist($ftpcon,"path_dir"); foreach($listing as $filename) print "$filename <br>";