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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Преобразование $_SERVER[ 'HTTP_ACCEPT' ] в массив

Сообщения:  [1-4] 

 
 автор: cheops   (21.02.2012 в 18:16)   письмо автору
 
   для: Роккер Руслан   (21.02.2012 в 17:44)
 

>В двух словах зачем нужна функция?...
Для разбора HTTP-заголовка HTTP_ACCEPT. Если вы с ним работаете, у вас такая задача возникает часто, если не работаете, просто не обращайте внимания, скриптом, воспользуются те, кому это нужно.

PS Дело в том, что вся информация в HTTP-заголовках, будь то Cookie или Accept закодирована в виде строк, это неудобно при использовании в императивных языках, где работа идет в основном с массивами, поэтому PHP в свое время получил такую бешенную популярность, так как предоставлял готовые массивы $_COOKIE, $_POST, $_GET, $_FILES и т.п. однако, другие HTTP-заголовки обошли стороной, так как они требовали уже серьезной работы с протоколом HTTP, а разработчики PHP, стремились по максимуму убрать уровень протокола с уровня языка... Чтобы понимать и использовать то, что делает Sfinks нужно знать протокол HTTP (его довольно трудно в двух словах объяснить, хотя, конечно, можно попытаться :).

  Ответить  
 
 автор: Sfinks   (21.02.2012 в 18:03)   письмо автору
 
   для: Роккер Руслан   (21.02.2012 в 17:44)
 

Может я и денег должен доплатить? )))

Тут объяснять нечего. И я писал для себя. И сказал: "может кому пригодится". Раз не понятно, значит не нужна )))

А вот если вам понадобится разобраться какую разметку может понимать браузер и какую он любит больше, а какую меньше, а какую ему лучше вообще не давать, то вы полезите в переменную $_SERVER['HTTP_ACCEPT'] и увидите что-то вроде
application/vnd.wap.xhtml+xml, application/xhtml+xml;q=0.9, text/vnd.wap.wml;q=0.8, text/html;q=0.7, */*;q=0.6
Погуглив о том что это такое, вы конечно разберетесь че ето за набор закорючек, но вот ваш скрипт ничего не поймет!

Так вот эта функция делает ее (строку) понятной для скрипта, расставив напротив каждого MIME-типа приоритет этого типа для браузера.

  Ответить  
 
 автор: Роккер Руслан   (21.02.2012 в 17:44)   письмо автору
 
   для: Sfinks   (21.02.2012 в 16:50)
 

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

  Ответить  
 
 автор: Sfinks   (21.02.2012 в 16:50)   письмо автору
 
 

Ночью понадобилось, написал соответствующую функцию.

Может кому пригодится:
<pre><?php
  
function http_accept(){

    
$accept strtolower$_SERVER['HTTP_ACCEPT'] );
    
$pattern "#(?<=^|,|,\s)((?:(?:[a-z\*]+/[a-z\.\+\-\*]+),?\s?)+?)(?:;q=([01]?\.\d)|$)#";
    
preg_match_all$pattern $accept $out );

    
$arr = array();
    
$len count$out[0] )-1;
    for( 
$i $len$i >=0$i-- ){

      
$keys     str_replace" " "" $out[1][$i] );
      
$arr_keys explode"," $keys );
      
$arr_vals = array();
      
$arr_vals array_pad$arr_vals count$arr_keys ) , $out[2][$i] );
      
$new_arr  array_combine$arr_keys $arr_vals );
      
$arr      array_merge$arr $new_arr );
    }
    return 
$arr;
  }

  
print_r(http_accept());
  
?></pre>
результат примерно такой:
Array
(
    [application/xhtml+xml] => 0.1
    [image/png] => 0.1
    [image/webp] => 0.1
    [image/jpeg] => 0.1
    [image/gif] => 0.1
    [image/x-xbitmap] => 0.1
    [*/*] => 0.1
    [text/html] => 0.9
    [application/xml] => 0.9
)

Если кто найдет баги - буду признателен )))

  Ответить  

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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