Как исправить ошибку php 5.2.4. Не передаются переменные методом post (AJAX only)

CHEM_Eugene

Новичок
Как исправить ошибку php 5.2.4. Не передаются переменные методом post (AJAX only)

Проблема уже поднималась и решена для php 5.2.2. Есть 2 варианта решения:
1.
PHP:
if (empty($GLOBALS['HTTP_RAW_POST_DATA'])) $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
2.
PHP:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $HTTP_RAW_POST_DATA = file_get_contents("php://input");
}
Но ни один в php 5.2.4 (из состава Denwer 3) не работает. Да и на php.net тоже не накопал ничего. Может плохо искал...
В общем поделитесь решением, пожалуйста!
 

Garret

Кто здесь?
Думаю проблема не в Денвере, хотя тоже не советую юзать эту шнягу :)

Столкнулся давно с этой проблемой, на 5-ом пыхе не хотела работать аяксовая библиотека Котерова(тоже не передавались переменные), но потом вроде вышла версия под ПХП5 и все устаканилось.

Так что может капни ту библиотеку, может найдешь что то интересное.

З.Ы. Вообще смутно помню что там было...
 

kruglov

Новичок
"Аяксовая библиотека Котерова" и прочие ведь не эфирно-вещественными эманациями данные на сервер передают.

Посмотрите отправляемые данные в том же Live HTTP headers под Мозиллу или еще чем (список, кажись, есть на phpfaq.ru).
 

CHEM_Eugene

Новичок
Проблема точно не в аяксовой библиотеке, использую Prototype. И все работало на 2ом денвере с php 5.1.3, после перехода на 3ий столкнулся с этой проблемой.
 

kruglov

Новичок
А print_r($_SERVER) ничего такого в себе не содержит интересного?

-~{}~ 07.05.08 16:42:

p.s. А "ajax-only" зря написали. PHPу пофиг, кто ему данные отправил, аякс или кто. Другой вопрос, что вы шлете данные не так, как обычно шлют формы.
 

CHEM_Eugene

Новичок
Автор оригинала: kruglov
А print_r($_SERVER) ничего такого в себе не содержит интересного?
Никаких намеков на post-данные
p.s. А "ajax-only" зря написали. PHPу пофиг, кто ему данные отправил, аякс или кто. Другой вопрос, что вы шлете данные не так, как обычно шлют формы.
В том-то и прикол, что обычная форма отправляется, все приходит. А аяксом не знаю куда девается. И главное FireBug мозилловский показывает, что да, все данные уходят нормально.

-~{}~ 08.05.08 09:42:

Получается такая штука:
1. если отправляешь данные POST синхронно и action содержит query_string, то в $_SERVER записывается REQUEST_METHOD = GET, но данные в POST все же приходят.

2. данные POST уходят синхронно и отсутствует query_string, то в $_SERVER записывается REQUEST_METHOD = POST, все как надо.

3. если отправляешь данные POST асинхронно и action содержит query_string, то в $_SERVER записывается REQUEST_METHOD = GET, и в POST ничего не приходит.

-~{}~ 08.05.08 10:31:

Вот ещё одно наблюдние:

Завел чистый хост и тестирую отправку на нем. Все работает и синхронно и асинхронно. Думаю чем отличаются хосты - прихожу к выводу, что только mod_rewrite. Могут ли POST данные теряться в процессе реврайта?

Это также может следовать из анализа $_SERVER:
на хосте без реврайт при асинхронной отправке в массиве появляются параметры: HTTP_X_REQUESTED_WITH = "XMLHttpRequest" и другие, связанные со способом передачи данных. На хосте с реврайтом же они отсутствуют.

-~{}~ 08.05.08 11:11:

Заработало так (правда это скорее заглушка, чем нормальное решение):
когда указываешь урл, на который шлешь запрос, писать надо так (мой пример):
'POST /admin?module=user&actor_1=roles&actor_2=editRules';
вот так не работает:
'http://site/admin?module=user&actor_1=roles&actor_2=editRules';

Если кто знает что нужно настроить, чтобы запросы не переписывать к этому виду, буду очень благодарен. Т.к. запросов очень уже много написано.
 

fixxxer

К.О.
Партнер клуба
хехе =)) с http:// и не должно работать
почитай rfc 2616
 

CHEM_Eugene

Новичок
Автор оригинала: fixxxer
хехе =)) с http:// и не должно работать
почитай rfc 2616
А где в этом документе написано, что с http:// не должно работать? (уж очень он большой). Если не использовать rewrite, то и с http:// работает. Как это объяснить?
 

fixxxer

К.О.
Партнер клуба
конструкция с http:// предназначена для прокси серверов (mod_proxy).
если урл указывает на обслуживаемый этим же сервером хост, то апач соображает, что ничего не надо проксировать, и вобщем то все отдает, но поскольку такое поведение стандартом не регламентировано, то можно ожидать любых побочных эффектов.
 

Андрейка

Senior pomidor developer
чет есть у мну подозрение, что
POST http://www.
это "URL" из ajaxовской либы, а не первая строчка HTTP запроса
 

CHEM_Eugene

Новичок
Автор оригинала: Андрейка
чет есть у мну подозрение, что
POST http://www.
это "URL" из ajaxовской либы, а не первая строчка HTTP запроса
Поясните пожалуйста. Может яснее будет. Неужели все запросы переписывать к такому (например) виду:
"POST /admin/index.php". Ведь "/admin/index.php" так не работает, хоть и без http://
 

fixxxer

К.О.
Партнер клуба
давай ты поставишь себе livehttpheaders+firebug
и скажешь что там действительно происходит а не твои домыслы
 

CHEM_Eugene

Новичок
Автор оригинала: fixxxer
давай ты поставишь себе livehttpheaders+firebug
и скажешь что там действительно происходит а не твои домыслы
Вариант 1 (на денвер2, работает как надо):

http://icms/admin?module=user&actor_1=roles&actor_2=editRules

POST /admin?module=user&actor_1=roles&actor_2=editRules HTTP/1.1
Host: icms
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-Requested-With: XMLHttpRequest
X-Prototype-Version: 1.5.1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://icms/admin?module=user&actor_1=roles&actor_2=show
Content-Length: 15
Cookie: PHPSESSID=5c5ad704c6e832377173c24931e28b34
Pragma: no-cache
Cache-Control: no-cache
controller=ajax

HTTP/1.x 200 OK
Date: Sat, 10 May 2008 18:07:42 GMT
Server: Apache/1.3.33 (Win32) PHP/5.1.6
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

Вариант 2 (на денвер3, если url не предварять методом POST):

http://icms/admin?module=user&actor_1=roles&actor_2=editRules

POST /admin?module=user&actor_1=roles&actor_2=editRules HTTP/1.1
Host: icms
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-Requested-With: XMLHttpRequest
X-Prototype-Version: 1.5.1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://icms/admin/?module=user&actor_1=roles&actor_2=show
Content-Length: 15
Cookie: PHPSESSID=d34f32f18c3deeb3099f99522383183d
Pragma: no-cache
Cache-Control: no-cache
controller=ajax

HTTP/1.x 301 Moved Permanently
Date: Sun, 11 May 2008 06:42:28 GMT
Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4
Location: http://icms/admin/?module=user&actor_1=roles&actor_2=editRules
Content-Length: 385
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
----------------------------------------------------------
http://icms/admin/?module=user&actor_1=roles&actor_2=editRules

GET /admin/?module=user&actor_1=roles&actor_2=editRules HTTP/1.1
Host: icms
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://icms/admin/?module=user&actor_1=roles&actor_2=show
Cookie: PHPSESSID=d34f32f18c3deeb3099f99522383183d
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.x 200 OK
Date: Sun, 11 May 2008 06:42:28 GMT
Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4
X-Powered-By: PHP/5.2.4
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=windows-1251
----------------------------------------------------------

Вариант 3 (на денвер3, вариант рабочий, но запрос выглядит кривовато):

http://icms/admin/post /admin?module=user&actor_1=roles&actor_2=editRules

POST /admin/post%20/admin?module=user&actor_1=roles&actor_2=editRules HTTP/1.1
Host: icms
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-Requested-With: XMLHttpRequest
X-Prototype-Version: 1.5.1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://icms/admin/?module=user&actor_1=roles&actor_2=show
Content-Length: 15
Cookie: PHPSESSID=d34f32f18c3deeb3099f99522383183d
Pragma: no-cache
Cache-Control: no-cache
controller=ajax

HTTP/1.x 200 OK
Date: Sun, 11 May 2008 06:58:58 GMT
Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4
X-Powered-By: PHP/5.2.4
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 7553
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

Почему во втором случае сервак может отвечать 301? Запрос правильно делаю, без "http://"
 

kruglov

Новичок
301 - это редирект.

Развивайте наблюдательность, сравнивайте, что вы запросили и куда вас отправили этим редиректом.
 
Сверху