Переменные $ _GET и $ _POST не существуют при использовании веб-сервера lighttpd - PullRequest
7 голосов
/ 03 февраля 2012

Я установил веб-сервер lighttpd на свой компьютер Windows, и у меня возникла проблема: в файлах PHP не определены переменные $_GET и $_POST.

Например, у меня есть этот простой скрипт (tmp.php):

<?php

  echo "x: '" . $_GET ['x'] . "'<br />";

?>

Когда я иду по адресу: http://localhost/tmp.php?x=123

Я получаю это сообщение об ошибке:

Notice: Undefined index: x in /srv/www/htdocs/tmp.php on line 3 x: ''

Когда я размещаю один и тот же файл на общедоступном хостинге, я получаю:

x: '123'

Также команда php:

empty ($_GET)

возвращает истину.

То же самое для всех переменных $ _POST.

Есть ли какая-либо неверная конфигурация в моем php.ini файле?

Команда:

print_r($_SERVER); 

дает следующий результат:

Array (
 [SERVER_SOFTWARE] => lighttpd/1.4.20
 [SERVER_NAME] => localhost
 [GATEWAY_INTERFACE] => CGI/1.1
 [SERVER_PROTOCOL] => HTTP/1.1
 [SERVER_PORT] => 80
 [SERVER_ADDR] => 0.0.0.0
 [REQUEST_METHOD] => GET
 [REDIRECT_STATUS] => 200
 [QUERY_STRING] => x=123
 [REQUEST_URI] => /tmp.php?x=123
 [REMOTE_ADDR] => 127.0.0.1
 [REMOTE_PORT] => 3150
 [CONTENT_LENGTH] => 0
 [SCRIPT_FILENAME] => /srv/www/htdocs/tmp.php
 [SCRIPT_NAME] => /srv/www/htdocs/tmp.php
 [DOCUMENT_ROOT] =>
 [SYSTEMROOT] => C:\WINNT
 [HTTP_ACCEPT] => */*
 [HTTP_ACCEPT_LANGUAGE] => en-gb
 [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
 [HTTP_ACCEPT_ENCODING] => gzip, deflate
 [HTTP_HOST] => localhost
 [HTTP_CONNECTION] => Keep-Alive
 [WINDIR] => C:\WINNT
 [PHP_SELF] => /srv/www/htdocs/tmp.php
 [PATH_TRANSLATED] => /srv/www/htdocs/tmp.php
 [REQUEST_TIME] => 1328287189
 [argv] => Array (
 [0] => /srv/www/htdocs/tmp.php )
 [argc] => 1 
)

Значит, значение x=123 существует в $_SERVER['QUERY_STRING'] и $_SERVER['REQUEST_URI'], но я не знаю, как его получить.

Ответы [ 3 ]

2 голосов
/ 13 июня 2012

Во-первых, давайте удостоверимся, что мы ничего не пропустили.

Попробуйте это

<?php
    // test1.php
    print('GET: '); // First missing semicolon
    print_r($_GET);
    print('HTTP_GET_VARS: '); // Second missing semicolon
    print_r($HTTP_GET_VARS);
?>

Во-вторых, попробуйте $ _POST

Создайте простую HTML-форму и попытайтесь опубликовать ее.

<?php
    // test2.php
    print_r($_POST);
?>
<form method="POST">
    <input type="text" name="myvar" />
    <input type="submit""/>
</form>

Я знаю, это звучит глупо, но, пожалуйста, попробуйте их, чтобы мы исключили их.

Наконец, вы используете правила переписывания?

Посмотрите в lighttpd.conf упоминание о url.rewrite. Lighttpd не пытается угадать URL-адрес, как apache, вы должны специально указать ему, чтобы включить строку запроса, если вы используете переписывает. Например (важные биты выделены жирным шрифтом - добавьте их в свои переписывания).

url.rewrite = ( "^ / ([az] +) / ([az] +) (\? *) (. *) " => "/index.php?controller=$1&action=$2& $ 4 ) * * Тысяча двадцать-один

1 голос
/ 03 февраля 2012

Согласно документации, это может быть вызвано настройкой php.ini variables_order.

Значением по умолчанию является EGPCS, но еслион был каким-то образом изменен и не содержал буквы G, переменные GET будут полностью игнорироваться, а $_GET будет пустым.

0 голосов
/ 18 июня 2012

Ну, насколько я вижу, длина контента равна нулю, она не должна быть "ноль". Установите Fiddler и проверьте заголовок, отправленный во время запроса, и проверьте заголовок ответа. Похоже, что заголовок должен быть возиться ..

Привет

...