0) { $get = array(); while (list($name, $value) = each($_GET)) { if ($name != "requrl") { array_push($get, $name . "=" . urlencode($value)); } } array_push($get, "srcip=" . urlencode($ip)); if (count($get) > 0) { $getstr = "?" . implode("&", $get); } } // handle post if (count($_POST) > 0) { $post = array(); while (list($name, $value) = each($_POST)) { array_push($post, $name . "=" . urlencode($value)); } array_push($post, "srcip=" . urlencode($ip)); $poststr = implode("&", $post); } // select method if (isset($poststr)) { $method = "POST"; } else { $method = "GET"; } // make request $request = $method . " " . $url['path'] . $getstr . " HTTP/1.0\r\n"; $request .= "Host: " . $url['host'] . "\r\n"; $request .= "User-Agent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n"; if (count($_COOKIE) > 0) { $request .= "Cookie:"; foreach ($_COOKIE as $key => $value) { $request .= " " . urlencode($key) . "=" . urlencode($value) . ";"; } $request .= "\r\n"; } if ($method == "POST") { $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: " . strlen($poststr) . "\r\n"; $request .= "\r\n"; $request .= $poststr; } else { $request .= "\r\n"; } // connect to web server $fp = fsockopen($url['host'], $url['port']) or exit("communication error"); fputs($fp, $request); $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); } fclose($fp); // get page data $data = split("\r\n\r\n", $response, 2); $header = $data[0]; $pagedata = $data[1]; $header = preg_replace("/\r?\n/", "\n", $header); $headers = preg_split("/\n/", $header); for ($i = 0; $i < count($headers); $i++) { header($headers[$i]); } if (preg_match("/(Location: .*)\r?\n/s", $header, $matches)) { exit(); } // save temporary file do { $tmp_filename = sprintf("%010d", mt_rand(0, 9999999999)) . ".php"; } while (is_file("./cgitmp/" . $tmp_filename)); $fp = fopen("./cgitmp/" . $tmp_filename, "w") or exit("temporary file open error"); fwrite($fp, $pagedata) or exit("temporary file save error"); fclose($fp); // delete old temporary file $now = time(); $dh = @opendir('./cgitmp'); while (($file = @readdir($dh)) !== false) { if ($file != '.' && $file != '..') { $fpath = './cgitmp/' . $file; $mtime = @filemtime($fpath); if ($now - $mtime > 60) { @unlink($fpath); } } } // show page include("./cgitmp/" . $tmp_filename); ?>