Использование PHP
В этом разделе собрано множество общих ошибок, которые могут вам встретиться при написании PHP скриптов.
- Я Ñ Ð¾ÑÑ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð¾Ð±Ñий PHP ÑкÑипÑ, кÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе, пÑÐ¸Ñ Ð¾Ð´ÑÑие из лÑбой ÑоÑмÑ. Ðак ÑзнаÑÑ ÐºÐ°ÐºÐ¸Ðµ пеÑеменнÑе меÑода POST доÑÑÑпнÑ?
- Ðне надо пÑеобÑазоваÑÑ Ð²Ñе одиноÑнÑе кавÑÑки (') в обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ñ Ð¿Ð¾ÑледÑÑÑей одиноÑной кавÑÑкой (\'). Ðак Ñ Ð¼Ð¾Ð³Ñ ÑделаÑÑ ÑÑо Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑегÑлÑÑного вÑÑажениÑ? Я Ñакже Ñ Ð¾Ñел Ð±Ñ Ð¿ÑеобÑазоваÑÑ " в \" и \ в \\.
- ÐÑе мои " пÑевÑаÑилиÑÑ Ð² \" и мои ' в \', как Ñ Ð¼Ð¾Ð³Ñ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑÑÑ Ð¾Ñ Ð²ÑÐµÑ ÑÑÐ¸Ñ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑнÑÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑ? Ðак и поÑÐµÐ¼Ñ Ð¾Ð½Ð¸ поÑвилиÑÑ?
- Ðогда Ñ Ð´ÐµÐ»Ð°Ñ ÑледÑÑÑее, вÑвод ÑаÑпеÑаÑÑваеÑÑÑ Ð½Ðµ в Ñом поÑÑдке: <?phpfunction myfunc($argument){    echo $argument + 10;}$variable = 10;echo "myfunc($variable) = " . myfunc($variable);?> ЧÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ?
- Ðй, ÑÑо пÑоизоÑло Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ ÑÑÑоками? <pre><?php echo "This should be the first line."; ?><?php echo "This should show up after the new line above."; ?></pre>
- Я полÑÑÐ°Ñ ÑообÑение 'Warning: Cannot send session cookie - headers already sent...' или 'Cannot add header information - headers already sent...'.
- Ðне Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ пÑÑмой доÑÑÑп к инÑоÑмаÑии в заголовке запÑоÑа. Ðак Ñ Ð¼Ð¾Ð³Ñ ÑÑо ÑделаÑÑ?
- Ðогда Ñ Ð¿ÑÑаÑÑÑ Ð¸ÑполÑзоваÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ñ IIS, Ñ Ð¿Ð¾Ð»ÑÑÐ°Ñ 'No Input file specified'.
- Windows: У Ð¼ÐµÐ½Ñ Ð½ÐµÑ Ð´Ð¾ÑÑÑпа к Ñайлам, ÑазделÑемÑÑ Ð´ÑÑгим компÑÑÑеÑом, по IIS.
- Ðой PHP ÑкÑÐ¸Ð¿Ñ ÑабоÑÐ°ÐµÑ Ð² IE и Lynx, а в Netscape некоÑоÑÑй вÑвод оÑÑÑÑÑÑвÑеÑ. Ðогда Ñ Ð²ÑполнÑÑ "View Source", Ñ Ð²Ð¸Ð¶Ñ ÑодеÑжимое в IE, а в Netscape неÑ.
- Ðак Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑовмеÑаÑÑ XML и PHP? Ðн жалÑеÑÑÑ Ð½Ð° мои <?xml ÑÑги!
- Ðак Ñ Ð¼Ð¾Ð³Ñ Ð¸ÑполÑзоваÑÑ PHP Ñ FrontPage или каким-либо дÑÑгим ÑедакÑоÑом HTML, коÑоÑÑй наÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð½Ð° пеÑемеÑении моего кода?
- Ðде Ñ Ð¼Ð¾Ð³Ñ Ð½Ð°Ð¹Ñи полнÑй ÑпиÑок пеÑеменнÑÑ , доÑÑÑпнÑÑ Ð¼Ð½Ðµ в PHP?
- Ðак Ñ Ð¼Ð¾Ð³Ñ Ð³ÐµÐ½ÐµÑиÑоваÑÑ PDF ÑÐ°Ð¹Ð»Ñ Ð±ÐµÐ· иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°ÑнÑÑ Ð¸Ð»Ð¸ коммеÑÑеÑÐºÐ¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек ClibPDF и PDFLib? Я Ð±Ñ Ñ Ð¾Ñел ÑÑо-нибÑÐ´Ñ Ð±ÐµÑплаÑное и не ÑÑебÑÑÑее внеÑÐ½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек PDF.
- Я пÑÑаÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к одной из ÑÑандаÑÑнÑÑ CGI пеÑеменнÑÑ (ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº $DOCUMENT_ROOT или $HTTP_REFERER) в опÑеделÑнной полÑзоваÑелем ÑÑнкÑии и, Ð¿Ð¾Ñ Ð¾Ð¶Ðµ, она не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°. Ð ÑÑм дело?
- ÐеÑколÑко PHP диÑекÑив могÑÑ Ð¿ÑинимаÑÑ ÑокÑаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð±Ð°Ð¹ÑовÑÑ Ð·Ð½Ð°Ñений в оÑлиÑие Ð¾Ñ ÑолÑко integer байÑÐ¾Ð²Ð°Ñ Ð·Ð½Ð°Ñений. ÐÐ°ÐºÐ¾Ð²Ñ Ð²Ñе доÑÑÑпнÑе ÑокÑаÑениÑ? Ð Ð¼Ð¾Ð³Ñ Ð»Ð¸ Ñ Ð¸ÑполÑзоваÑÑ Ð¸Ñ Ð²Ð½Ðµ php.ini?
-
Я хочу написать общий PHP скрипт, кторый может обрабатывать данные, приходящие из любой формы. Как узнать какие переменные метода POST доступны?
-
PHP предлагает множество предопределённых переменных, таких как суперглобальная $_POST. Вы можете пройтись по $_POST так как это ассоциативный массив всех значений, пришедших с POST. Для примера, давайте просто пройдёмся по ним с foreach, проверим на пустые (empty()) значения и распечатаем.
<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
print "<pre>";
if (empty($empty)) {
print "None of the POSTed values are empty, posted:\n";
var_dump($post);
} else {
print "We have " . count($empty) . " empty values\n";
print "Posted:\n"; var_dump($post);
print "Empty:\n"; var_dump($empty);
exit;
}
?>Note: Суперглобальные переменные: замечание о доступностиНачиная с PHP 4.1.0, стали доступными суперглобальные массивы, такие как $_GET, $_POST, $_SERVER и т.д. Дополнительную информацию смотрите в разделе руководства superglobals
-
Мне надо преобразовать все одиночные кавычки (') в обратную косую черту с последующей одиночной кавычкой (\'). Как я могу сделать это с помощью регулярного выражения? Я также хотел бы преобразовать " в \" и \ в \\.
-
Это делает функция addslashes(). Смотрите также mysql_escape_string(). Также вы можете избавиться от обратной косой черты с помощью stripslashes().
Note: Замечание о директиве: magic_quotes_gpc Директива PHP magic_quotes_gpc имеет значение по умолчанию on (включена). По сути это применяет функцию addslashes() ко всем вашим GET-, POST-, и COOKIE-данным. Чтобы удалить добавленные косые черты, вы можете использовать stripslashes().
-
Все мои " превратились в \" и мои ' в \', как я могу избавиться от всех этих нежелательных обратных косых черт? Как и почему они появились?
-
PHP функция stripslashes() удалит эти обратные косые черты из вашей строки (string). Вероятнее всего, обратные косые черты магически появились из-за того, что включена PHP директива magic_quotes_gpc
Note: Замечание о директиве: magic_quotes_gpc Директива PHP magic_quotes_gpc имеет значение по умолчанию on (включена). По сути это применяет функцию addslashes() ко всем вашим GET-, POST-, и COOKIE-данным. Чтобы удалить добавленные косые черты, вы можете использовать stripslashes().
-
Когда я делаю следующее, вывод распечатывается не в том порядке:
<?php
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
?> -
Для того, чтобы использовать результат вашей функции в выражении (таком как соединение с другими строками, как в вышеприведённом примере), вам необходимо вернуть значение с помощью return(), а не выводить его через echo().
-
Эй, что произошло с моими строками?
<pre>
<?php echo "This should be the first line."; ?>
<?php echo "This should show up after the new line above."; ?>
</pre> -
В PHP, блок кода завершается либо с "?>", либо с "?>\n" (где \n означает "новая строка"). В вышеприведённом примере предложения выведутся на одной строке, так как PHP опусткает символ новой строки после завершения блока. Это означает, что вам необходимо вставить дополнительный символ новой строки после каждого блока PHP кода, для того чтобы вывод продолжался с новой строки.
Почему PHP делает это? Потому что при форматировании обычного HTML это, обычно, упрощает вашу жизнь когда вым не нужна эта новая строка и вам не надо создавать невероятно длинные строки для того, чтобы сделать сырой исходник страницы читаемым.
-
Я получаю сообщение 'Warning: Cannot send session cookie - headers already sent...' или 'Cannot add header information - headers already sent...'.
-
Функциям header(), setcookie(), и функциям сессии нужно добавить заголовки к выходному потоку, но заголовки могут быть посланы только перед всем другим содержимым. Перед использованием этих функций не может быть никакого вывода HTML. Функция headers_sent() проверит если ваш скрипт уже послал заголовки; также смотрите Функции Управления Выводом.