Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка объекта XMLHttpRequest на стороне сервера
 
 автор: Slo_Nik   (26.01.2012 в 02:29)   письмо автору
 
 

Доброй ночи.
Возникла проблема с проверкой вышеуказанного объекта,.
На стороне сервера проверяю так
<?php 
error_reporting
(E_ALL);
$httprequest = isset($_SERVER['HTTP_X_REQUESTED_WITH']) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : null;
if(
$httprequest == 'XMLHttpRequest'){
     if(
$_POST){
     
$name '';
     foreach(
$_POST as $value){
      
$name .= $value."<br />";
     }
     echo 
$name;
    }
    else{
     echo 
"массива \$_POST нет<br />";
    }
}
else{
 echo 
"No XMLHttpRequest";
}
// возвращает No XMLHttpRequest
?>

При выполнении ajax запроса устанавливаю заголовок через xhr.setRequestHeader(HTTP_'X_REQUESTED_WITH', 'XMLHttpRequest'); - результат "0"
В заголовках запроса присутствует HTTP_X_REQUESTED_WITH XMLHttpRequest, но не работает...
Если отправляю ajax запрос при помощи jQuery, то проверка проходит успешно.
На локальном всё работает.
Подскажите пожалуйста, как решить проблему. Сам пока не смог найти решения....

  Ответить  
 
 автор: cheops   (26.01.2012 в 07:21)   письмо автору
 
   для: Slo_Nik   (26.01.2012 в 02:29)
 

Так а проблема в чем? Сервер в сети не дает устанавливать левые HTTP-заголовки?

  Ответить  
 
 автор: cheops   (26.01.2012 в 07:26)   письмо автору
 
   для: Slo_Nik   (26.01.2012 в 02:29)
 

А вы именно через HTTP-заголовок хотите? Может лучше воспользоваться GET-параметром? Ведь отключать заголовки будут на каждом втором сервере - код будет не надежным.

  Ответить  
 
 автор: Slo_Nik   (26.01.2012 в 11:25)   письмо автору
 
   для: cheops   (26.01.2012 в 07:26)
 

>Так а проблема в чем? Сервер в сети не дает устанавливать левые HTTP-заголовки?
Вот об этом я не подумал...
Но ведь такая проверка работает если делать через jQuery ajax запрос к серверу...
Как это можно узнать, звонок хостеру?

>А вы именно через HTTP-заголовок хотите? Может лучше воспользоваться GET-параметром?
>Ведь отключать заголовки будут на каждом втором сервере - код будет не надежным.

Этот php скрипт будет выполнять загрузку файла, сама отправка через jajx, drag & drop, html5, formdata и XMLHttpRequest2.
Одна из статей, на которую я ориетируюсь....
Скрипт будет работать только на моём хостинге, не предполагается работа на других серверах... пока...
Такую проверку существования объекта я увидел в книге "AJAX программирование для интернета", автор Геннадий Самков, Елена Бенкен.... Вот в ней и советуют делать такую проверку....

  Ответить  
 
 автор: cheops   (26.01.2012 в 13:53)   письмо автору
 
   для: Slo_Nik   (26.01.2012 в 11:25)
 

Лучше да, хостера потеребить, может у него на этот случай уже заготовлен заголовок с другим именем.

  Ответить  
 
 автор: Slo_Nik   (26.01.2012 в 15:56)   письмо автору
 
   для: cheops   (26.01.2012 в 13:53)
 

Повторюсь ещё раз...
Дело в том, что если делать эту проверку при использовании jQuery, то проблем ни каких нет, всё работает... Но если использовать объект напрямую, то проверка отказывается работать...
Если при таком раскладе, то может проблема не в настройках сервера, а я что-то делаю не так?
Может есть смысл отказаться от такой проверки и проверять например при помощи is_uploaded_file()?

  Ответить  
 
 автор: Slo_Nik   (26.01.2012 в 16:40)   письмо автору
560.6 Кб
 
   для: cheops   (26.01.2012 в 13:53)
 

Попытался вывести дамп массива на локальном и на реальном хостинге.
Есть различия , причём существенные....
Подскажите, где можно прочитать о всех возможных элементах массива $_SERVER, какие настройки сервера или ещё что влияет на содержимое массива?

p.s. для наглядности прикрепил скриншот

  Ответить  
 
 автор: Slo_Nik   (27.01.2012 в 03:14)   письмо автору
 
   для: cheops   (26.01.2012 в 13:53)
 

Проблема решилась, посмотрев в инете нашёл такой вариант

// заменить подчёркивание на простой дефис
xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest');

В таком варианте проверка работает....
Но вопросы остались...

Подскажите, где можно прочитать о всех возможных элементах массива $_SERVER, 
какие настройки сервера или ещё что влияет на содержимое массива?

Смотрел на сайте http://php.net, ответа не нашёл...

  Ответить  
 
 автор: Igorek   (27.01.2012 в 07:33)   письмо автору
 
   для: Slo_Nik   (27.01.2012 в 03:14)
 

http://php.net/manual/ru/reserved.variables.server.php

  Ответить  
 
 автор: Slo_Nik   (27.01.2012 в 12:03)   письмо автору
 
   для: Igorek   (27.01.2012 в 07:33)
 

Благодарю за ссылку, но Вы не внимательно прочитали моё предыдущее сообщение)))
Был, читал, но ответы нужные для себя не нашёл...

  Ответить  
 
 автор: Igorek   (27.01.2012 в 15:40)   письмо автору
 
   для: Slo_Nik   (27.01.2012 в 12:03)
 

хм... извиняюсь, понял так, что не нашли описание, поэтому дал ссылку

  Ответить  
 
 автор: Slo_Nik   (27.01.2012 в 16:06)   письмо автору
 
   для: Igorek   (27.01.2012 в 15:40)
 

Вот меня и интересует, по какому принципу формируется содержимое массива, если сравнить на локальном и на реальном, то они отличаются.

  Ответить  
 
 автор: Igorek   (27.01.2012 в 16:54)   письмо автору
 
   для: Slo_Nik   (27.01.2012 в 16:06)
 

Немного из того, что удалось накопать по этому вопросу (может поможет):
Речь идет о переменных окружения. Apache использует некоторые системные переменные окружения и определяет свои. Т.е. как я понимаю в зависимости от версии сервера эти переменные могут меняться.
Существует возможность самому добавлять переменные окружения используя директиву SetEnv
http://httpd.apache.org/docs/2.2/mod/mod_env.html#setenv

Не нашел список переменных определяемых апачем. Наверное плохо искал (

  Ответить  
 
 автор: Slo_Nik   (27.01.2012 в 17:01)   письмо автору
 
   для: Igorek   (27.01.2012 в 16:54)
 

такая же фигня и у меня, надо получше поискать.... за ссылку спасибо, посмотрю чуть позже )))

  Ответить  
 
 автор: seyfer   (14.11.2012 в 14:18)   письмо автору
 
   для: Slo_Nik   (27.01.2012 в 17:01)
 

ajax.setRequestHeader('X-Requested-With', 'XmlHttpRequest');

и все работает.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования