|
|
|
|
|
для: Роккер Руслан
(21.02.2012 в 17:44)
| | >В двух словах зачем нужна функция?...
Для разбора HTTP-заголовка HTTP_ACCEPT. Если вы с ним работаете, у вас такая задача возникает часто, если не работаете, просто не обращайте внимания, скриптом, воспользуются те, кому это нужно.
PS Дело в том, что вся информация в HTTP-заголовках, будь то Cookie или Accept закодирована в виде строк, это неудобно при использовании в императивных языках, где работа идет в основном с массивами, поэтому PHP в свое время получил такую бешенную популярность, так как предоставлял готовые массивы $_COOKIE, $_POST, $_GET, $_FILES и т.п. однако, другие HTTP-заголовки обошли стороной, так как они требовали уже серьезной работы с протоколом HTTP, а разработчики PHP, стремились по максимуму убрать уровень протокола с уровня языка... Чтобы понимать и использовать то, что делает Sfinks нужно знать протокол HTTP (его довольно трудно в двух словах объяснить, хотя, конечно, можно попытаться :). | |
|
|
|
|
|
|
|
для: Роккер Руслан
(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-типа приоритет этого типа для браузера. | |
|
|
|
|
|
|
|
для: 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
)
|
Если кто найдет баги - буду признателен ))) | |
|
|
|
|