inc/file.php

<?php
if(!defined('WEBSITE')){die();}
/*=====================================
  HERA v.2.0 Beta
  File: inc/file.php
  fetch the contents of a page
=====================================*/

class File {

public 
$error ""// error messages
private $results ""// content
public $uri_real ""// corrected URI

    
function File($url_tmp) {
        global 
$lang;
        if ((
$url_tmp == "") || ($url_tmp == "http://")) {
            
$this->error $lang['falta_url'];
            return 
false;
        } else {
            
$parse parse_url($url_tmp);
            if (
$parse['scheme']) {
                if (
strtolower($parse['scheme']) != 'http') {
                    
$this->error sprintf($lang['scheme_no'], $parse['scheme']);
                    return;
                } else {
                    
$this->uri_real $url_tmp;
                }
            } else if (!
$parse['scheme']) {
                
$this->uri_real 'http://'.$url_tmp;
            }
            if (
strtolower($parse['host']) == 'localhost') {
                
$this->error 'Sólo se admiten páginas remotas';
                return 
false;
            }
        }
    } 
// Fin constructor clase


/*============================================
    Function: fetch the contents of a page
============================================*/

    
function fetch($URI$BASE$OPT){
        if (!
$this->_connect($URI)) {
            return 
false;
        }
        if (
$BASE == 'base') {
            
// Definir URI y obtener la URI de base
            
define ('URL'$URI);
            
$this->Parse_URI(URL);
        }
        if (
$OPT == 'arry') {
            
$this->File_array();
        }
        return 
true;
    }


/*=====================================
    Function: make a connection
=====================================*/

    
function _connect($uri) {
        
$cookie '../monitor/admin/control/cookie.txt';
        
$header = array (
          
=> 'Accept: text/html, text/css, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1',
          
=> 'Cache-Control: max-age=0',
          
=> 'Connection: keep-alive',
          
=> 'Keep-Alive: 300',
          
=> 'Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7',
          
=> 'Accept-Language: en,es;q=0.9,pt;q=0.8',
          
=> 'Pragma: ');
        
$s curl_init();
        
curl_setopt($s,CURLOPT_CONNECTTIMEOUT,30);
        
curl_setopt($s,CURLOPT_COOKIEJAR,$cookie);
        
curl_setopt($s,CURLOPT_COOKIEFILE,$cookie);
        
curl_setopt($s,CURLOPT_ENCODING,'gzip,deflate');
        
curl_setopt($s,CURLOPT_FAILONERROR,true);
        
curl_setopt($s,CURLOPT_FOLLOWLOCATION,true);
        
curl_setopt($s,CURLOPT_HEADER,$optheader);
        
curl_setopt($s,CURLOPT_HTTPHEADER,$header);
        
curl_setopt($s,CURLOPT_MAXREDIRS,5);
        
curl_setopt($s,CURLOPT_NOBODY,false);
        
curl_setopt($s,CURLOPT_REFERER,'http://www.google.com');
        
curl_setopt($s,CURLOPT_RETURNTRANSFER,true);
        
curl_setopt($s,CURLOPT_TIMEOUT,20);
        
curl_setopt($s,CURLOPT_SSL_VERIFYPEER,false);
        
curl_setopt($s,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1');
        
$info = array();
        
$uri str_replace(array('%2F','%3A','&amp;','%3F','%3D'), array('/',':','&','?','='), $uri);
        
curl_setopt($s,CURLOPT_URL,$uri);
        
$this->results = @curl_exec($s);
        
$info curl_getinfo($s);
        
$error curl_error($s);
        if (
$info['http_code'] != 200) {
            
$error 'HTTP Code '.$info['http_code'];
        }
        
curl_close($s);
        if (
$error != '') {
            
$this->error $error;
            return 
false;
        }
        return 
true;
    }

/*=======================================
    Función: Analiza una URI y devuelve
    $url y $url_base
=======================================*/

    
function Parse_URI($uri) {

        
$parse parse_url($uri);
        
$url_b strtolower($parse['scheme'])."://";
        
$url_b .= $parse['host'] ? $parse['host'] : '';
        
$url_b .= $parse['port'] ? ':'.$parse['port'] : '';

        if (isset(
$parse['path'])) {
            if((
ereg("\.",$parse['path'])) || ($parse['query']) || ($parse['fragment']) || (substr($uri,-1) != "/")) {
                
$separa explode("/",$parse['path']);
                
$sacar array_pop($separa);
                
$parse['path'] = rtrim($parse['path'],$sacar);
                
$url_b .= $parse['path'];
            } else {
                
$url_b .= $parse['path'];
            }
        }
        if(
substr($url_b,-1) != "/") {
            
$url_b .= "/";
        }
        
define ('URL_BASE'$url_b);
    } 
// Fin función Parse_URI


    
function File_array() {
        global 
$tags$contents;

        
$search = array (
        
"@(<script[^>]*>)(.*)(</script>)@ismUe",
        
"@(<style[^>]*>)(.*)(</style>)@ismUe",
        
"@<!--[\s\S]*-->@mU" );
        
$replace = array (
        
"stripslashes('\\1').stripslashes(htmlspecialchars('\\2')).'\\3'",
        
"stripslashes('\\1').stripslashes(htmlspecialchars('\\2')).'\\3'",
        
"" );
        
$fp preg_replace($search,$replace,$this->results);
        
preg_match_all("@(<[^>]+>)([^<]*)@m"$fp$outPREG_PATTERN_ORDER);

        
$s_tag = array ("@\n+@""@\s\s+@""@\s*=\s*@");
        
$r_tag = array (" "" ""=");

        for (
$i=0$i count($out[0]); $i++) {
            
$tag_tmp preg_replace($s_tag$r_tag$out[1][$i]);
            
$tags[$i] = $tag_tmp;
            
$cont_tmp trim($out[2][$i]);
            if (!
preg_match("@<(style|script)@"$tag_tmp)) {
                
$cont_tmp preg_replace("@\n+@""\n"$cont_tmp);
            }
            
$contents[$i] = trim($cont_tmp);
        }
    }

}
?>