| 
<?php
//check if target location specified
 if (!isset($HTTP_GET_VARS['php_browser_uri']) || !$HTTP_GET_VARS['php_browser_uri']){
 header("Location: about:blank");
 die;
 }
 
 if (get_magic_quotes_gpc())
 $new_uri = stripslashes( urldecode( $HTTP_GET_VARS['php_browser_uri'] ));
 else
 $new_uri = urldecode( $HTTP_GET_VARS['php_browser_uri'] );
 
 //link up class definitions
 require_once "URI.class.php";
 require_once "GetUri.php";
 require_once "ParseHtml.php";
 
 //initialize object to work with HTTP protocol
 $GetURI =& new GetUri($new_uri);
 
 //follow redirects, get content type and other headers
 $GetURI->uri_lookup();
 check_errors();
 
 //get URI after server redirects
 $final_uri = $GetURI->URI->get_full_uri();
 
 //get content type
 $full_content_type = $GetURI->Response->content_type;
 if ($semicolon_pos = strpos($full_content_type, ";")){
 $content_type = rtrim( substr( $full_content_type, 0, $semicolon_pos ) );
 }else{
 $content_type = $full_content_type;
 }
 
 //set content type
 header ("Content-type: $full_content_type");
 //echo $content_type;
 
 //check content type
 switch (0){
 case strcasecmp("text/html", $content_type):
 //  case strcasecmp("application/xhtml+xml", $content_type):
 $parse = true;
 $store_in_memory = true;
 break;
 default:
 $store_in_memory = false;
 $parse = false;
 break;
 }
 
 //get content of the URI
 $content = "";
 $GetURI->connect("fopen");
 check_errors();
 //binary-safe reading
 $GetURI->link_read_method ("bytes");
 
 if ($store_in_memory){
 while (!$GetURI->Response->eof_reached()){
 $content .= $GetURI->link_read();
 }
 }else{
 while (!$GetURI->Response->eof_reached()){
 echo $GetURI->link_read();
 }
 die;
 }
 
 if ($parse){
 $HtmlParser =& new ParseHtml($content, $GetURI->URI);
 $content = $HtmlParser->html;
 }
 echo $content;
 
 
 //check errors in GetUri
 function check_errors(){
 global $GetURI, $new_uri;
 if ($GetURI->count_errors()){
 //errors found
 $output  = "Error occured while looking up $new_uri. \r\n";
 $output .= "<table border='0' width='100%'><tr><td><table border='1'>\r\n";
 foreach ($GetURI->errors as $error_name=>$error_description){
 $output .= "<tr><td>$error_name:</td><td>$error_description</td></tr>";
 }
 $output .= "</table></td></tr></table>\r\n";
 //dispaly errors and halt
 echo $output;
 die;
 }
 }
 
 ?>
 |