Открываю я сокет с помощю fsockopen() Подключаюсь к сайту. Как проверить какой ответ отдаёт вервер? Ну если статус 200! то продолжить. или же сокет сам закрывается когда ответ приходит отличный от 200? тогда $fp = fsockopen() if (!$fp) { die("файла на удалённом сервере нет"); }
PHP: $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); $errno, $errstr, http://ua2.php.net/fsockopen почитай полностью про функцию.
In.Exploit по секрету - с помощью ТОЛЬКО fsockopen - можно проверить ТОЛЬКО работоспособность порта на сервере. Как проверить наличие файла - вам отписали в предыдущем топике. Вы еще отмахнулись, мол, вам не нужен кот после !$fp Заканчивайте плодить темы, для нубских вопросов - есть выделенный топик про пхп
fsockopen открывает только сокет. через сокет вдальнейшем можно передать инфу. чтобы узнать есть ли на удалённом сайте(соединение с которым ты открыл) файл, нужно отправить http - запрос к нему. тогда уже вернётся код(200/404/...) от сервера. для этой цели имхо curl легче и лучше. там можно одни заголовки ловить.
получите и распишитесь. запросы и что делать с ответом думаю сами замените PHP: if($s=fsockopen($proxy,$prprt)) //if($s=fsockopen("ui.bigmir.net",80)) { $strp="GET http://ui.bigmir.net/gen/rnd/".$capt.".png HTTP/1.0 Accept: */* Cookie: ".$cookie." ".$ua." Referer: http://passport.bigmir.net/icq/ Host: ui.bigmir.net Connection: Close\r\n\r\n"; fputs($s,$strp); $out=""; while(!feof($s)) { $out.=fgets($s,1024); } $pos=strpos($out,"\r\n\r\n"); $caca=trim(substr($out,$pos+1)); $fp=fopen("./cap.png","w"); fwrite($fp,$caca); fclose($fp); //echo $caca; if (strstr("$caca","GIF89")) { $fp = fopen("./cap0.png", 'rb' ); fpassthru($fp); @fclose($fp); die(); } $fp = fopen("./cap.png", 'rb' ); fpassthru($fp); @fclose($fp); } else { if ($dev!=0) echo "Can't open socket to server in getIMG!"; die(); } это из древнего реггера асек через бигмир, который я однажда починил и юзал втихаря
Вот несколько примеров получения Заголовков: Sockets PHP: <?php $fp = @fsockopen("forum.antichat.ru", 80, $errno, $errstr, 3); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET /bn/evapharmacy.gif HTTP/1.1\r\n"; $out .= "Host: forum.antichat.ru\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { @$data .= fread($fp, 1024*5); } fclose($fp); list($headers, $body) = explode("\r\n\r\n", $data); echo $headers; } ?> cURL PHP: <?php $ch = curl_init('http://2forum.antichat.ru/bn/evapharmacy.gif'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $res = curl_exec($ch); $errno = curl_errno($ch); $error = curl_error($ch); curl_close($ch); if($errno > 0) echo $errno.':'.$error; else echo $res; ?> get_headers PHP: <?php $headers = get_headers('/bn/evapharmacy.gif'); foreach ($headers as $k => $v) { echo '['.$k.'] => '.$v.'<br>'; } ?>
Простите, можно поинтересоваться, почему в этой строчке: @$data .= fread($fp, 1024*5); стоит собачка и 1024*5? Правда интересно
Как видиш дата дописывается а т.к. переменная небыла прежде создана пыха выдаст Нотайс. Привычка записи такая, почему именно по 5кб, моё оптимальное решение