Куки HTTP
PHP прозрачно поддерживает куки HTTP, как определено
в Netscape's Spec. Куки это механизм хранения данных на удалённом браузере и отслеживания
или идентификации с их помощью ответов пользователя. Вы можете устанавливать куки
функцией setcookie(). Куки являются частью HTTP-шапки/header, поэтому функция
SetCookie обязана вызываться до любого вывода, высылаемого браузеру. Это такое
же ограничение, как и для функции header(). Любые куки, высылаемые вам
с этого клиента, автоматически конвертируются в PHP-переменную точно так же, как
и GET и POST-данные. Программа
начальной загрузки, содержащаяся в ВООТ-секторе
Если вы хотите присвоить
несколько значений одной куке, просто добавьте [] в имя куки. Например:
setcookie("MyCookie[]", "Testing", time()+3600); |
Обратите внимание, что эта кука/cookie замещает предыдущую куку с тем
же именем, если только path или domain не отличаются. Психолог
Л. Выгодский Так, для приложения shopping cart вы можете захотеть сохранить
счётчик/counter и передать его. То есть:
Пример 7-3. SetCookie
$Count++; setcookie("Count", $Count, time()+3600); setcookie("Cart[$Count]",
$item, time()+3600); | |
Переменные
окружения
PHP автоматически делает переменные окружения доступными как
нормальные переменные PHP. Мощность Для характеристики работоспособности и быстроты
совершения работы введено понятие мощности.
Мощность — работа, выполненная в единицу времени:
echo $HOME; /* Показывает переменную окружения HOME, если она установлена.
*/ |
Поскольку информация, приходящая через механизмы
GET, POST и Cookie, также автоматически создаёт переменные PHP, иногда бывает
лучше явно считывать переменную из окружения, чтобы гарантировать получение правильной
версии. Функция getenv() может использоваться для этого. Вы можете также
установить переменную окружения функцией putenv().
Обычно PHP не изменяет имена переменных
при передаче их скрипту. Однако нужно отметить, что точка (dot, period, full stop)
не является правильным символом в имени PHP-переменной. Посмотрим на такое имя:
Живопись и графика
Японская живопись очень разнообразна не только по содержанию, но и по формам:
это настенные росписи, картины-ширмы, вертикальные и горизонтальные свитки, исполнявшиеся
на шёлке и бумаге, альбомные листы и веера.
$varname.ext; /* неправильное имя переменной */ |
Разборщик видит теперь имя переменной $varname, за которым
идёт операция конкатенации строк, а затем идёт голая строка (т.е. строка без кавычек,
которая не совпадает ни с одним известным ключевым или зарезервированным словом)
'ext'. Очевидно, это не тот результат, который ожидался.
Поэтому важно подчеркнуть,
что PHP будет автоматически заменять любые точки в именах входящих переменных
на символы подчёркивания.
Поскольку PHP определяет типы переменных и конвертирует
их (обычно) так, как нужно, не всегда бывает очевидно, какой тип имеет данная
переменная в данное время. PHP имеет несколько функций, которые определяют тип
переменной. Это gettype(), is_array(), is_float(), is_int(),
is_object() и is_string().
mcal_day_of_week
mcal_day_of_year mcal_days_in_month
mcal_delete_calendar mcal_delete_event
mcal_event_add_attribute mcal_event_init
mcal_event_set_alarm mcal_event_set_category
mcal_event_set_class mcal_event_set_description
mcal_event_set_end mcal_event_set_recur_daily
mcal_event_set_recur_monthly_mday
mcal_event_set_recur_monthly_wday
mcal_event_set_recur_none mcal_event_set_recur_weekly
mcal_event_set_recur_yearly
mcal_event_set_start mcal_event_set_title
mcal_expunge mcal_fetch_current_stream_event
mcal_fetch_event mcal_is_leap_year
mcal_list_alarms mcal_list_events
mcal_next_recurrence mcal_open
mcal_popen mcal_rename_calendar
mcal_reopen mcal_snooze
mcal_store_event mcal_time_valid
mcal_week_of_year mcrypt_cbc
mcrypt_cfb mcrypt_create_iv
mcrypt_decrypt mcrypt_ecb
mcrypt_enc_get_algorithms_name
mcrypt_enc_get_block_size mcrypt_enc_get_iv_size
mcrypt_enc_get_key_size mcrypt_enc_get_modes_name
mcrypt_enc_get_supported_key_sizes
mcrypt_enc_is_block_algorithm
mcrypt_enc_is_block_algorithm_mode
mcrypt_enc_is_block_mode mcrypt_enc_self_test
mcrypt_encrypt mcrypt_generic
mcrypt_generic_deinit mcrypt_generic_end
mcrypt_generic_init mcrypt_get_block_size
mcrypt_get_cipher_name mcrypt_get_iv_size
mcrypt_get_key_size mcrypt_list_algorithms
mcrypt_list_modes mcrypt_module_close
Переменные в PHP представлены знаком dollar с последующим именем переменной.
Имя переменной чувствительно к регистру символов.
Имена переменных следуют
тем же правилам, что и другие метки в PHP. Правильное имя переменной начинается
с буквы или символа подчёркивания, с последующими (в любом количестве) буквами,
числами или символами подчёркивания. Это можно выразить в виде регулярного выражения:
'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Примечание: для наших целей здесь - буквы это
a-z, A-Z и ASCII-символы от 127 до 255 (0x7f-0xff).
$var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // выводит "Bob,
Joe" $4site = 'not yet'; // неправильно; начинается с числа $_4site = 'not yet';
// правильно; начинается с символа подчёркивания/underscore $täyte = 'mansikka';
// правильно; 'ä' это ASCII 228. |
В PHP 3 переменные
всегда присваиваются по значению. То есть, если вы присваиваете выражение переменной,
всё значение оригинального выражения копируется в переменную назначения. Это означает,
к примеру, что после присвоения одной переменной другой переменной, изменение
одной из этих переменных не повлияет на другую.
PHP 4 предлагает другой
способ присвоения значений переменным: присвоение по ссылке. Это означает,
что новая переменная просто ссылается на (иначе говоря, "становится псевдонимом"
или "указывает на") оригинальную переменную. Изменения в новой переменной отражаются
на оригинале, и наоборот. Это означает также, что никакого копирования не происходит;
таким образом, присвоение происходит быстрее. Однако любое ускорение будет заметно
только в длинных циклах или при присвоении больших массивов или объектов.
Для
присвоения по ссылке просто присоедините амперсанд (&) к началу имени переменной
(исходной переменной). Например, следующий фрагмент кода выводит 'My name is Bob'
дважды:
<?php
$foo = 'Bob'; // присваивается 'Bob' переменной $foo $bar = &$foo; // ссылка
на $foo через $bar $bar = "My name is $bar"; // изменение $bar echo $bar; echo
$foo; // $foo также изменилась ?> |
Важно отметить,
что по ссылке можно присвоить только именованные переменные.
<?php $foo = 25; $bar = &$foo; // правильное присвоение
$bar = &(24 * 7); // неверно; ссылка на неименованное выражение function test()
{ return 25; } $bar = &test(); // неправильно ?> |
mcrypt_module_get_algo_block_size
mcrypt_module_get_algo_key_size
mcrypt_module_get_supported_key_sizes
mcrypt_module_is_block_algorithm
mcrypt_module_is_block_algorithm_mode
mcrypt_module_is_block_mode
mcrypt_module_open mcrypt_module_self_test
mcrypt_ofb md5 md5_file
mdecrypt_generic metaphone
method_exists mhash
mhash_count mhash_get_block_size
mhash_get_hash_name mhash_keygen_s2k
microtime min ming_setcubicthreshold
ming_устанавливаетcale ming_useswfversion
mkdir mktime move_uploaded_file
msession_connect msession_count
msession_create msession_destroy
msession_disconnect msession_find
msession_get msession_get_array
msession_getdata msession_inc
msession_list msession_listvar
msession_lock msession_plugin
msession_randstr msession_set
msession_set_array msession_setdata
msession_timeout msession_uniq
msession_unlock msql
msql_affected_rows msql_close
msql_connect msql_create_db
msql_createdb msql_data_seek
msql_dbname msql_drop_db
msql_dropdb msql_error
msql_fetch_array msql_fetch_field
msql_fetch_object msql_fetch_row
msql_field_seek msql_fieldflags
msql_fieldlen msql_fieldname
msql_fieldtable msql_fieldtype
msql_free_result msql_freeresult
msql_list_dbs msql_list_fields
msql_list_tables msql_listdbs
msql_listfields msql_listtables
msql_num_fields msql_num_rows
msql_numfields msql_numrows
msql_pconnect msql_query
msql_regcase msql_result
msql_select_db msql_selectdb
msql_tablename mssql_bind
mssql_close mssql_connect
mssql_data_seek mssql_execute
mssql_fetch_array mssql_fetch_assoc
mssql_fetch_batch mssql_fetch_field
mssql_fetch_object mssql_fetch_row
mssql_field_length mssql_field_name
mssql_field_seek mssql_field_type
mssql_free_result mssql_get_last_message
mssql_guid_string mssql_init
mssql_min_error_severity mssql_min_message_severity
mssql_next_result mssql_num_fields
mssql_num_rows mssql_pconnect
mssql_query mssql_result
mssql_rows_affected mssql_select_db
mt_getrandmax mt_rand
mt_srand muscat_close
muscat_get muscat_give
muscat_setup muscat_setup_net
mysql_affected_rows mysql_change_user
mysql_close mysql_connect
mysql_create_db mysql_data_seek
mysql_db_name mysql_db_query
mysql_drop_db mysql_errno
mysql_error mysql_escape_string
mysql_fetch_array mysql_fetch_assoc
mysql_fetch_field mysql_fetch_lengths
mysql_fetch_object mysql_fetch_row
mysql_field_flags mysql_field_len
mysql_field_name mysql_field_seek
mysql_field_table mysql_field_type
mysql_free_result mysql_get_client_info
mysql_get_host_info mysql_get_proto_info
mysql_get_server_info mysql_insert_id
mysql_list_dbs mysql_list_fields
mysql_list_tables mysql_num_fields
mysql_num_rows mysql_pconnect
mysql_query mysql_result
mysql_select_db mysql_tablename
mysql_unbuffered_query
Предопределённые
переменные
В PHP имеется большое количество предопределённых переменных,
доступных любому скрипту. Многие эти переменные, однако, невозможно полностью
задокументировать, так как они зависят от сервера, на котором происходит работа,
его версии и установок и других факторов. Некоторые из этих переменных будут недоступны
при запуске РНР из командной строки.
| Предупреждение! |
| В PHP 4.2.0 и позднее, набор по
умолчанию предопределённых переменных, доступных в глобальной области видимости,
изменён. Отдельные переменные ввода и сервера по умолчанию больше не размещаются
непосредственно в глобальной области видимости; они размещаются в суперглобальных
массивах. Вы можете форсировать старое поведение, установив register_globals
в 'On' в вашем файле php.ini. |
Начиная с версии
4.1.0, PHP предоставляет набор предопределённых массивов, содержащих переменные
web-сервера (если они имеются), окружения и пользовательского ввода. Эти новые
массивы более специализированы, так как автоматически являются глобальными - т.е.
автоматически доступны в любой области видимости. Поэтому их часто называют 'автоглобалы'
или 'суперглобалы'. (В PHP нет механизма реализации пользовательских суперглобалов.)
Если некоторые переменные в variables_order не установлены, их соответствующие
суперглобальные массивы также остаются пустыми.
Суперглобалы PHP
- $GLOBALS
-
Содержит ссылку на каждую переменную, доступную в данный
момент в глобальной области видимости данного скрипта. Ключами этого массива являются
имена глобальных переменных.
- $_SERVER
-
Переменные, установленные
web-сервером или как-либо иначе относящиеся к среде окружения выполнения текущего
скрипта. Аналогичен старому массиву $HTTP_SERVER_VARS (который ещё доступен,
но не рекомендуется).
- $_GET
-
Переменные, предоставляемые
скрипту через HTTP GET. Аналогичен старому массиву $HTTP_GET_VARS (который
ещё доступен, но не рекомендуется).
- $_POST
-
Переменные,
предоставляемые скрипту через HTTP POST. Аналогичен старому массиву $HTTP_POST_VARS
(который ещё доступен, но не рекомендуется).
- $_COOKIE
-
Переменные,
предоставляемые скрипту через HTTP cookies. Аналогичен старому массиву $HTTP_COOKIE_VARS
(который ещё доступен, но не рекомендуется).
- $_FILES
-
Переменные,
предоставляемые скрипту через HTTP post-загрузку файлов. Аналогичен старому массиву
$HTTP_POST_FILES (который ещё доступен, но не рекомендуется).
- $_ENV
-
Переменные, предоставляемые скрипту через среду окружения. Аналогичен старому
массиву $HTTP_ENV_VARS (который ещё доступен, но не рекомендуется).
- $_REQUEST
-
Переменные, предоставляемые скрипту через любой механизм пользовательского
ввода, и которым, следовательно, нельзя доверять.
-
Примечание:
при запуске из командной строки этот массив не включит вхождения argv
и argc; они представлены в массиве $_SERVER. Наличие и порядок
включения переменных в этот массив определяются в соответствии с директивой конфигурации
variables_order.
Этот массив не имеет прямых аналогов в версиях PHP до 4.1.0.
- $_SESSION
-
Переменные, зарегистрированные на данный момент в сессии скрипта. Аналогичен
старому массиву $HTTP_SESSION_VARS (который ещё доступен, но не рекомендуется).