Forum und email

Использование PHP

В этом разделе собрано множество общих ошибок, которые могут вам встретиться при написании PHP скриптов.

  1. Я хочу написать общий PHP скрипт, кторый может обрабатывать данные, приходящие из любой формы. Как узнать какие переменные метода POST доступны?
  2. Мне надо преобразовать все одиночные кавычки (') в обратную косую черту с последующей одиночной кавычкой (\'). Как я могу сделать это с помощью регулярного выражения? Я также хотел бы преобразовать " в \" и \ в \\.
  3. Все мои " превратились в \" и мои ' в \', как я могу избавиться от всех этих нежелательных обратных косых черт? Как и почему они появились?
  4. Когда я делаю следующее, вывод распечатывается не в том порядке: <?phpfunction myfunc($argument){    echo $argument + 10;}$variable = 10;echo "myfunc($variable) = " . myfunc($variable);?> Что происходит?
  5. Эй, что произошло с моими строками? <pre><?php echo "This should be the first line."; ?><?php echo "This should show up after the new line above."; ?></pre>
  6. Я получаю сообщение 'Warning: Cannot send session cookie - headers already sent...' или 'Cannot add header information - headers already sent...'.
  7. Мне необходим прямой доступ к информации в заголовке запроса. Как я могу это сделать?
  8. Когда я пытаюсь использовать аутентификацию с IIS, я получаю 'No Input file specified'.
  9. Windows: У меня нет доступа к файлам, разделяемых другим компьютером, по IIS.
  10. Мой PHP скрипт работает в IE и Lynx, а в Netscape некоторый вывод отсутствует. Когда я выполняю "View Source", я вижу содержимое в IE, а в Netscape нет.
  11. Как я должен совмещать XML и PHP? Он жалуется на мои <?xml тэги!
  12. Как я могу использовать PHP с FrontPage или каким-либо другим редактором HTML, который настаивает на перемещении моего кода?
  13. Где я могу найти полный список переменных, доступных мне в PHP?
  14. Как я могу генерировать PDF файлы без использования платных или коммерческих библиотек ClibPDF и PDFLib? Я бы хотел что-нибудь бесплатное и не требующее внешних библиотек PDF.
  15. Я пытаюсь получить доступ к одной из стандартных CGI переменных (таких как $DOCUMENT_ROOT или $HTTP_REFERER) в определённой пользователем функции и, похоже, она не может быть найдена. В чём дело?
  16. Несколько PHP директив могут принимать сокращения для байтовых значений в отличие от только integer байтовах значений. Каковы все доступные сокращения? И могу ли я использовать их вне php.ini?
  17. Я хочу написать общий 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() проверит если ваш скрипт уже послал заголовки; также смотрите Функции Управления Выводом.

    Мне необходим прямой доступ к информации в заголовке запроса. Как я могу это сделать?