Discover Habbo's history
Treat yourself with a Secret Santa gift.... of a random Wiki page for you to start exploring Habbo's history!
Happy holidays!
Celebrate with us at Habbox on the hotel, on our Forum and right here!
Join Habbox!
One of us! One of us! Click here to see the roles you could take as part of the Habbox community!


Results 1 to 2 of 2

Thread: PHP Error...

  1. #1
    Join Date
    May 2005
    Location
    /etc/passwd
    Posts
    19,110
    Tokens
    1,139

    Latest Awards:

    Default PHP Error...

    Heya

    I got this PHP Error:
    PHP Code:
    WarningCannot modify header information headers already sent by (output started at /home/tomspee/public_html/proxy tests/site/index2.php:7in /home/tomspee/public_html/proxy tests/site/help/PHProxy.class.php on line 627 
    Here is the files:

    Index2.php
    PHP Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>RevisionArea.co.uk</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
    <!--
    .style1 {
        color: #FFFFFF;
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 9px;
    }
    body,td,th {
        color: #3E3E3E;
    }
    a:link {
        color: #7D7D7D;
    }
    a:visited {
        color: #7D7D7D;
    }
    .style4 {font-size: 12px; color: #7D7D7D; font-family: Verdana, Arial, Helvetica, sans-serif;}
    -->
    </style>
    </head>

    <body>
    <div align="center">
      <table width="100%" border="0" background="Bars/pink_grad.PNG" id="pinkgrad">
        <tr>
          <td>&nbsp;</td>
        </tr>
      </table>
      <table width="100%" border="0" id="bottom">
        <tr>
          <td><div align="right" class="style1">&copy; Copyright 2006 RevisionArea.co.uk </div></td>
        </tr>
      </table>
      <br />
      <img src="PSCode/images/revision-area_03.gif" alt="RevisionArea.co.uk" width="320" height="36" longdesc="http://www.revisionarea.co.uk" /><br />
        <span class="style4"><a href="index.html" target="_self">Home</a> | About Us | Afflitiates | Greetz | Contact Us | Help</span></div>

    <div><?php

    require 'help/PHProxy.class.php';

    $config = array
    (
        
    'url_var_name'             => 'q',
        
    'flags_var_name'           => 'hl',
        
    'get_form_name'            => '__script_get_form',
        
    'proxy_url_form_name'      => 'poxy_url_form',
        
    'proxy_settings_form_name' => 'poxy_settings_form',
        
    'max_file_size'            => -1
    );

    $flags 'prev';

    if (isset(
    $_GET[$config['flags_var_name']]))
    {
        
    $flags $_GET[$config['flags_var_name']];
    }

    $PHProxy = & new PHProxy($config$flags);

    if (isset(
    $_GET[$PHProxy->config['get_form_name']]))
    {
        
    $url decode_url($_GET[$PHProxy->config['get_form_name']]);
        
    $qstr preg_match('#\?#'$url) ? (strpos($url'?') === strlen($url) ? '' '&') : '?';
        
    $arr explode('&'$_SERVER['QUERY_STRING']);
        if (
    preg_match('#^'.$PHProxy->config['get_form_name'].'#'$arr[0]))
        {
            
    array_shift($arr);
        }
        
    $url .= $qstr implode('&'$arr);
        
    $PHProxy->start_transfer(encode_url($url));
        echo 
    $PHProxy->return_response();
        exit();
    }

    if (isset(
    $_GET[$PHProxy->config['url_var_name']]))
    {
        
    $PHProxy->start_transfer($_GET[$PHProxy->config['url_var_name']]);
        echo 
    $PHProxy->return_response();
        exit();
    }

    if (isset(
    $_GET['action'], $_GET['delete']) && $_GET['action'] == 'cookies')
    {
        
    $PHProxy->delete_cookies($_GET['delete']);
        
    header("Location: $PHProxy->script_url?action=cookies");
        exit();
    }

    if (isset(
    $_POST['username'], $_POST['password'], $_POST['server'], $_POST['realm'], $_POST['auth_url']))
    {
        
    $PHProxy->request_method 'GET';
        
    $PHProxy->url_segments['host'] = decode_url($_POST['server']);
        
    $PHProxy->set_authorization($_POST['username'], $_POST['password']);
        
    $PHProxy->start_transfer($_POST['auth_url']);
        echo 
    $PHProxy->return_response();
        exit();
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
    <head>
      <title>PHProxy</title>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
      <link rel="stylesheet" type="text/css" href="style.css" media="all" />
      <script src="help/javascript.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="container">
      <div id="menu">
        <a href="<?php echo $_SERVER['PHP_SELF'?>">URL Form</a> | 
        <a href="?action=cookies">Manage Cookies</a>
      </div>
      <div class="title">PHProxy</div>
      <noscript><div class="error"><big>You have Javascript disabled. Please enable it to use the proxy</big></div></noscript>
    <?php

    if (isset($_GET['error']))
    {
        echo 
    '<div class="error"><b>Error:</b> ' htmlspecialchars($_GET['error']) . '</div>';
        if (isset(
    $_GET['retry']))
        {
            echo 
    '<div class="error"><a href="'$PHProxy->proxify_url(decode_url($_GET['retry'])) .'">Retry</a></div>';
        } 
    }

    if (isset(
    $_GET['action']))
    {
        if (
    $_GET['action'] == 'cookies')
        {
            
    $cookies $PHProxy->get_cookies('COOKIE'false);

            if (!empty(
    $cookies))
            {
                echo 
    '<table style="width: 100%">';
                echo 
    '<tr><td class="option" colspan="5"><a href="?action=cookies&delete=all">Clear All Cookies</a></td></tr>';
                echo 
    '<tr><td class="head">Name</td><td class="head">Domain</td><td class="head">Path</td><td class="head">Value</td><td class="head">Action</td></tr>';

                for (
    $i 0$i count($cookies); $i++)
                {
                    
    $j $i&' class="shade"' '';
                    echo 
    "<tr><td$j>{$cookies[$i][0]}</td><td$j>{$cookies[$i][1]}</td><td$j>{$cookies[$i][2]}</td>"
                       
    "<td$j>" wordwrap($cookies[$i][3], 15' ') ."</td><td$j><a href="'"?action=cookies&delete='md5(implode(''$cookies[$i])) . '">delete</a></td></tr>';
                }

                echo 
    '</table>';
            }
            else
            {
                echo 
    '<div class="error">No cookies available.</div>';
            }
        }
        else if (
    $_GET['action'] == 'auth' && isset($_GET['server'], $_GET['realm'], $_GET['auth_url']))
        {
            echo 
    '<form method="post" action="' $_SERVER['PHP_SELF'] . '">';
            echo 
    '<input type="hidden" name="server" value="'$_GET['server'] .'" />';
            echo 
    '<input type="hidden" name="realm" value="'$_GET['realm'] .'" />';
            echo 
    '<input type="hidden" name="auth_url" value="'$_GET['auth_url'] .'" />';
            echo 
    '<table style="width: 100%">';
            echo 
    '<tr><td colspan="2" class="option">Enter user name and password for <b>' decode_url($_GET['realm']) . '</b> at <i>' decode_url($_GET['server']) . '</i></td></tr>';
            echo 
    '<tr><td width="30%" class="option">User name</td><td class="option"><input type="text" name="username" value="" /></td></tr>';
            echo 
    '<tr><td width="30%" class="option">Password</td><td class="option"><input type="password" name="password" value="" /></td></tr>';
            echo 
    '<tr><td colspan="2" style="text-align: center"><input type="submit" value="OK" /></td></tr>';
            echo 
    '</table>';
            echo 
    '</form>';
        }

    else
    {
      
    ?>
      <form name="<?php echo $PHProxy->config['proxy_url_form_name'?>" method="get" action="<?php echo $_SERVER['PHP_SELF'?>">
      <input type="hidden" name="<?php echo $PHProxy->config['url_var_name'?>" value="" id="url_input" />
      <input type="hidden" name="<?php echo $PHProxy->config['flags_var_name'?>" value="" />
      </form>
      <form name="<?php echo $PHProxy->config['proxy_settings_form_name'?>" method="get" action="" onsubmit="return submit_form();">
      <table style="width: 100%">
      <tr><td class="option" style="width: 20%">URL</td><td class="option" style="width: 80%">&nbsp;<input type="text" name="url" size="70" value="" /></td></tr>
      <?php echo $PHProxy->options_list(truetrue?>
      <tr><td class="option" style="width: 20%">New Window</td><td class="option" style="width: 80%"><input type="checkbox" name="new_window" />Open URL in a new window </td></tr>
      </table>
      <div style="text-align: center"><input type="submit" name="browse" value="Browse" onclick="return submit_form();" /></div>
      <div style="text-align: center">PHProxy <?php echo $PHProxy->version ?> &copy; 2005 <a href="http://www.whitefyre.com/">whiteFyre</a>
    </div>
      </form>
      <?php
    }

    echo 
    '</div></body></html>';
    ?></div>
    </body>
    </html>
    PHProxy.class.php
    PHP Code:
    <?php

    /*
       +-----------------+------------------------------------------------------------+
       |  Class          | PHProxy                                                    |
       |  Author         | ultimategamer00 (Abdullah A.)                              |
       |  Last Modified  | 12:42 AM 9/8/2005                                          |
       +-----------------+------------------------------------------------------------+
       |  This program is free software; you can redistribute it and/or               |
       |  modify it under the terms of the GNU General Public License                 |
       |  as published by the Free Software Foundation; either version 2              |
       |  of the License, or (at your option) any later version.                      |
       |                                                                              |
       |  This program is distributed in the hope that it will be useful,             |
       |  but WITHOUT ANY WARRANTY; without even the implied warranty of              |
       |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
       |  GNU General Public License for more details.                                |
       |                                                                              |
       |  You should have received a copy of the GNU General Public License           |
       |  along with this program; if not, write to the Free Software                 |
       |  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
       +------------------------------------------------------------------------------+
    */


    class PHProxy
    {
        
    //
        // Configurable vars
        //

        
    var $banned_hosts = array
       (
           
    '.localhost',
           
    '127.0.0.1'
        
    );
        var 
    $flags = array
        (
            
    'include_form'    => 1
            
    'remove_scripts'  => 1,
            
    'accept_cookies'  => 1,
            
    'show_images'     => 1,
            
    'show_referer'    => 1,
            
    'rotate13'        => 0,
            
    'base64_encode'   => 1,
            
    'strip_meta'      => 0,
            
    'strip_title'     => 0,
            
    'session_cookies' => 1
        
    );

        
    //
        // End Configurable vars
        //

        //
        // Edit the $config variables in index.php and javascript.js instead
        //

        
    var $config = array
        (
            
    'url_var_name'             => 'q',
            
    'flags_var_name'           => 'hl',
            
    'get_form_name'            => '__script_get_form',
            
    'proxy_url_form_name'      => 'poxy_url_form',
            
    'proxy_settings_form_name' => 'poxy_settings_form',
            
    'max_file_size'            => -1
        
    );

        var 
    $version;
        var 
    $script_url;
        var 
    $http_host;
        var 
    $url;
        var 
    $url_segments;
        var 
    $base;

        var 
    $socket;


        var 
    $request_method;
        var 
    $request_headers;
        var 
    $basic_auth_header;
        var 
    $basic_auth_realm;
        var 
    $data_boundary;
        var 
    $post_body;

        var 
    $response_headers;
        var 
    $response_code;
        var 
    $content_type;
        var 
    $content_length;
        var 
    $response_body;

        function 
    PHProxy($config$flags 'previous')
        {
            
    $this->version    '0.4';
            
    $this->http_host  = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost');
            
    $this->script_url 'http' 
                              
    . (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' 's' '')
                              . 
    '://'
                              
    $this->http_host
                              
    $_SERVER['PHP_SELF'];
            
    $this->request_method $_SERVER['REQUEST_METHOD'];
            
    $this->config $config;
            
    $this->set_flags($flags);

            if (
    $this->flags['rotate13'])
            {
                function 
    encode_url($url)
                {
                    return 
    rawurlencode(str_rot13($url));
                }
                function 
    decode_url($url)
                {
                    return 
    str_replace('&amp;''&'str_rot13(rawurldecode($url)));
                }
            }
            else if (
    $this->flags['base64_encode'])
            {
                function 
    encode_url($url)
                {
                    return 
    rawurlencode(base64_encode($url));
                }
                function 
    decode_url($url)
                {
                    return 
    str_replace('&amp;''&'base64_decode(rawurldecode($url)));
                }
            }
            else
            {
                function 
    encode_url($url)
                {
                    return 
    rawurlencode($url);
                }
                function 
    decode_url($url)
                {
                    return 
    str_replace('&amp;''&'rawurldecode($url));
                }
            }
        }

        function 
    start_transfer($url)
        {
            
    $this->set_url($url);
            
    $this->open_socket();
            
    $this->http_basic_auth();
            
    $this->set_request_headers();
            
    $this->set_response();
            
    $this->http_basic_auth();
        }

        function 
    open_socket()
        {
            
    $this->socket = @fsockopen($this->url_segments['host'], $this->url_segments['port'], $err_no$err_str12);

            if (
    $this->socket === false)
            {
                
    $this->trigger_error("$err_no$err_str (URL: {$this->url_segments['host']})"encode_url($this->url));
            }
        }

        function 
    set_response()
        {
            
    fwrite($this->socket$this->request_headers);

            
    // Reset response headers and response body.

            
    $this->response_headers '';
            
    $this->response_body '';

            
    // Get the response headers first to extract content-type.
            
    do
            {
                
    $line fgets($this->socket4096);
                
    $this->response_headers .= $line;
            }
            while (
    $line != "\r\n");

            
    $this->response_code next(explode(' '$this->response_headers));
            
    $this->set_content_type();
            
    $this->set_content_length();

            if (
    $this->flags['accept_cookies'] == 1)
            {
                
    $this->set_cookies();
            }

            if (
    $this->follow_location())
            {
                
    fclose($this->socket);
                
    $this->start_transfer($this->url);
            }
            else
            {
                
    // If content-type isn't html or xhtml, just dump the rest of the response back to the client since
                // we don't need to do any further operations on it. And if the file were like a large movie file, it
                // wouldn't fit in a variable without exceeding the memory limit alloted for the scipt.

                
    if (!in_array($this->content_type, array('text/html''application/xml+xhtml''application/xhtml+xml''text/css')) && (!$this->content_length || (int)$this->content_length <= $this->config['max_file_size']))
                {
                    
    // Impose no time limit since it might be a large file that would take a long while to download.
                    
    @set_time_limit(0);
                    
    $this->send_response_headers();
                    
    fpassthru($this->socket);
                    
    fclose($this->socket);
                    exit();
                } 

                
    // Read the HTML response in $this->response_body
                
    do
                {
                    
    $data fread($this->socket8192);
                    
    $this->response_body .= $data;

                }   
                while (
    strlen($data) != 0);

                
    fclose($this->socket);
            }
        }

        function 
    set_content_type()
        {
            if (
    preg_match("#content-type:([^\r\n]*)#i"$this->response_headers$matches) && trim($matches[1]) != '')
            {
                
    $content_type_array explode(';'$matches[1]);
                
    $this->content_type strtolower(trim($content_type_array[0]));
            }
            else
            {
                
    $this->content_type 'text/html';
            }
        }

        function 
    set_content_length()
        {
            if (
    preg_match("#content-length:([^\r\n]*)#i"$this->response_headers$matches) && trim($matches[1]) != '')
            {
                
    $this->content_length trim($matches[1]);
            }
            else
            {
                
    $this->content_length false;
            }
        }

        function 
    http_basic_auth()
        {
            if (empty(
    $this->response_code))
            {
                if (isset(
    $this->url_segments['user'], $this->url_segments['pass']))
                {
                    
    $this->set_authorization($this->url_segments['user'], $this->url_segments['pass']);
                    return 
    true;
                }
                else if ((
    $stored_auth $this->get_cookies('AUTH')) != '')
                {
                    
    $this->basic_auth_header $stored_auth;
                    return 
    true;
                }
            }
            else if (
    $this->response_code == 401 && preg_match('#www-authenticate:\s*basic\s+(?:realm="(.*?)")?#i'$this->response_headers$matches))
            {
                
    header('Location: 'sprintf('%s?action=auth&server=%s&realm=%s&auth_url=%s'$this->script_urlencode_url($this->url_segments['host']), encode_url($matches[1]), encode_url($this->url)));
                exit();
            }
            return 
    false;
        }

        function 
    set_authorization($username$password)
        {
            
    $this->basic_auth_header base64_encode(sprintf('%s:%s'$username$password));
            
    setcookie(urlencode("AUTH;{$this->url_segments['host']}"), $this->basic_auth_header0''$this->http_host);
        }

        function 
    set_url($url)
        {
             
    $this->url decode_url($url);

             if (
    strpos($this->url'://') === false)
             {
                 
    $this->url 'http://' $this->url;
             }

             if (
    $this->parse_url($this->url$this->url_segments))
             {
                 
    $this->base $this->url_segments;

                 if (!
    $this->is_allowed_host())
                 {
                     exit();
                 }
             }
             else
             {
                 
    $this->trigger_error('Please supply a valid URL');
             }
        }

        function 
    parse_url($url, & $container)
        {
            
    $temp = @parse_url($url);
            
            if (!empty(
    $temp))
            {
                
    $temp['port']     = isset($temp['port']) ? $temp['port'] : 80;
                
    $temp['path']     = isset($temp['path']) ? $temp['path'] : '/';
                
    $temp['file']     = substr($temp['path'], strrpos($temp['path'], '/')+1);
                
    $temp['dir']      = substr($temp['path'], 0strrpos($temp['path'], '/'));
                
    $temp['base']     = $temp['scheme'] . '://' $temp['host'] . ($temp['port'] != 80 ?  ':' $temp['port'] : '') . $temp['dir'];
                
    $temp['prev_dir'] = $temp['path'] != '/' substr($temp['base'], 0strrpos($temp['base'], '/')+1) : $temp['base'] . '/';
                
    $container $temp;

                return 
    true;

                
    /*
                     URL: http://username:[email protected]:80/dir/dir/page.php?foo=bar&foo2=bar2#bookmark
                     scheme   // http
                     host     // www.example.com
                     port     // 80
                     user     // username
                     pass     // password
                     path     // /dir/dir/page.php
                     query    // foo=bar&foo2=bar2
                     fragment // bookmark
                     file     // page.php
                     dir      // /dir/dir
                     base     // http://www.example.com/dir/dir
                     prev_dir // http://www.example.com/dir/
                 */
            
    }

            return 
    false;
        }

        function 
    is_allowed_host()
        {
            if (!empty(
    $this->banned_hosts))
            {
                foreach (
    $this->banned_hosts as $host)
                {
                    if ((
    $host{0} == '.' && preg_match('#' trim($host'.') . '$#i'$this->url_segments['host'])) || strcasecmp($host$this->url_segments['host']) == 0)
                    {
                        return 
    false;
                    }
                }

                return 
    true;
            }

            return 
    true;
        }

        function 
    modify_urls()
        {
            
    // this was a ***** to code
            // follows CGIProxy's logic of his HTML routine in some aspects

            
    $tags = array
            (
                
    'a'          => array('href'),
                
    'img'        => array('src''longdesc'),
                
    'image'      => array('src''longdesc'),
                
    'body'       => array('background'),
                
    'base'       => array('href'),
                
    'frame'      => array('src''longdesc'),
                
    'iframe'     => array('src''longdesc'),
                
    'head'       => array('profile'),
                
    'layer'      => array('src'),
                
    'input'      => array('src''usemap'),
                
    'form'       => array('action'),
                
    'area'       => array('href'),
                
    'link'       => array('href''src''urn'),
                
    'meta'       => array('content'),
                
    'param'      => array('value'),
                
    'applet'     => array('codebase''code''object''archive'),
                
    'object'     => array('usermap''codebase''classid''archive''data'),
                
    'script'     => array('src'),
                
    'select'     => array('src'),
                
    'hr'         => array('src'),
                
    'table'      => array('background'),
                
    'tr'         => array('background'),
                
    'th'         => array('background'),
                
    'td'         => array('background'),
                
    'bgsound'    => array('src'),
                
    'blockquote' => array('cite'),
                
    'del'        => array('cite'),
                
    'embed'      => array('src'),
                
    'fig'        => array('src''imagemap'),
                
    'ilayer'     => array('src'),
                
    'ins'        => array('cite'),
                
    'note'       => array('src'),
                
    'overlay'    => array('src''imagemap'),
                
    'q'          => array('cite'),
                
    'ul'         => array('src')
            );

            
    preg_match_all('#(<\s*style[^>]*>)(.*?)(<\s*/style[^>]*>)#is'$this->response_body$matchesPREG_SET_ORDER);

            for (
    $i 0$count_i count($matches); $i $count_i$i++)
            {
                
    $this->response_body str_replace($matches[$i][0], $matches[$i][1]. $this->proxify_css($matches[$i][2]) .$matches[$i][3], $this->response_body);
            }

            
    preg_match_all("#<\s*([a-zA-Z]+)([^>]+)>#"$this->response_body$matches);

            for (
    $i 0$count_i count($matches[0]); $i $count_i$i++)
            {
                
    $tag strtolower($matches[1][$i]);

                if (!isset(
    $tags[$tag]) || !preg_match_all("#([a-zA-Z\-\/]+)\s*(?:=\s*(?:\"([^\">]*)\"?|'([^'>]*)'?|([^'\"\s]*)))?#"$matches[2][$i], $mPREG_SET_ORDER))
                {
                    continue;
                }

                
    $rebuild    false;
                
    $extra_html $temp '';
                
    $attrs      = array();

                for (
    $j 0$count_j count($m); $j $count_j$attrs[strtolower($m[$j][1])] = (isset($m[$j][4]) ? $m[$j][4] : (isset($m[$j][3]) ? $m[$j][3] : (isset($m[$j][2]) ? $m[$j][2] : false))), $j++);

                switch (
    $tag)
                {
                    case 
    'base':
                        if (isset(
    $attrs['href']))
                        {
                            
    $rebuild true;  
                            
    $this->parse_url($attrs['href'], $this->base);
                            
    $attrs['href'] = $this->proxify_url($attrs['href']);
                        }
                        break;
                    case 
    'body':
                        if (
    $this->flags['include_form'])
                        {
                            
    $rebuild true;
                            
    ob_start();
                                include_once 
    'url_form.inc';
                                
    $extra_html "\n" ob_get_contents();
                            
    ob_end_clean();
                        }
                    case 
    'meta':
                        if (
    $this->flags['strip_meta'] && isset($attrs['name']) && preg_match('#(keywords|description)#i'$attrs['name']))
                        {
                            
    $this->response_body str_replace($matches[0][$i], ''$this->response_body);
                        }
                        if (isset(
    $attrs['http-equiv'], $attrs['content']) && strtolower($attrs['http-equiv']) === 'refresh')
                        {
                            if (
    preg_match('#^(\s*[0-9]+\s*;\s*url=)(.*)#i'$attrs['content'], $content))
                            {
                                
    $rebuild true;
                                
    $attrs['content'] =  $content[1] . $this->proxify_url($content[2]);
                            }
                        }
                        break;
                    case 
    'head':
                        if (isset(
    $attrs['profile']))
                        {
                            
    //space-separated list of urls
                            
    $rebuild true;
                            
    $attrs['profile'] = implode(' 'array_map(array(&$this'proxify_url'), explode(' '$attrs['profile'])));
                        }
                        break;
                    case 
    'applet':
                        if (isset(
    $attrs['codebase']))
                        {
                            
    $rebuild true;
                            
    $temp $this->base;
                            
    $this->parse_url($this->proxify_url(rtrim($attrs['codebase'], '/') . '/'false), $this->base);
                            unset(
    $attrs['codebase']);
                        }
                        if (isset(
    $attrs['code']) && strpos($attrs['code'], '/') !== false)
                        {
                            
    $rebuild true;
                            
    $attrs['code'] = $this->proxify_url($attrs['code']);
                        }
                        if (isset(
    $attrs['object']))
                        {
                            
    $rebuild true;
                            
    $attrs['object'] = $this->proxify_url($attrs['object']);
                        }
                        if (isset(
    $attrs['archive']))
                        {
                            
    $rebuild true;
                            
    $attrs['archive'] = implode(','array_map(array(&$this'proxify_url'), preg_split('#\s*,\s*#'$attrs['archive'])));
                        }
                        if (!empty(
    $temp))
                        {
                            
    $this->base $temp;
                        }
                        break;
                    case 
    'object':
                        if (isset(
    $attrs['usemap']))
                        {
                            
    $rebuild true;
                            
    $attrs['usemap'] = $this->proxify_url($attrs['usemap']);
                        }
                        if (isset(
    $attrs['codebase']))
                        {
                            
    $rebuild true;
                            
    $temp $this->base;
                            
    $this->parse_url($this->proxify_url(rtrim($attrs['codebase'], '/') . '/'false), $this->base);
                            unset(
    $attrs['codebase']);
                        }
                        if (isset(
    $attrs['data']))
                        {
                            
    $rebuild true;
                            
    $attrs['data'] = $this->proxify_url($attrs['data']);
                        }
                        if (isset(
    $attrs['classid']) && !preg_match('#^clsid:#i'$attrs['classid']))
                        {
                            
    $rebuild true;
                            
    $attrs['classid'] = $this->proxify_url($attrs['classid']);
                        }
                        if (isset(
    $attrs['archive']))
                        {
                            
    $rebuild true;
                            
    $attrs['archive'] = implode(' 'array_map(array(&$this'proxify_url'), explode(' '$attrs['archive'])));
                        }
                        if (!empty(
    $temp))
                        {
                            
    $this->base $temp;
                        }
                        break;
                    case 
    'param':
                        if (isset(
    $attrs['valuetype'], $attrs['value']) && strtolower($attrs['valuetype']) == 'ref' && preg_match('#^[\w.+-]+://#'$attrs['value']))
                        {
                            
    $rebuild true;
                            
    $attrs['value'] = $this->proxify_url($attrs['value']);
                        }
                        break;
                    case 
    'form':
                        if (isset(
    $attrs['action']))
                        {
                            if (
    trim($attrs['action']) === '')
                            {
                                
    $rebuild true;
                                
    $attrs['action'] = $this->url_segments['path'];
                            }
                            if (!isset(
    $attrs['method']) || strtolower($attrs['method']) === 'get')
                            {
                                
    $rebuild true;
                                
    $extra_html '<input type="hidden" name="' $this->config['get_form_name'] . '" value="' encode_url($this->proxify_url($attrs['action'], false)) . '" />';
                                
    $attrs['action'] = '';
                                break;
                            }
                        } 
                    default:
                        foreach (
    $tags[$tag] as $attr)
                        {
                            if (isset(
    $attrs[$attr]))
                            {
                                
    $rebuild true;
                                
    $attrs[$attr] = $this->proxify_url($attrs[$attr]);
                            }
                        }
                        break;
                }

                if (
    $rebuild)
                {
                    
    $new_tag "<$tag";
                    foreach (
    $attrs as $name => $value)
                    {
                        
    $delim strpos($value'"') && !strpos($value"'") ? "'" '"';
                        
    $new_tag .= ' ' $name . ($value !== false '=' $delim $value $delim '');
                    }

                    
    $this->response_body str_replace($matches[0][$i], $new_tag '>' $extra_html$this->response_body);
                }
            }
        }

        function 
    proxify_css($css)
        {
           
    preg_match_all('#url\s*\(\s*(([^)]*(\\\))*[^)]*)(\)|$)?#i'$css$matchesPREG_SET_ORDER);

           for (
    $i 0$count count($matches); $i $count$i++)
           {
               
    $css str_replace($matches[$i][0], 'url(' $this->proxify_css_url($matches[$i][1]) . ')'$css);
           }

           
    preg_match_all("#@import\s*(?:\"([^\">]*)\"?|'([^'>]*)'?)([^;]*)(;|$)#i"$css$matchesPREG_SET_ORDER);

           for (
    $i 0$count count($matches); $i $count$i++)
           {
               
    $delim '"';
               
    $url   $matches[$i][2];

               if (isset(
    $matches[$i][3]))
               {
                   
    $delim "'";
                   
    $url $matches[$i][3];
               }

               
    $css str_replace($matches[$i][0], '@import ' $delim $this->proxify_css_url($matches[$i][1]) . $delim . (isset($matches[$i][4]) ? $matches[$i][4] : ''), $css);
           }

           return 
    $css;
        }

        function 
    proxify_css_url($url)
        {
            
    $url trim($url);
            
    $delim '';

            if (
    strpos($url'"') === 0)
            {
                
    $delim '"';
                
    $url   trim($url'"');
            }
            else if (
    strpos($url"'") === 0)
            {
                
    $delim "'";
                
    $url   trim($url"'");
            }

            
    $url preg_replace('#\\\(.)#''$1'$url);
            
    $url trim($url);
            
    $url $this->proxify_url($url);
            
    $url preg_replace('#([\(\),\s\'"\\\])#''\\$1'$url);

            return 
    $delim $url $delim;
        }

        function 
    set_flags($flags)
        {
            if (
    is_numeric($flags))
            {
                
    setcookie('flags'$flagstime()+(4*7*24*60*60), ''$this->http_host); 
                
    $this->flags['include_form']    = $flags{0} == 0;
                
    $this->flags['remove_scripts']  = $flags{1} == 0;
                
    $this->flags['accept_cookies']  = $flags{2} == 0;
                
    $this->flags['show_images']     = $flags{3} == 0;
                
    $this->flags['show_referer']    = $flags{4} == 0;
                
    $this->flags['rotate13']        = $flags{5} == 0;
                
    $this->flags['base64_encode']   = $flags{6} == 0;
                
    $this->flags['strip_meta']      = $flags{7} == 0;
                
    $this->flags['strip_title']     = $flags{8} == 0;
                
    $this->flags['session_cookies'] = $flags{9} == 0;
            }
            else if (isset(
    $_COOKIE['flags']) && is_numeric($_COOKIE['flags']) && strlen($_COOKIE['flags']) == count($this->flags))
            {
                
    $this->set_flags($_COOKIE['flags']);
            }
            else
            {
                
    $flags '';
                foreach (
    $this->flags as $flag)
                {
                    
    $flags .= $flag;
                }

                
    $this->set_flags($flags);
            }
        }

        function 
    set_request_headers()
        {
            
    $path preg_replace('#/{2,}#''/'$this->url_segments['path']);
            
    $path preg_replace('#([^.]+)(\.\/)*#''$1'$path);
            while (
    $path != ($path preg_replace('#/[^/.]+/\.\./#''/'$path)));
            
    $path preg_replace('#^/(\.\./)*#''/'$path);
            
    $path preg_replace('#[^a-zA-Z0-9$\-_.+!*\'(),;/?:@=&]+#e'"'%'.dechex(ord('$0'))"$path);

            
    $headers  "{$this->request_method} $path. (isset($this->url_segments['query']) ? '?' preg_replace('#[^a-zA-Z0-9$\-_.+!*\'(),;/?:@=&]+#e'"urlencode('$0')"urldecode($this->url_segments['query'])) : '') . " HTTP/1.0\r\n";
            
    $headers .= "Host: {$this->url_segments['host']}:{$this->url_segments['port']}\r\n";

            if (isset(
    $_SERVER['HTTP_USER_AGENT']))
            {
                
    $headers .= 'User-Agent: ' $_SERVER['HTTP_USER_AGENT'] . "\r\n";
            }
            if (isset(
    $_SERVER['HTTP_ACCEPT']))
            {
                
    $headers .= 'Accept: ' $_SERVER['HTTP_ACCEPT'] . "\r\n";
            }
            else
            {
                
    $headers .= "Accept: */*;q=0.1\r\n";
            }
            if (
    $this->flags['show_referer'] == 1)
            {
                
    $headers .= "Referer: {$this->url_segments['base']}\r\n";
            }
            if ((
    $cookies $this->get_cookies('COOKIE')) != '')
            {
                
    $headers .= "Cookie: $cookies\r\n";
            }
            if (!empty(
    $this->basic_auth_header))
            {
                
    $headers .= "Authorization: Basic {$this->basic_auth_header}\r\n";
            }
            if (
    $this->request_method == 'POST')
            {
                if (!empty(
    $_FILES) && (bool)ini_get('file_uploads'))
                {
                    
    $this->data_boundary 'PHProxy-' md5(uniqid(rand(), true));
                    
    $this->set_post_body('FILES/VARS'$_POST);
                    
    $this->set_post_body('FILES/FILES'$_FILES);
                    
    $headers .= "Content-Type: multipart/form-data; boundary={$this->data_boundary}\r\n";
                    
    $headers .= "Content-Length: " strlen($this->post_body) . "\r\n\r\n";
                    
    $headers .= $this->post_body;
                    
    $headers .= "--{$this->data_boundary}--";
                }
                else
                {
                    
    $this->set_post_body('POST/VARS'$_POST);
                    
    $headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
                    
    $headers .= "Content-Length: " strlen($this->post_body) . "\r\n\r\n";
                    
    $headers .= $this->post_body;
                }
            }

            
    $headers .= "\r\n";

            
    $this->request_headers $headers;
        }

        function 
    set_post_body($type$array)
        {
            if (
    $type == 'FILES/FILES')
            {
                
    $array $this->set_post_files($array);
                foreach (
    $array as $key => $file_info)
                {
                    if (
    is_readable($file_info['tmp_name']))
                    {
                        
    $this->post_body .= "--{$this->data_boundary}\r\n";
                        
    $this->post_body .= "Content-Disposition: form-data; name=\"$key\"; filename=\"{$file_info['name']}\"\r\n";
                        
    $this->post_body .= "Content-Type: {$file_info['type']}\r\n\r\n";
                        
    $handle fopen($file_info['tmp_name'], 'rb');
                        
    $this->post_body .= fread($handlefilesize($file_info['tmp_name'])) . "\r\n";
                        
    fclose($handle);
                    }
                }
            }
            else if (
    $type == 'FILES/VARS')
            {
                
    $array $this->set_post_vars($array);
                foreach (
    $array as $key => $value)
                {
                    
    $this->post_body .= "--{$this->data_boundary}\r\n";
                    
    $this->post_body .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n";
                    
    $this->post_body .= urldecode($value) . "\r\n";
                }
            }
            else if (
    $type == 'POST/VARS')
            {  
                
    $array $this->set_post_vars($array);
                foreach (
    $array as $key => $value)
                {
                    
    $this->post_body .= !empty($this->post_body) ? '&' '';
                    
    $this->post_body .= $key '=' $value;
                }
            }
        }

        function 
    set_post_vars($array$parent_key null)
        {
            
    $tmp = array();

            foreach (
    $array as $key => $value)
            {
                
    $key = isset($parent_key) ? sprintf('%s[%s]'$parent_keyurlencode($key)) : urlencode($key);
                if (
    is_array($value))
                {
                    
    $tmp array_merge($tmp$this->set_post_vars($value$key));
                }
                else
                {
                    
    $tmp[$key] = urlencode($value);
                }
            }
            return 
    $tmp;
        }

        function 
    set_post_files($array$parent_key null)
        {
            
    $tmp = array();

            foreach (
    $array as $key => $value)
            {
                
    $key = isset($parent_key) ? sprintf('%s[%s]'$parent_keyurlencode($key)) : urlencode($key);
                if (
    is_array($value))
                {
                    
    $tmp array_merge_recursive($tmp$this->set_post_files($value$key));
                }
                else if (
    preg_match('#^([^\[\]]+)\[(name|type|tmp_name)\]#'$key$m))
                {
                    
    $tmp[str_replace($m[0], $m[1], $key)][$m[2]] = $value;
                }
            }
            return 
    $tmp;
        }

        function 
    follow_location()
        {
            if (
    preg_match("#(location|uri|content-location):([^\r\n]*)#i"$this->response_headers$matches))
            {
                if ((
    $url trim($matches[2])) == '')
                {
                    return 
    false;
                }

                
    $this->url encode_url($this->proxify_url($urlfalse));
                return 
    true;
            }
            return 
    false;
        }

        function 
    set_cookies()
        {
            if (
    preg_match_all("#set-cookie:([^\r\n]*)#i"$this->response_headers$matches))
            {
                foreach (
    $matches[1] as $cookie_info)
                {
                    
    preg_match('#^\s*([^=;,\s]*)=?([^;,\s]*)#'$cookie_info$match)  && list(, $name$value) = $match;
                    
    preg_match('#;\s*expires\s*=([^;]*)#i'$cookie_info$match)      && list(, $expires)      = $match;
                    
    preg_match('#;\s*path\s*=\s*([^;,\s]*)#i'$cookie_info$match)   && list(, $path)         = $match;
                    
    preg_match('#;\s*domain\s*=\s*([^;,\s]*)#i'$cookie_info$match) && list(, $domain)       = $match;
                    
    preg_match('#;\s*(secure\b)#i'$cookie_info$match)              && list(, $secure)       = $match;

                    
    $expires = isset($expires) ? strtotime($expires) : false;
                    
    $expires = ($this->flags['session_cookies'] && is_numeric($expires) && time()-$expires 0) ? false $expires;
                    
    $path    = isset($path)    ? $path $this->url_segments['dir'];
                    
    $domain  = isset($domain)  ? $domain $this->url_segments['host'];
                    
    $domain  rtrim($domain'.');

                    if (!
    preg_match("#$domain$#i"$this->url_segments['host']))
                    {
                        continue;
                    }

                    if (
    count($_COOKIE) >= 15 && time()-$expires 0)
                    {
                        
    setcookie(current($_COOKIE), ''1''$this->http_host);
                    }

                    
    setcookie(urlencode("COOKIE;$name;$domain;$path"), $value$expires''$this->http_host);
                }

                
    $this->response_headers str_replace($matches[0], ''$this->response_headers);
            }
        }

        function 
    get_cookies($type 'COOKIE'$restrict true)
        {
            if (!empty(
    $_COOKIE))
            {
                
    $cookies '';

                foreach (
    $_COOKIE as $cookie_name => $cookie_value)
                {
                    
    $cookie_args explode(';'urldecode($cookie_name));

                    if (
    $cookie_args[0] != $type || count($cookie_args) < 2)
                    {
                        continue;
                    }

                    if (
    $type == 'AUTH')
                    {
                        if (
    $this->url_segments['host'] == str_replace('_''.'$cookie_args[1]))
                        {
                            return 
    $cookie_value;
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else if (
    $type == 'COOKIE' && isset($cookie_args[2]))
                    {
                        
    $cookie_args[2] = str_replace('_''.'$cookie_args[2]);

                        if (
    $restrict)
                        {
                            list(, 
    $name$domain$path) = $cookie_args;

                            if (
    preg_match("#$domain$#i"$this->url_segments['host']) && preg_match("#^$path#i"$this->url_segments['path']))
                            {
                                
    $cookies .= $cookies != '' '; ' '';
                                
    $cookies .= "$name=$cookie_value";
                            }
                        }
                        else
                        {
                            if (
    $cookies == '')
                            {
                                
    $cookies = array();
                            }
                            
    array_shift($cookie_args);
                            
    array_push($cookie_args$cookie_value);
                            
    array_push($cookies$cookie_args);
                        }
                    }
                }
                return 
    $cookies;
            }
        }

        function 
    delete_cookies($hash)
        {
            
    $cookies $this->get_cookies('COOKIE'false);

            foreach (
    $cookies as $args)
            {
                if (
    $hash == 'all' || $hash == md5($args[0].$args[1].$args[2].$args[3]))
                {
                    
    setcookie(urlencode("COOKIE;$args[0];$args[1];$args[2]"), ''1''$this->http_host);
                }
            }
        }

        function 
    send_response_headers()
        {
            
    $headers explode("\r\n"$this->response_headers);
            
    $headers[] = 'Content-Disposition: ' . ($this->content_type == 'application/octet_stream' 'attachment' 'inline') . '; filename=' $this->url_segments['file'];

            if (!empty(
    $this->response_body))
            {
                
    $headers[] = 'Content-Length: ' strlen($this->response_body);
            }

            
    $headers array_filter($headers);

            foreach (
    $headers as $header)
            {
                
    header($header);
            }
        }

        function 
    return_response($send_headers true)
        {
            if (
    $this->content_type == 'text/css')
            {
                
    $this->response_body $this->proxify_css($this->response_body);
            }
            else
            {
                if (
    $this->flags['strip_title'])
                {
                    
    $this->response_body preg_replace('#(<\s*title[^>]*>)(.*?)(<\s*/title[^>]*>)#is''$1$3'$this->response_body);
                }
                if (
    $this->flags['remove_scripts'])
                {
                    
    $this->remove_scripts();
                }
                if (
    $this->flags['show_images'] == 0)
                {
                    
    $this->response_body preg_replace('#<(img|image)[^>]*?>#si'''$this->response_body);
                }

                
    $this->modify_urls();
            }

            if (
    $send_headers)
            {
                
    $this->send_response_headers();
            }

            return 
    $this->response_body;
        }

        function 
    remove_scripts()
        {
            
    $this->response_body preg_replace('#<script[^>]*?>.*?</script>#si'''$this->response_body); // Remove any scripts enclosed between <script />
            
    $this->response_body preg_replace("#(\bon[a-z]+)\s*=\s*(?:\"([^\"]*)\"?|'([^']*)'?|([^'\"\s>]*))?#i"''$this->response_body); // Remove javascript event handlers
            
    $this->response_body preg_replace('#<noscript>(.*?)</noscript>#si'"$1"$this->response_body); //expose any html between <noscript />

        
    }

        function 
    trigger_error($error$retry false)
        {
            
    header("Location: $this->script_url?" . ($retry "retry=$retry&error=$error"error=$error));
            exit(); 
        }

        function 
    options_list($tabulate false$comments_on false)
        {
            
    $output   '';
            
    $comments = array();
            
    $comments['include_form']     = array('Include Form'   'Includes a mini URL-form on every HTML page');
            
    $comments['remove_scripts']   = array('Remove Scripts' 'Remove client-side scripting (i.e. Javascript)');
            
    $comments['accept_cookies']   = array('Accept Cookies' 'Accept HTTP cookies');
            
    $comments['show_images']      = array('Show Images'    'Show images');
            
    $comments['show_referer']     = array('Show Referer'   'Show referring website in HTTP headers');
            
    $comments['strip_meta']       = array('Strip Meta'     'Strip meta HTML tags');
            
    $comments['strip_title']      = array('Strip Title'    'Strip Website title');
            
    $comments['rotate13']         = array('Rotate13'       'Use rotate13 encoding on the URL');
            
    $comments['base64_encode']    = array('Base64'         'Use base64 encoding on the URL');
            
    $comments['session_cookies']  = array('Session Cookies''Store cookies for this session only');

            foreach (
    $this->flags as $flag_code => $flag_status)
            {
                
    $interface = array($comments[$flag_code][0], ' <input type="checkbox" name="ops[]"' . ($flag_status ' checked="checked"' '') . ' /> ');

                if (!
    $tabulate)
                {
                    
    $interface array_reverse($interface);
                }

                
    $output .= ($tabulate    '<tr><td class="option">'  ''
                         . 
    $interface[0]
                         . (
    $tabulate    '</td><td class="option">' ''
                         . 
    $interface[1]
                         . (
    $comments_on $comments[$flag_code][1]   : ''
                         . (
    $tabulate    '</td></tr>'               '');
            }

            return 
    $output;
        }

        function 
    proxify_url($url$proxify true)
        {
            
    $url trim($url);
            
    $fragment = ($hash_pos strpos($url'#') !== false) ? '#' substr($url$hash_pos) : '';

            if (!
    preg_match('#^[a-zA-Z]+://#'$url))
            {
                switch (
    $url{0})
                {
                    case 
    '/':
                        
    $url $this->base['scheme'] . '://' $this->base['host'] . ($this->base['port'] != 80 ':' $this->base['port'] : '') . $url;
                        break;
                    case 
    '?':
                        
    $url $this->base['base'] . '/' $this->base['file'] . $url;
                        break;
                    case 
    '#':
                        
    $proxify false;
                        break;
                    case 
    'm':
                         if (
    substr($url07) == 'mailto:')
                         {
                             
    $proxify false;
                             break;
                         }
                    default:
                        
    $url $this->base['base'] . '/' $url;
                }
            }

            return 
    $proxify "{$this->script_url}?{$this->config['url_var_name']}=" encode_url($url) . $fragment $url;
        }
    }

    ?>
    Please could somone fix this?

    Thanks
    Tom
    Quote Originally Posted by Chippiewill View Post
    e-rebel forum moderator
    :8

  2. #2
    Join Date
    Jun 2005
    Posts
    4,795
    Tokens
    0

    Latest Awards:

    Default

    Well. To start off with why do we have two <head> and doctypes? Also you can't send any HTML if you have sent a header.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •