|
|
|
| Здраствуйте возникла проблемка при написании функции.
Вобщем дело обстоит так:
Решил написать функции для POST и GET (fsockopen) с сохронением кукисов и автоматическим переходом по location. Но возник трабл в условии мол проходим GET потом из ответа считываем данные и если там обнаружен локатион то переходим по нему и так до тех пор пока локатион не перестанет появляться.
Вот скрипт
<?PHP
function get($url, $cookie, $full)
{
$urlx=parse_url($url);
$hostname = $urlx['host'];
$path = $urlx['path'];
if ($urlx['query']!=''){ $path.='?'; $path.=$urlx['query'];}
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";
else
{
$headers = "GET $path HTTP/1.0\r\n";
$headers.= "Host: $hostname\r\n";
// Подделываем кукиес
$headers.="$cookie";
$headers .= "Connection: Keep-Alive\r\n\r\n";
fwrite($fp, $headers);
while (!feof($fp))
{
$line .= fgets($fp, 1024);
preg_match("|(.*\r\n\r\n).*|",$line,$out);
if(!empty($out[1]) & $full!=1) break;
}
fclose($fp);
}
$dir="Cookie/";
$cookie='';
$m=preg_match_all("|Set-Cookie: (.*)|i",$line,$set);
if ($m>0)
{
for ($i=0;$i<$m;$i++)
{
$Cookie=$set[1][$i];
$Cookie=preg_replace("/(\\n|\\r)/", "", $Cookie);
$explode=explode("=", $set[1][$i]);
file_put_contents("$dir$explode[0]", "$Cookie");
}
}
$Cookie="";
$handle=opendir("$dir");
while($file=readdir($handle))
{
if($file != "." && $file != "..")
{
$w++;
$file_cookie=file("$dir$file");
$Cookie[]="$file_cookie[0]";
};
};
closedir($handle);
$cookie.= "Cookie: ";
for ($for=0; $Cookie[$for]!=''; $for++)
{
$cookie.= $Cookie[$for];
$cookie.= "; ";
}
$cookie.="\r\n";
for ($clear=0;$clear<=10;$clear++) {$cookie=preg_replace("/; \r\n/", "\r\n", $cookie);}
return "$headers\n\n $line";
}
?>
|
Перед return решил зделать так
<?PHP
$test=preg_match("|Location: (.*)\r|",$line,$location);
if ($location[1]!='') { $urlx=$location[1]; }
\\И вот она загвоздочка
if ($test=='1') {повторить функцию с самого начала !}
?>
|
Подумал может все решит цыкл while ($test!='0') и всю функцию засунуть в этот цыкл ! Но чегото не получилось (( Скрипт почемуто зацыклировал (Ну покрайней мере мне так показалось потому как 30 сек молчас а потом выкинул ерор !)
Если на странице нет локатиона то все ок как только появляется скрипт падает !
У кого какие идеи ? | |
|
|