|
|
|
| Помогите пожалуйста из заголовков http вытащить переменные кукисов.
Нужно вытащить куки следующего вида:
Set-Cookie: zhuki_stat_enter=deleted; expires=Sun, 01-Jul-2007 10:55:20 GMT
Set-Cookie: zhuki_stat_enter=1
Set-Cookie: test_cookie1=1; path=/
Set-Cookie: test_cookie2=1
Set-Cookie: number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A1%3Bi%3A5%3Bi%3A4%3Bi%3A4%3Bi%3A9%3Bi%3A3%3Bi%3A5%3Bi%3A2%3Bi%3A6%3Bi%3A1%3Bi%3A0%3B%7D; path=/
|
Помогите составить регулярки. (я в них ни бум бум)
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Oligarx
(30.06.2008 в 18:45)
| | Помогите справиться с этой задачей.
Если тупо вот так написать
preg_match("!Set-Cookie:(.*)\n!","Set-Cookie: zhuki_stat_enter=1;\r\n",$out);
echo ($out[0]);
|
то всё норм срабатывает, а если написать так ...
function WriteHeader($fp)
{
while(!feof($fp))
{
$buff = fgets($fp,1024);
@preg_match("!Set-Cookie:(.*)\n!",$buff,$out);
echo ($buff);
}
echo ($out[0]);
}
|
То в массив $out ничего не ложится.
Помогите разобраться почему так получается.
Только что посмотрел в дебагере ... и увидел что на самом деле кукисы вырезаются из заголовков, но почему то не более двух. И если после Отправки куков идёт какой то другой заголовок, то массив $out обнуляется.
cmd> GET / HTTP/1.0
cmd> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
cmd> User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)
cmd> Host: zhuki.mail.ru
cmd>
hdr> HTTP/1.1 200 OK
hdr> Server: nginx/0.6.10
hdr> Date: Mon, 30 Jun 2008 20:03:02 GMT
hdr> Content-Type: text/html;charset=windows-1251
hdr> Connection: close
hdr> X-Powered-By: PHP/5.2.4_p20070914-pl2-gentoo
cookie> zhuki_stat_enter=deleted; expires=Sun, 01-Jul-2007 20:03:01 GMT
hdr> Set-Cookie: zhuki_stat_enter=deleted; expires=Sun, 01-Jul-2007 20:03:01 GMT
cookie> zhuki_stat_enter=1
hdr> Set-Cookie: zhuki_stat_enter=1
hdr> Expires: Mon, 26 Jul 1997 05:00:00 GMT
hdr> Last-Modified: Mon, 30 Jun 2008 20:03:02 GMT
hdr> Cache-Control: no-store, no-cache, must-revalidate
hdr> Pragma: no-cache
hdr> Cache-Control: post-check=0, pre-check=0
cookie> test_cookie1=1; path=/
hdr> Set-Cookie: test_cookie1=1; path=/
cookie> test_cookie2=1
hdr> Set-Cookie: test_cookie2=1
cookie> number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A3%3Bi%3A5%3Bi%3A9%3Bi%3A4%3Bi%3A1%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A6%3Bi%3A1%3Bi%3A9%3B%7D; path=/
hdr> Set-Cookie: number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A3%3Bi%3A5%3Bi%3A9%3Bi%3A4%3Bi%3A1%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A6%3Bi%3A1%3Bi%3A9%3B%7D; path=/
hdr> Vary: Accept-Encoding
RequestDone Error = 0
StatusCode = 200
|
Почему так получается мне не понятно. Помогите разобраться пожалуйста. | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 00:35)
| | Потому что массив $out у вас переопределяется при каждой иттерации цикла, т.е. для каждого заголовка.
preg_match_all('~^Set-Cookie:(.*)\\r$~m', $headers, $matches);
В $headers должны быть все заголовки. | |
|
|
|
|
|
|
|
для: Эй
(01.07.2008 в 08:53)
| | Вот, переписал так
function WriteHeader($fp)
{
$out;
$text="";
$i=0;
while(!feof($fp))
{
$buff = fgets($fp,1024);
//preg_replace("!Set-Cookie:(.*)\n!","",$text);
//preg_match("!Set-Cookie:(.*)\n!",$buff,$out[$i]);
//@$cook[$i]=preg_replace("!Set-Cookie:(.*)\n!",$buff);
echo ($buff);
$text .= $buff;
}
preg_match("!Set-Cookie:(.*)\n!",$text,$out);
echo ($out[0]);
echo ("<br>");
echo ($out[1]);
}
|
Но всё равно что то нитак. Выводятся не все куки, а только первые два. | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 09:57)
| | Странно, что не один. Функция preg_match находит только первое совпадение. Я написал пример выше. | |
|
|
|
|
|
|
|
для: Эй
(01.07.2008 в 10:03)
| | Уважаемый, покажите пожалуйста как мне исправить мою функцию чтобы все куки свалились в массив.
А то похоже я что то недогоняю ... | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 10:34)
| |
$text="";
$i=0;
while(!feof($fp))
{
$buff = fgets($fp,1024);
//preg_replace("!Set-Cookie:(.*)\n!","",$text);
//preg_match("!Set-Cookie:(.*)\n!",$buff,$out[$i]);
//@$cook[$i]=preg_replace("!Set-Cookie:(.*)\n!",$buff);
echo ($buff);
$text .= $buff;
}
preg_match_all('~^Set-Cookie:(.*)\\r$~m', $text, $matches);
print_r($matches);
|
| |
|
|
|
|
|
|
|
для: Эй
(01.07.2008 в 10:43)
| | Теперь выводится. ... но почему то дублируется:
Array ( [0] => Array (
[0] => Set-Cookie: zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 06:56:19 GMT
[1] => Set-Cookie: zhuki_stat_enter=1
[2] => Set-Cookie: test_cookie1=1; path=/
[3] => Set-Cookie: test_cookie2=1
[4] => Set-Cookie:number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A6%3Bi%3A4%3Bi%3A5%3Bi%3A3%3Bi%3A0%3Bi%3A2%3Bi%3A6%3Bi%3A1%3Bi%3A9%3B%7D; path=/ )
[1] => Array (
[0] => zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 06:56:19 GMT
[1] => zhuki_stat_enter=1
[2] => test_cookie1=1; path=/
[3] => test_cookie2=1
[4] =>number_pasport =a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A6%3Bi%3A4%3Bi%3A5%3Bi%3A3%3Bi%3A0%3Bi%3A2%3Bi%3A6%3Bi%3A1%3Bi%3A9%3B%7D; path=/ ) )
|
Незнаете почему может дублироваться ? ... я непонимаю почему. | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 11:02)
| | Ой ... что то незаметил сразу ... значения то у них разные.
Первый подмассив:
Set-Cookie: zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 07:05:13 GMT
Set-Cookie: zhuki_stat_enter=1
Set-Cookie: test_cookie1=1; path=/
Set-Cookie: test_cookie2=1
Set-Cookie: number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A1%3Bi%3A4%3Bi%3A4%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A5%3Bi%3A1%3Bi%3A1%3B%7D; path=/
|
Второй подмассив:
zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 07:05:13 GMT
zhuki_stat_enter=1
test_cookie1=1; path=/
test_cookie2=1
number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A1%3Bi%3A4%3Bi%3A4%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A5%3Bi%3A1%3Bi%3A1%3B%7D; path=/
|
Вот второй то мне и нужен.
Спасибо за помощь. | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 11:02)
| | Нда - вам стоит прочитать про print_r() и preg_match_all() для начала, ничего он не дублирует!!! | |
|
|
|
|
|
|
|
для: mihdan
(01.07.2008 в 11:09)
| | Как это ?!
Вот вид массива который он возвращает :
Array ( [0] => Array ( [0] => Set-Cookie: zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 07:05:13 GMT
[1] => Set-Cookie: zhuki_stat_enter=1
[2] =>Set-Cookie: test_cookie1=1; path=/
[3] => Set-Cookie: test_cookie2=1
[4] => Set-Cookie: number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A1%3Bi%3A4%3Bi%3A4%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A5%3Bi%3A1%3Bi%3A1%3B%7D; path=/ )
[1] => Array ( [0] => zhuki_stat_enter=deleted; expires=Mon, 02-Jul-2007 07:05:13 GMT
[1] => zhuki_stat_enter=1
[2] => test_cookie1=1; path=/
[3] => test_cookie2=1
[4] => number_pasport=a%3A6%3A%7Bi%3A6%3Bi%3A5%3Bi%3A5%3Bi%3A1%3Bi%3A4%3Bi%3A4%3Bi%3A3%3Bi%3A6%3Bi%3A2%3Bi%3A5%3Bi%3A1%3Bi%3A1%3B%7D; path=/ ) )
|
Оба подмассива почти одинаковые... отличие только в том, что в первом массиве Set-Cookie:* , а во втром сразу переменная куков = значению.
Причём тут print_r() ? | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 11:26)
| | Вы так и не поняли ???
В массиве с индексом 0 - массив полных вхождений шаблона, дальше - то, что соответствует первой подмаски, и так далее, поэтому вам нужен массив с индексом 1 | |
|
|
|
|
|
|
|
для: Oligarx
(01.07.2008 в 09:57)
| | Да вам же написали preg_match_all() | |
|
|
|