Archive for Январь, 2008

Дополнением переменной Salphabet

/* Создать алфавитный массив с ключами от А до Z и значениями от 0 до 25 соответственно */
$alphabet - array_flip(range(’A', ‘£’)); Scryptogram = range(’A', ‘Z’);
/* Случайное тасование поисковой таблицы, используемой для генерации криптограмм */ shuffle(Scryptogram);
Как показано в листинге 2.17, первый шаг, предпринимаемый в этом сценарии — это инициализация генератора случайных чисел. Как и в случае с arrayrand (}, функции shuffle () это необходимо для правильной работы. После этого переменная Smessage (представляющая исходную строку, которую нужно закодировать) инициализируется и преобразуется в верхни (more…)

Tags: , ,

Related posts

Преобразование строк в массивы и обратно

Как уже говорилось в главе 1, вы можете использовать множество методов обработки строк в РНР. Одним из очень распространенных способов применения массивов является обработка списка значений, представленных в виде строки, как показано в следующем примере:
John Coggeshall, Max Smith, Mary Johnston (more…)

Tags: , ,

Related posts

Дополнительные сведения о массивах

Хотя в этой главе было представлено достаточно много информации, касающейся работы с массивами в РНР, на эту тему можно написать и целую кни>у. Дополнительную информацию о массивах, включая полный список PHP-функций, работающих с массивами, можно получить в онлайновом руководстве по РНР, доступном по адресу http://www,php,net/manual/. Настоящая глава не претендует на полное описание работы с массивами. Тем не менее, она служит (more…)

Tags: , ,

Related posts

Аналогичным образом


function assign_key() { return 1 d’;
} .
$foo['a'] » 1; Sfoofb’] = 2; Sfoofc’] = 3;
Sfoo[assign_key()] = 4; /*3начение ключа присваиваемого элемента равно ‘d’*/

Аналогичным образом можно манипулировать каждым из этих четырех ключей и использо (more…)

Tags: , ,

Related posts

Расширенные сеансы Пользовательское управление сеансами

Разобравшись с основами использования сеансов, давайте внимательно изучим их внутреннее устройство. По умолчанию РНР предлагает три внутренних метода хранения данных сеанса, указываемые в session.save_handler: внутренний формат файла PHP-сеанса {определенный php). внутри базы данных SQLite (определенный sqlite) и формат пакета WDDX (определенный wddx).
НА ЗАМЕТКУ |-
Поддержка сеансов WDDX требует, чтобы поддержка WDDX была скомпилирована в РНР. (more…)

Tags: , ,

Related posts

Реализация cookie-наборов в сценариях

Теперь, когда мы познакомились с реализацией cookie-наборов, посмотрим, как применить эти знания для создания cookie-наборов, используемых внутри сценариев.
Наиболее очевидным методом установки cookie-набора в PHP-коде является создание заголовка Set-Cookie с помощью PHP-функции header (), как показано в листинге 6.2.
Листинг 6.2. Установка cookie-набора с использованием функции header ()

header("Set-Cookie: mycookie=myvalue; path=/; domain=.coggeshall.org");

Поскольку эта функция используется для отправки HTTP-заголовков, она должна быть выполнена до пересылки содержимого {например, с помощью операторов echo или print). Хотя это работает, такой метод не может быть рекомендован для установки cookie-наборов с использованием PHP-функций. Чуть позже мы рассмотрим функцию setcookie (), используемую для решения этой задачи.
Второй (и, возможно, менее известный) метод установки cookie-наборов — использование HTMI.-дескрипторов. В частности, HTML-дескриптор <МЕТА> можно использовать для имитации HTTP-заголовков внутри HTML-страницы, применяя атрибуты HTTP-EQUIV и CONTENT. Например, чтобы установить такой же cookie-набор, как в листинге 6.2, можно воспользоваться HTML-кодом, представленным в листинге 6.3.
Листинг 6.3. Установка cookie-набора с использованием HTML-дескриптора <мета>

<МЕТА HTTP-EQUIV-"Set-Cookie"
CONTENT="mycookie=myvalue; path=/; domain=.coggeshall.org">

НА ЗАМЕТКУ -
Дескриптор хорош не только для установки cookie-наборов. Несмотря на то что он зависит от используемого браузера, большинство известных браузеров поддерживают НТТР-э а головки, заключенные в дескриптор <МЕТА>. Например, с помощью HTTP-заголовка Refresh можно перенаправить браузер на новую страницу:
<МЕТА HTTP-EQUIV=11 Refгеsh" CONTENT="0; url=http://www.coggeshall.org">
Третий и возможно наиболее известный метод установки cookie-наборов — использование PHP-функции setcookie (). Функция setcookie [) имеет следующий синтаксис:
setcookie (Sname [,$value [, $expire [, $path [, Sdomain [, $secure] ] ] ] ]);
Эта функция применяется как для создания, так и уничтожения cookie-наборов в клиентском браузере. Как и в случае с отсылкой HTTP-заголовков из РНР-сценария, эта функция должна быть выполнена до отправки клиенту любого содержимого. Перед тем как перейти к исследованию этой функции, вкратце рассмотрим каждый параметр. Для большинства частей назначение каждого параметра такое же, как и у за-головка Set-Cookie, рассмотренного ранее. В частности, Sname представляет имя переменной cookie-набора, Svalue — ее текущее значение, Sexpire — метка времени Unix актуальности cookie-набора, Spath — путь на сервере, для которого создан cookie-набор, Sdoraain — домен, для которого создан cookie-набор, и, наконец, Ssecure — это булевское значение, показывающее, что cookie-набор создан только для защищенного HTTP.
При использовании функции setcookie!) любые необязательные параметры мо-гуг быть при необходимости установлены в NULL. В листинге 6.4 показа пример применения функции setcookie!) для установки cookie-набора, аналогичного приведенному в листинге 6.2.
Листинг 6.4, Использование функции setcookie ()

setcookie("mycookie", "myvalue", NULL, "/", ".coggeshall.org");

Если нужно изменить значение cookie-набора, как в случае, когда мы напрямую работали с заголовком Set-Cookie, нужно убедиться, что значения Spath, Sdomain и Sname функции setcookie!) идентичны первоначально использованным. Для удаления cookie-набора можно использовать небольшую хитрость — задать параметр $value равным NULL (при этом параметры Spath, Sdomain и Sname должны быть установлены должным образом). Пример удаления cookie-набора, установленного в листинге 6.4, представлен в листинге 6.5.
Листинг 6.5. Удаление cookie-набора с использованием функции setcookie ()

setcookie("mycookie", NULL, NULL, ".coggeshall.org");

После того как cookie-набор установлен, он остается неактивным до момента, когда браузер запросит у Web-сервера другой документ. Для получения доступа к значению cookie-набора, полученного от браузера, РНР использует суперглобальный массив S_C0OKIE. Этот массив аналогичен массивам 5GET и $_P0ST за исключением того, что он хранит значения cookie-наборов. Каждый ключ в этом суперглобальном массиве представляет отдельный cookie-набор (имя ключа — это имя переменной cookie-набора) .
Для иллюстрации этого примера выполним обитую задачу и напишем сценарий, определяющий, активен ли cookie-набор на клиентском браузере. Для этого, во-первых, потребуется создать cookie-набор, а потом заставить браузер перезагрузить страницу. Когда браузер перезагрузит страницу, он, если примет этот cookie-набор, немедленно вернет его серверу. Проверив наличие этого cookie-набора при перезагрузке страницы, можно проверить работоспособность cookie-набора.
Единственная хитрость в этом сценарии — определить, был ли установлен cookie-набор или браузер по какой-либо причине его отверг. Для того чтобы дать возможность сценарию определить, был ли установлен cookie-набор, при перенаправлении браузера необходимо использовать параметр GET, как показано в листинге 6.6.

Tags: , ,

Related posts

Обработка форм

При работе с HTML-формами с ПОМОЩЬЮ тех или иных методов возникает необходимость в обработке данных этих форм. Часто, даже если нет необходимости что-нибудь делать с данными формы, требуется выполнять некоторую проверку. Прежде чем использовать данные формы в сценариях, настоятельно рекомендуется выполнять их проверку.
Стандартная обработка и проверка форм (more…)

Tags: , ,

Related posts

Использование foreach () для итерации по массиву


Smyarray » array(’php’, ‘is’, ‘cool’);
I* Получить ключ и значение очередного элемента */ £oreach(Smyarray as Skey => Sval) {
echo “Значение с индексом Skey равно: $val
“; } ‘
/* Извлекаем только значения элементов и игнорируем ключи */ foreach(Smyarray as $val) ( echo “Значение: Sval
“;
}

В листинге 2.8 первый оператор foreach () работает идентично соответствующему циклу for () из предыдущего примера. Также отметим, что переменная Skey не требуется, как показано во втором примере с foreach ().
НА ЗАМЕТКУ -
Как и для всех управляющих структур РНР, существуют альтернативы оператору foreach (), как показано ниже:
foreach( as [Skeyvar =>] Sval): endforeach; Обратные вызовы массивов
Вероятно, одним из наиболее интересных свойств массивов РНР является возможность ассоциировать их с функциями обратного вызова. Что же представляют собой функции обратного вызова и как они используются с массивами? Функции обратного вызова создаются вами (разработчиком), а затем вызываются изнутри РНР для выполнения манипуляций определенного назначения. В данном случае функции обратного вызова массивов создаются для модификации содержимого массивов методом “значение за значением”. Чтобы лучше понять функции обратного вызова массивов, рассмотрим примеры кода, реализующего их.
Первой такой функцией будет аггау_гаар (). Эта функция, возможно, наиболее близка к функциям обратного вызова, доступным разработчику РНР. Она принимает не менее двух параметров: первый — это строка (или массив, если обратный вызов выполняется из объекта), содержащая имя функции обратного вызова, а каждый последующий параметр является одним (или более) параметром, как показано ниже:
array_map(Scallback, $array_varl [, Sarray_var2, ...])
Когда вы создаете свою функцию обратного вызова, вам гсужно знать, сколько параметров она должна принимать. Обычно вам понадобится столько параметров, сколько массивов вы хотите передать в arraymapt). Поэтому если вы передаете два массива array_map(), планируйте свою функцию так, что она должна будет принять два параметра. Взглянем на небольшой фрагмент кода, представленный в листинге 2.9.
Листинг 2.9. Использование функции аггау_шар()

function my_callback($var) { echo “Значение: Svar
“; return strtoupper(Svar);
)
Smyarray = array(”Поздравляем”, “это”, “обратный”, “вызов!”); Snewarray = array_map(”my_callback”, Smyarray); echo “

“; print_r(Snewarray); echo “
“;

На заметку -
Теперь, когда мы имеем депо с массивами, следует обратить внимание на использование функции print_r (). Эта функция довольно симпатично выводит содержимое массива, переданного ей в параметре (в том числе и многомерного массива). Однако этот вывод не вполне предназначен для просмотра в Web-браузере. Отсюда и необходимость поместить его в пару HTML-дескрипторов
.
Поскольку этот код не совсем очевиден, разберем его работу более детально. Если пока не обращать внимания на функцию, видно, что здесь создается массив Smyarray, после чего вызывается функция array_mapl). Когда она вызывается, то проходит по всем элементам переданного ей массива (в данном случае Smyarray) и вызывает указанную вами функцию my_callback (), передавая ей индивидуальное значение каждо-го элемента и создавая новый массив из элементов, возвращаемых вашей функцией обратного вызова. Функция обратного вызова сначала отображает переданный ей элемент, а затем возвращает его преобразованным в символы верхнего регистра с помощью PHP-функции strtoupper (). То есть, после выполнения этого сценария в результате получается новый массив Snewarray, идентичный исходному массиву Smyarray, но с элементами-строками в верхнем регистре. Так выглядит вывод, полученный из данного сценария;
Значение: Поздравляем Значение: это Значение: обратный Значение: вызов! Array { ■
[0] => ПОЗДРАВЛЯЕМ
[1] => ЭТО
[2] => ОБРАТНЫЙ
[3] »> ВЫЗОВ!
>
НА ЗАМЕТКУ
Функции обратного вызова не обязательно должны быть пользовательскими. Фактически, в предыдущем примере, если вам не нужен вывод информации клиенту, вы могли просто определить в качестве функции обратного вызова стандартную функцию strtoupper [) и получить тот же результат.
Аналогично функция array_map[) может использоваться с множеством массивов, как показано в листинге 2.10.
Листинг 2.10. Использование функции array_map(}

function mul_callback(Sx, Sy) ( return Sx * Sy;
)
Snumbers_l = array (2, A, 5); Snumbers_2 = array (3, A, 5);
Sanswer = arrayjnap("mul_callback", Snumbers_l, $numbers_2); print_r(Sanswer);

В данном случае вы используете два массива (Snumbers^l и $numbers_2) вместе с функцией array_map[) для выполнения простого вычисления и помещения результата в другой массив. Ожидаемый вывод будет выглядеть так:
Array
{
[0] => б [1] => 16 [2] => 25
}Теперь, когда вы получили некоторое представление о работе функций обратного вызова, рассмотрим ряд других PHP-функций, предназначенных для работы с массивами, которые также используют модель обратного вызова. Следующая функция применяется для эффективной фильтрации значений массива на базе возвращаемого значения вашей функции обратного вызова — это функция array_f ilter 0 ■ В отличие от ранее рассмотренной функции arrayjnapO, array_filter{) имеет слегка отличающийся (обратный) синтаксис:
array_filter(Sinput, Scallback)
Sinput — это входной массив, a Scallback — функция обратного вызова, которая с ним работает. Как и в случае С array_map (), array^f ilter () проходит по каждому из элементов массива и передает его в нужную функцию обратного вызова.
Однако, в отличие от случая с аггау_гаар (), функция обратного вызова, переданная array_f ilter (), должна возвращать булевское значение. Если она возвратит false, то переданный ей параметр не будет включен в массив, возвращаемый array_f ilter (). Конечно, если функция обратного вызова вернет true, то значение будет включено в возвращаемый массив. В листинге 2.11 эта концепция иллюстрируется использованием array^f ilter () для выделения всех целых элементов массива, значение которых больше или равно 10.
Листинг 2.11. Использование функции array_filter ()

function filter_values(Svalue) f if($value > 10) return true; return false;
)
$myints = array(123,54,2,3,42,23,4,2,12); Sfiltered = array_filter($myints, “filter_values”); print_r(Sfiltered);
7>
Как и можно было ожидать, в результате выполнении этого сценария будет создан новый массив $f iltered, содержащий значения 123, 52, 42, 23 и 12.
Следует отметить, что при работе функций array_f ilter () и arrayjnap |) поддерживается исходное отношение ключей. Это значит, что массив $filtered из листинга 2.11 будет содержать целый ключ 4, значение которого равно 42 — даже несмотря на то, что некоторые элементы исходного массива $myints будут удалены. Не все функции поддерживают отношения ключей, поэтому важно обращаться к руководству по РНР и выяснять, когда такое поведение желательно.

Tags: , ,

Related posts

Возврат значения по ссылке

Не волнуйтесь, если поначалу сценарий покажется непонятным. Ссылки — это одна из наиболее сложных для понимания концепций в РНР, потому требуется некоторая практика, чтобы разобраться в них.
Также следует отметить, что вы не должны передавать параметры по ссылке во время выполнении и а объявлении функции. Размещение ссылок в любом из этих двух случаев будет иметь один и тот же эффект. Единственная разница в том, что если пара метры-ссылки объявлены в самой функции, то при всех ее вызовах параметры будут передаваться по ссылке.
Наряду с передачей переменных в функции по ссылке, РНР поддерживает возвращаемые ссылочные переменные. В примере, представленном в листинге 1.29, эта концепция (more…)

Tags: , ,

Related posts

Динамические переменные и функции Динамические переменные

Кроме обычного манипулирования данными, РНР позволяет создавать переменные, идентификаторы которых {например, Sfoo — идентификатор) неизвестны до тех пор, пока сценарий не запущен. Эта концепция “переменных переменных” хота и не применяется в ежедневной разработке, все же в некоторых случаях совершенно незаменима, как вы это увидите далее в книге, когда будут рассматриваться формы. Так выглядит синтаксис, применяемый в случаях, когда вы хотите обратиться к некоторому значению по имени переменной: (more…)

Tags: , ,

Related posts