Использование PHP
В этом разделе собраны наиболее часто
встречающиеся при написании PHP-скриптов ошибки.
-
- 10. Как
работать с PHP во FrontPage или другом HTML-редакторе, который настаивает на удалении
моего кода?
- 11. Где можно найти полный список предустановленных переменных,
и почему они не задокументированы в документации PHP? Китайская
живопись В китайской живописи получили самостоятельное значение жанры, ставшие
на многие века традиционными. Жанр жэнъу («люди») включал в себя всё, что касалось
изображения человека: портрет, исторические и мифологические сюжеты, сцены дворцового
быта. Прославленными живописцами этого жанра в Танский период были Янь Либэнь
(VII в.) и Чжоу Фан (УШ—IX вв.).
- 12. Я пытаюсь получить доступ к одной
из стандартных переменных CGI (таких как $DOCUMENT_ROOT или $HTTP_REFERER) в пользовательской
функции, и не могу их найти. Что не так? Эмоциональное
воздействие архитектуры
1.
Я хотел бы написать общий PHP-скрипт, обрабатывающий данные из любой формы. Как
мне узнать, какие переменные метода POST доступны?
Убедитесь, что track_vars
включена в вашем файле php.ini. Начиная с PHP 4.0.3, эта возможность
всегда on/включена. Когда track_vars on, она создаёт некоторые ассоциативные
массивы, самый важный из них: $_POST (он используется для вызова из $HTTP_POST_VARS
в PHP-версиях до 4.1.0). Так, чтобы написать общий скрипт для обработки
переменных метода POST, вам необходимо что-нибудь такое: Основу любой ОС составляет
управляющая программа,
foreach ($_POST as $var => $value) { echo "$var = $value<br>\n";
} |
2. Мне необходимо
конвертировать одинарные кавычки (') в backslash'и с одинарными кавычками. Как
это можно сделать с помощью регулярного выражения?
Прежде всего просмотрите
функцию addslashes(). Она делает в точности то, что вам нужно. Вы также
должны просмотреть директиву magic_quotes_gpc в файле php.ini. Теоретическая
механика Скорости и ускорения точек
вращающегося тела
Теоретическая механика
Основные понятия и аксиомы динамики. Понятие о трении Иметь представление
о массе тела и ускорении свободного падения, о связи между силовыми и кинематическими
параметрами движения, о двух основных задачах динамики.
3.
Когда я выполняю следующие действия, вывод печатается в неправильном порядке:
function
myfunc($argument) { echo $argument + 10; } $variable = 10; echo "myfunc($variable)
= " . myfunc($variable); |
что происходит? Чтобы
иметь возможность использовать в выражении результаты работы вашей функции (такие
как конкатенация с другими строками в предыдущем примере), вам необходимо return\возвратить
значение, а не echo() его.
4.
Эй, что происходит с моими символами newline?
<pre> <?php echo "This should be the first line.";
?> <?php echo "This should show up after the new line above."; ?>
</pre> |
В PHP блок кода завершается символами
"?>" или "?>\n" (где \n означает newline/символ новой
строки). Так, в приведённом примере, echo-предложения будут на одной строке, так
как PHP опускает символы newline после конца блока. Это означает, что необходимо
вставить дополнительный newline после каждого блока кода PHP, что заставить РНР
выводить новые строки.
толстовки
с логотипом вашей фирмыПочему PHP этого не делает? Потому что при форматировании
нормального HTML это обычно облегчает вам жизнь, поскольку эти newline вам не
нужны, а иначе пришлось бы создавать строки огромной длины или как-нибудь иначе
делать исходник страницы нечитабельным, чтобы получить нужный эффект.
5.
Я получаю сообщение 'Предупреждение!: Cannot send session cookie - headers already
sent...' или 'Cannot add header information - headers already sent...'.
Функциям
header(), setcookie() и функциям сессии необходимо добавлять шапки/headers
в поток вывода. Но шапки могут высылаться только до отправки любого другого содержимого.
Проверьте, не высылает ли ваш скрипт шапки уже после высылки содержимого.
6.
Мне нужен прямой доступ к информации шапки/header запроса. Как это сделать?
Функция
getallheaders() сделает это, если вы запускаете PHP как Apache-модуль.
Так, следующий участок кода покажет вам все шапки/headers запроса:
$headers = getallheaders(); foreach ($headers as $name => $content)
{ echo "headers[$name] = $content<br>\n"; } |
7.
Когда я пытаюсь использовать аутентификацию совместно с IIS, я получаю 'No Input
file specified'.
Здесь модель безопасности IIS терпит неудачу. Это проблема,
общая для всех CGI-программ, работающих под IIS. Здесь нужно создать обычный HTML-файл
(не разбираемый PHP) как страницу для входа в аутентифицируемой директории. Затем
используйте тэг META для перенаправления на PHP-страницу или сделайте ссылку на
PHP-страницу. Тогда PHP распозн́ает аутентификацию корректно. С модулем ISAPI
проблем не возникает. Это не должно влиять на другие NT web-серверы.
8.
Мой PHP-скрипт работает на IE под Lynx, но на Netscape часть вывода теряется.
Если я выполняю "View Source", я вижу содержимое в IE, но не в Netscape.
Netscape
более строг в отношении html-тэгов (таких как table), нежели IE. Может помочь
запуск вашего html-вывода через html validator Например, это может происходить
из-за отсутствия закрывающего тэга </table>.
Также и IE и Lynx игнорируют
любые NUL'и (\0) в потоке HTML, а Netscape - нет. Лучший способ проверить
это - скомпилировать версию командной строки PHP (известную также как CGI-версия)
и запустить ваш скрипт из командной строки. В *nix - пропустите его через od
-c и посмотрите на любые символы \0. Если вы в Windows, необходимо
найти редактор или другую программу, которая позволяет просматривать двоичные
файлы. Когда Netscape обнаруживает NUL в файле, он обычно ничего больше не выводит
на данной строке, а IE и Lynx - выводят.
pack parse_ini_file
parse_str parse_url
passthru pathinfo
pclose pdf_add_annotation
pdf_add_bookmark pdf_add_launchlink
pdf_add_locallink pdf_add_note
pdf_add_outline pdf_add_pdflink
pdf_add_thumbnail pdf_add_weblink
pdf_arc pdf_arcn
pdf_attach_file pdf_begin_page
pdf_begin_pattern pdf_begin_template
pdf_circle pdf_clip
pdf_close pdf_close_image
pdf_close_pdi pdf_close_pdi_page
pdf_closepath pdf_closepath_fill_stroke
pdf_closepath_stroke pdf_concat
pdf_continue_text pdf_curveto
pdf_delete pdf_end_page
pdf_end_pattern pdf_end_template
pdf_endpath pdf_fill
pdf_fill_stroke pdf_findfont
pdf_get_buffer pdf_get_font
pdf_get_fontname pdf_get_fontsize
pdf_get_image_height pdf_get_image_width
pdf_get_majorversion pdf_get_minorversion
pdf_get_parameter pdf_get_pdi_parameter
pdf_get_pdi_value pdf_get_value
pdf_initgraphics pdf_lineto
pdf_makespotcolor pdf_moveto
pdf_new pdf_open
pdf_open_ccitt pdf_open_file
pdf_open_gif pdf_open_image
9. Как мне смешать XML и PHP? Он жалуется
на мои тэги <?xml>!
Вам необходимо выключить краткие тэги/short
tags, установив short_tags в 0 в файле php.ini, или использовать подходящую
директиву Apache. Вы можете использовать и раздел <File>, чтобы делать это
селективно.
10. Как работать с PHP во
FrontPage или другом HTML-редакторе, который настаивает на удалении моего кода?
Проще
всего включить использование ASP-тэгов в вашем коде PHP. Это позволит использовать
ограничители кода <% и %> в стиле ASP. Некоторые популярные HTML-реакторы
обрабатывают эту ситуацию более интеллигентно (на данный момент). Чтобы включить
тэги в стиле ASP, вы должны установить переменную asp_tags в php.ini
или использовать подходящую директиву Apache.
11.
Где можно найти полный список предустановленных переменных, и почему они не задокументированы
в документации PHP?
Лучше всего вставить часть <?php phpinfo();
?> на страницу и загрузить её. Это покажет все виды информации
о вашей установке PHP, включая список переменных окружения, а также специальные
переменные, установленные вашим web-сервером. Этот список действительно не может
быть задокументирован в документации PHP, поскольку он будет отличаться для каждого
сервера.
12. Я пытаюсь получить доступ
к одной из стандартных переменных CGI (таких как $DOCUMENT_ROOT или $HTTP_REFERER)
в пользовательской функции, и не могу их найти.
Что не так?
Переменные
окружения являются нормальными глобальными переменными, поэтому вы обязаны либо
объявлять их как глобальные переменные в вашей функции (используя "global
$DOCUMENT_ROOT;", например) или использовать массив глобальных переменных
(т.е. "$GLOBALS["DOCUMENT_ROOT"]".
pdf_open_image_file
pdf_open_jpeg pdf_open_memory_image
pdf_open_pdi pdf_open_pdi_page
pdf_open_png pdf_open_tiff
pdf_place_image pdf_place_pdi_page
pdf_rect pdf_restore
pdf_rotate pdf_save
pdf_scale pdf_set_border_color
pdf_set_border_dash pdf_set_border_style
pdf_set_char_spacing pdf_set_duration
pdf_set_font pdf_set_horiz_scaling
pdf_set_info pdf_set_info_author
pdf_set_info_creator pdf_set_info_keywords
pdf_set_info_subject pdf_set_info_title
pdf_set_leading pdf_set_parameter
pdf_set_text_matrix pdf_set_text_pos
pdf_set_text_rendering pdf_set_text_rise
pdf_set_value pdf_set_word_spacing
pdf_setcolor pdf_setdash
pdf_setflat pdf_setfont
pdf_setgray pdf_setgray_fill
pdf_setgray_stroke pdf_setlinecap
pdf_setlinejoin pdf_setlinewidth
pdf_setmatrix pdf_setmiterlimit
pdf_setpolydash pdf_setrgbcolor
pdf_setrgbcolor_fill pdf_setrgbcolor_stroke
pdf_show pdf_show_boxed
pdf_show_xy pdf_skew
pdf_stringwidth pdf_stroke
pdf_translate pfpro_cleanup
pfpro_init pfpro_process
pfpro_process_raw pfpro_version
pfsockopen pg_cancel_query
pg_client_encoding pg_close
pg_connect pg_connection_busy
pg_connection_reset pg_connection_status
pg_copy_from pg_copy_to
pg_dbname pg_end_copy
pg_escape_bytea pg_escape_string
pg_fetch_array pg_fetch_object
pg_fetch_row pg_get_result
pg_host pg_last_notice
pg_lo_seek pg_lo_tell
pg_options pg_pconnect
pg_port pg_put_line
pg_result_error pg_result_status
pg_send_query pg_set_client_encoding
pg_trace pg_tty pg_untrace
php_logo_guid php_sapi_name
php_uname phpcredits
phpinfo phpversion
pi png2wbmp popen
pos posix_ctermid
posix_getcwd posix_getegid
posix_geteuid posix_getgid
posix_getgrgid posix_getgrnam
posix_getgroups posix_getlogin
posix_getpgid posix_getpgrp
posix_getpid posix_getppid
posix_getpwnam - posix_getpwuid
posix_getrlimit posix_getsid
posix_getuid posix_isatty
posix_kill
Переменные вне PHP
HTML-формы
(GET и POST)
Когда форма отправляется в PHP-скрипт, любые переменные этой
формы автоматически делаются доступными скрипту PHP. Если опция конфигурации track_vars
включена/on, то эти переменные будут находиться в ассоциативных массивах $_POST,
$_GET и/или $_FILES, в соответствии с источником переменной
в вопросе.
Пример 7-1. Простая
переменная формы
<form action="foo.php" method="post"> Name: <input type="text"
name="username"><br> <input type="submit"> </form> |
|
Когда такая форма отправляется на сервер, значение
из поля ввода text будет доступно в $_POST['username']. Если директива
конфигурации register_globals включена/on, то эта переменная будет также доступна
как $username в глобальной области видимости.
Примечание:
директива конфигурации magic_quotes_gpc действует на значения Get, Post и
Cookie. Если она включена, значение (It's "PHP!") автоматически становится
(It\'s \"PHP!\"). Мнемонизирование необходимо для вставки в БД. См. также addslashes(),
stripslashes() и magic_quotes_sybase.
PHP также понимает
массивы в контексте переменных формы (см. соответствующий faq). Вы можете, например,
сгруппировать взаимосвязанные переменные или использовать эту возможность для
запроса значений из списка множественного выбора select:
Пример 7-2. Более сложные переменные формы
<form action="array.php" method="post"> Name: <input
type="text" name="personal[name]"><br> Email: <input type="text"
name="personal[email]"><br> Beer: <br> <select multiple
name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness
<option value="stuttgarter">Stuttgarter Schwabenbräu </select>
<input type="submit"> </form> | |
В PHP 3 использование переменной массива формы ограничено одномерными
массивами. В PHP 4 таких ограничений нет.
При отправке формы возможно использование
изображения/image вместо стандартной кнопки submit с помощью тэга такого вида:
<input type="image" src="image.gif" name="sub"> |
Когда пользователь щёлкает в каком-либо месте изображения, соответствующая
форма передаётся на сервер с двумя дополнительными переменными: sub_x и sub_y.
Они содержат координаты щелчка. Опытные программисты могут заметить, что фактические
имена переменных, отправляемые браузером, содержат точку, а не символ подчёркивания,
но PHP конвертирует точку в символ подчёркивания автоматически