|
В этом разделе собраны наиболее часто встречающиеся при написании
PHP-скриптов ошибки. - 1. Я хотел бы написать общий PHP-скрипт, обрабатывающий данные из любой
формы. Как мне узнать, какие переменные метода POST доступны?
- 2. Мне необходимо конвертировать одинарные кавычки (") в backslash"и с
одинарными кавычками. Как это можно сделать с помощью регулярного выражения?
- 3. Когда я выполняю следующие действия, вывод печатается в неправильном порядке:
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable); | что происходит?
- 4. Эй, что происходит с моими символами newline?
<pre>
<?php echo "This should be the first line."; ?>
<?php echo "This should show up after the new line above."; ?>
</pre> |
- 5. Я получаю сообщение "Предупреждение!: Cannot send session cookie - headers
already sent..." или "Cannot add header information - headers already sent...".
- 6. Мне нужен прямой доступ к информации шапки/header запроса. Как это сделать?
- 7. Когда я пытаюсь использовать аутентификацию совместно с IIS, я получаю
"No Input file specified".
- 8. Мой PHP-скрипт работает на IE под Lynx, но на Netscape часть вывода
теряется. Если я выполняю "View Source", я вижу содержимое в IE, но не в Netscape.
- 9. Как мне смешать XML и PHP? Он жалуется на мои тэги <?xml>!
- 10. Как работать с PHP во FrontPage или другом HTML-редакторе, который настаивает на удалении моего кода?
- 11. Где можно найти полный список предустановленных переменных, и почему они
не задокументированы в документации PHP?
- 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>
";
} | 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 блок кода завершается символами "?>" или "?>
" (где
означает
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>
";
} |
7.
Когда я пытаюсь использовать аутентификацию совместно с IIS, я получаю "No Input file specified".
Здесь модель безопасности IIS терпит неудачу. Это проблема, общая для всех
CGI-программ, работающих под IIS. Здесь нужно создать обычный HTML-файл
(не разбираемый PHP) как страницу для входа в аутентифицируемой
директории. Затем используйте тэг META для перенаправления на
PHP-страницу или сделайте ссылку на PHP-страницу. Тогда PHP распозн́ает
аутентификацию корректно. С модулем ISAPI проблем не возникает. Это не
должно влиять на другие NT web-серверы. См. дополнительно
http://support.microsoft.com/support/kb/articles/q160/4/22.asp.
8.
Мой PHP-скрипт работает на IE под Lynx, но на Netscape часть вывода
теряется. Если я выполняю "View Source", я вижу содержимое в IE, но не в Netscape.
Netscape более строг в отношении html-тэгов (таких как table), нежели
IE. Может помочь запуск вашего html-вывода через html validator, такой как
validator.w3.org. Например, это может происходить из-за
отсутствия закрывающего тэга </table>.
Также и IE и Lynx игнорируют любые NUL"и ( |