Вход Регистрация
Файл: upload/include/library/phpfox/request/request.class.php
Строк: 425
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * Creates a special request method which is used in the script
 * instead of calling the default $_REQUEST methods. All requests are
 * parsed and trimmed.
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author            Raymond Benc
 * @package         Phpfox
 * @version         $Id: request.class.php 4576 2012-07-31 10:32:27Z Raymond_Benc $
 */
class Phpfox_Request
{    
    
/**
     * Variable is deprecated.
     * 
     * @deprecated 2.0.6
     * @var array
     */
    
private $_aMethod = array();
    
    
/**
     * List of all the requests ($_GET, $_POST, $_FILES etc...)
     *
     * @var array
     */
    
private $_aArgs = array();
    
    
/**
     * List of requests being checked.
     *
     * @var array
     */
    
private $_aName = array();
    
    
/**
     * Last name being checked.
     *
     * @var string
     */
    
private $_sName;
    
    
/**
     * Check to see if we are using a mobile device.
     *
     * @var bool
     */
    
private $_bIsMobile false;
    
    
/**
     * List of browsers.
     *
     * @var array
     */
    
private static $_aBrowser = array();
    
    private 
$_xIp6 "/^s*((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]d|[01]?d{1,2})(.(25[0-5]|2[0-4]d|[01]?d{1,2})){3})))(%.+)?s*$/";
    
    
/**
     * Class Constructor used to build the variable $this->_aArgs.
     * 
     */
    
public function __construct()
    {
        
$this->_aArgs $this->_trimData(array_merge($_GET$_POST$_FILESPhpfox::getLib('url')->getParams()));                
    }
    
    
/**
     * Checks to see if a request exists.
     *
     * @param string $sName Name of the request.
     * @return object Returns self object.
     */
    
public function is($sName)
    {
        if (isset(
$this->_aArgs[$sName]))
        {
            
$this->_aName[$sName] = true;
            
$this->_sName $sName;
        }
        return 
$this;
    }

    
/** 
     * Retrieve parameter value from request.
     * 
     * @param string $sName name of argument
     * @param string $sCommand is any extra commands we need to execute
     * @return string parameter value
     */
    
public function get($sName ''$mDef '')
    {
        if (
$this->_sName)
        {
            
$sName $this->_sName;
        }
        
        ((
$sPlugin Phpfox_Plugin::get('request_get')) ? eval($sPlugin) : false);
        
        return (isset(
$this->_aArgs[$sName]) ? ((empty($this->_aArgs[$sName]) && isset($this->_aName[$sName])) ? true $this->_aArgs[$sName]) : $mDef);
    }
    
    
/**
     * Set a request manually.
     *
     * @param mixed $mName ARRAY include a name and value, STRING just the request name.
     * @param string $sValue If the 1st argument is a string this must be the request value.
     */
    
public function set($mName$sValue null)
    {
        if (!
is_array($mName) && $sValue !== null)
        {
            
$mName = array($mName => $sValue);
        }
        
        foreach (
$mName as $sKey => $sValue)
        {
            
$this->_aArgs[$sKey] = $sValue;
        }
    }
    
    
/**
     * Get a request and convert it into an INT.
     *
     * @param string $sName Name of the request.
     * @param string $mDef Default value in case the request does not exist.
     * @return int INT value of the request.
     */
    
public function getInt($sName$mDef '')
    {
        return (int)
$this->get($sName$mDef);
    }    
    
    
/**
     * Get a request and make sure it is an ARRAY.
     *
     * @param string $sName Name of the request.
     * @param array $mDef ARRAY of default values in case the request does not exist.
     * @return array Returns an ARRAY value.
     */
    
public function getArray($sName$mDef = array())
    {        
        return (array)(isset(
$this->_aArgs[$sName]) ? $this->_aArgs[$sName] : $mDef);
    }       
    
    
/**
     * Get all the requests.
     *
     * @return array
     */
    
public function getRequests()
    {
        return (array)
$this->_aArgs;
    }
    
    
/**
     * Get specific server value. ($_SERVER)·
     *
     * @param string $sVar Param name.
     * @return string $_SERVER value.
     */
    
public function getServer($sVar)
    {
        switch(
$sVar)
        {
            case 
'SERVER_NAME':
                
$sVar = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? 'HTTP_X_FORWARDED_HOST' $sVar);
                break;
            case 
'HTTP_HOST':
                
$sVar = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? 'HTTP_X_FORWARDED_HOST' $sVar);
                break;
            case 
'REMOTE_ADDR':
                return 
$this->getIp();
                break;
            case 
'PHPFOX_SERVER_ID':
                if (!
Phpfox::getParam(array('balancer''enabled')))
                {
                    if (
Phpfox::getParam('core.allow_cdn'))
                    {
                        return 
Phpfox::getLib('cdn')->getServerId();
                    }
                    
                    return 
0;
                }
                
$aServers Phpfox::getParam(array('balancer''servers'));
                
$iServerIp $this->getServer('SERVER_ADDR');
                if (isset(
$aServers[$iServerIp]['id']))
                {
                    return 
$aServers[$iServerIp]['id'];
                }
                return 
0;
                break;
        }
        return (isset(
$_SERVER[$sVar]) ? $_SERVER[$sVar] : '');
    }
    
    public function 
isIOS()
    {
        
$sAgent strtolower($this->getBrowser());        
        
$bIsIphone stripos($sAgent'iphone') !== false;
        
$bIsIpad stripos($sAgent'ipad') !== false || (stripos($sAgent'safari') !== false && stripos($sAgent'mobile') !== false);
        
$bIsIpod stripos($sAgent'ipod') !== false;
        
        return ((
$bIsIphone || $bIsIpad || $bIsIpod));
    }
    
    
/**
     * Get the name of the browser being used.
     *
     * @return string
     */
    
public function getBrowser()
    {
        static 
$sAgent;
        
        if (
$sAgent)
        {
            return 
$sAgent;
        }
        
        
$sAgent $this->getServer('HTTP_USER_AGENT');       

        if (
preg_match("/Firefox/(.*)/i"$sAgent$aMatches) && isset($aMatches[1]))
        {
            
$sAgent 'Firefox ' $aMatches[1];
        }
        elseif (
preg_match("/MSIE (.*);/i"$sAgent$aMatches))
        {
            
$aParts explode(';'$aMatches[1]);
            
$sAgent 'IE ' $aParts[0];
            
self::$_aBrowser['ie'][substr($aParts[0], 01)] = true;            
        }
        elseif (
preg_match("/Opera/(.*)/i"$sAgent$aMatches))
        {
            
$aParts explode(' 'trim($aMatches[1]));
            
$sAgent 'Opera ' $aParts[0];
        }
        elseif (
preg_match('/s+?chrome/([0-9.]{1,10})/i'$sAgent$aMatches))
        {
            
$aParts explode(' 'trim($aMatches[1]));
            
$sAgent 'Chrome ' $aParts[0];
        }
        elseif (
preg_match('/android/i'$sAgent))
        {
            
$this->_bIsMobile true;
            
$sAgent 'Android';            
        }    
        elseif (
preg_match('/opera mini/i'$sAgent))
        {
            
$this->_bIsMobile true;
            
$sAgent 'Opera Mini';            
        }   
        elseif (
preg_match('/(pre/|palm os|palm|hiptop|avantgo|fennec|plucker|xiino|blazer|elaine)/i'$sAgent))
        {
            
$this->_bIsMobile true;
            
$sAgent 'Palm';            
        }          
        elseif (
preg_match('/blackberry/i'$sAgent))
        {
            
$this->_bIsMobile true;
            
$sAgent 'Blackberry';
        }         
        elseif (
preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile|windows phone)/i'$sAgent))
        {
            
$this->_bIsMobile true;
            
$sAgent 'Windows Smartphone';
        }        
        elseif (
preg_match("/Version/(.*) Safari/(.*)/i"$sAgent$aMatches) && isset($aMatches[1]))
        {
            if (
preg_match("/iPhone/i"$sAgent) || preg_match("/ipod/i"$sAgent))
            {
                
$aParts explode(' 'trim($aMatches[1]));
                
$sAgent 'Safari iPhone ' $aParts[0];    
                
$this->_bIsMobile true;
            }
            else 
            {
                
$sAgent 'Safari ' $aMatches[1];
            }
        }
        elseif (
preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i'$sAgent))
        {
            
$this->_bIsMobile true;
        }
        
        return 
$sAgent;
    }
    
    
/**
     * Check to see if we are using a mobile device.
     *
     * @return bool TRUE yes, FALSE no.
     */
    
public function isMobile()
    {        
        static 
$bFirstCheck false;        
        
        if (!
Phpfox::isModule('mobile'))
        {
            return 
false;
        }
        
        if (
$bFirstCheck === false && !Phpfox::getLib('url')->isMobile() && !Phpfox::getLib('session')->get('mobilestatus'))
        {
            
$bFirstCheck true;
            
            
$this->getBrowser();
            
            if (
$this->_bIsMobile === true && !PHPFOX_IS_AJAX)
            {
                
Phpfox::getLib('url')->send('mobile');
            }
        }
        
        return 
Phpfox::getLib('url')->isMobile();        
    }
    
    
/**
     * Check if the user is using a specific browser and browser version.
     *
     * @param string $sName Browser name.
     * @param int $iVersion Browser version.
     * @return bool TRUE on success, FALSE on failure.
     */
    
public static function isBrowser($sName$iVersion)
    {
        return (isset(
self::$_aBrowser[strtolower($sName)][$iVersion]) ? true false);
    }
    
    
/**
     * Get the servers URL based on the server ID you pass.
     *
     * @param int $iId Server ID.
     * @return string Full server URL.
     */
    
public function getServerUrl($iId '')
    {
        if (!
$iId)
        {
            
$iId $this->getServer('PHPFOX_SERVER_ID');
        }
        
        
$aServers Phpfox::getParam(array('balancer''servers'));
        
$sServer '';
        foreach (
$aServers as $iServerKey => $aServerValue)
        {
            if (
$aServerValue['id'] == $iId)
            {
                
$sServer .= $aServerValue['url'];
                break;
            }
        } 

        return 
$sServer;    
    }
    
     
/**
     * Fetches an alternate IP address of the current visitor, attempting to detect proxies etc.
     *
     * @param boolean $bReturnNum Return numerical value on TRUE.
     * @return string
     */
     
public function getIp($bReturnNum false)
     {
         if (
PHP_SAPI == 'cli')
        {
            return 
0;
        }
         
         
$sAltIP $_SERVER['REMOTE_ADDR'];
 
         if (isset(
$_SERVER['HTTP_CLIENT_IP']))
         {
             
$sAltIP $_SERVER['HTTP_CLIENT_IP'];
         }
         elseif (isset(
$_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s'$_SERVER['HTTP_X_FORWARDED_FOR'], $aMatches))
         {
             foreach (
$aMatches[0] AS $sIP)
             {
                 if (!
preg_match("#^(10|172.16|192.168).#"$sIP))
                 {
                     
$sAltIP $sIP;
                     break;
                 }
             }
         }
         elseif (isset(
$_SERVER['HTTP_FROM']))
         {
             
$sAltIP $_SERVER['HTTP_FROM'];
         }
         
         if (
$bReturnNum === true)
         {
             
$sAltIP str_replace('.'''$sAltIP);
         }
 
         return 
$sAltIP;
     }    
     
     
/**
      * Check to see if an IP is really an IP.
      *
      * @param string $iIp IP to check.
      * @return bool TRUE is a valid IP, FALSE is not a valid IP.
      */
    
public function isIP($iIp)
    {
        if(
preg_match('/(d+).(d+).(d+).(d+)/'$iIp$aMatches))
        {
            for(
$i=1;$i<=4;$i++)
            {
                if ((
$aMatches[$i] > 255) || ($aMatches[$i] < 0))
                {
                    return 
false;
                }
            }
        }
        else
        {
            if (
preg_match($this->_xIp6$iIp$aMatches) && isset($aMatches[1]) && !empty($aMatches[1]))
            {
                return 
true;
            }
            return 
false;
        }

        return 
true;
    }     
     
    
/**
     * Returns the IP address with the specified number of octets removed
     *
     * @param string IP address
     * @return string Truncated IP address
     */
     
public function getSubstrIp($sIP$iLength null)
     {
         if (
$iLength === null || $iLength 3)
         {
             
$iLength Phpfox::getParam('core.ip_check');
         }

         return 
implode('.'array_slice(explode('.'$sIP), 0$iLength));
     }    
     
     
/**
      * Get the unique ID of a user based on their browser and IP substirng.
      *
      * @return string MD5 string.
      */
     
public function getIdHash()
     {
         return 
md5((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null) . $this->getSubstrIp($this->getIp())); 
     }
    
    
/**
    * Fetches a valid sessionhash value, not necessarily the one tied to this session.
    *
    * @return string 32-character sessionhash
    */
    
public function getSessionHash()
    {
        return 
md5(PHPFOX_TIME Phpfox::getParam('core.path') . $this->getIdHash() . Phpfox::getParam('core.path') . rand(11000000));
    }

    
/**
     * Send a request to another server. Usually using CURL.
     *
     * @param string $sUrl URL of the server.
     * @param array $aPost $_POST data to send.
     * @param string $sMethod Method of request (GET or POST).
     * @param string $sUserAgent Useragent to send.
     * @param string $aCookies ARRAY of any cookies to pass.
     * @return mixed FALSE if failed to connect, STRING if anything was returned from the server.
     */
    
public function send($sUrl$aPost = array(), $sMethod 'POST'$sUserAgent null$aCookies null)
    {
        
$aHost parse_url($sUrl);
        
$sPost '';
        foreach (
$aPost as $sKey => $sValue)
        {
            
$sPost .= '&' $sKey '=' $sValue;
        }

        
// Curl
        
if (extension_loaded('curl') && function_exists('curl_init'))
        {
            
$hCurl curl_init();        
            
            
curl_setopt($hCurlCURLOPT_URL, (($sMethod == 'GET' && !empty($sPost)) ? $sUrl '?' ltrim($sPost'&') : $sUrl));
            
curl_setopt($hCurlCURLOPT_HEADERfalse);
            
curl_setopt($hCurlCURLOPT_RETURNTRANSFERtrue);
            
            
// Testing this out at the moment...
            
curl_setopt($hCurlCURLOPT_SSL_VERIFYPEERfalse);
            
            
// Run if this is a POST request method
            
if ($sMethod != 'GET')
            {
                
curl_setopt($hCurlCURLOPT_POSTtrue);
                
curl_setopt($hCurlCURLOPT_POSTFIELDS$sPost);    
            }
            
            
// Add the browser agent
            
curl_setopt($hCurlCURLOPT_USERAGENT, ($sUserAgent === null "" PHPFOX::BROWSER_AGENT " (" PhpFox::getVersion() . ")" $sUserAgent));
            
            
// Check if we need to set some cookies
            
if ($aCookies !== null)
            {                
                
$sLine "n";                
                
// Loop thru all the cookies we currently have set
                
foreach ($aCookies as $sKey => $sValue)
                {
                    
// Make sure we don't see the session ID or the browser will crash
                    
if ($sKey == 'PHPSESSID')
                    {
                        continue;
                    }
                        
                    
// Add the cookies
                    
$sLine .= '' $sKey '=' $sValue '; ';        
                }
                
// Trim the cookie
                
$sLine trim(rtrim($sLine';'));
                    
                
// Set the cookie
                
curl_setopt($hCurlCURLOPT_COOKIE$sLine);
            }
            
            
// Run the exec
            
$sData curl_exec($hCurl);
            
            
// Close the curl connection
            
curl_close($hCurl);    

            
// Return whatever we can from the curl request
            
return trim($sData);    
        }        
        
        
// file_get_contents()
        
if ($sMethod == 'GET' && ini_get('allow_url_fopen') && function_exists('file_get_contents'))
        {
            
$sData file_get_contents($sUrl "?" ltrim($sPost'&'));
            
            return 
trim($sData);            
        }
        
        
// fsockopen
        
if (!isset($sData))
        {
            
$hConnection fsockopen($aHost['host'], 80$errno$errstr30);
            if (!
$hConnection)
            {
                return 
false;
            }
            else
            {
                if (
$sMethod == 'GET')
                {
                    
$sUrl $sUrl '?' ltrim($sPost'&');
                }
                
                
$sSend "{$sMethod} {$sUrl}  HTTP/1.1rn";
                
$sSend .= "Host: {$aHost['host']}rn";
                
$sSend .= "User-Agent: " PHPFOX::BROWSER_AGENT " (" PhpFox::getVersion() . ")rn";
                
$sSend .= "Content-Type: application/x-www-form-urlencodedrn";
                
$sSend .= "Content-Length: " strlen($sPost) . "rn";
                
$sSend .= "Connection: closernrn";
                   
$sSend .= $sPost;
                
fwrite($hConnection$sSend);            
                
$sData '';
                while (!
feof($hConnection))
                {
                    
$sData .= fgets($hConnection128);
                }
                
                
$aResponse preg_split("/rnrn/"$sData);
                
$sHeader $aResponse[0];
                
$sData $aResponse[1];
                
                if(!(
strpos($sHeader,"Transfer-Encoding: chunked")===false))
                {
                    
$aAux split("rn"$sData);
                    for(
$i=0$i<count($aAux); $i++)
                    {
                        if(
$i==|| ($i%2==0))
                        {
                            
$aAux[$i] = '';
                        }
                        
$sData implode("",$aAux);
                    }
                }                
                
                return 
chop($sData);
            }
        }
        
        return 
false;
    }    
    
    
/** 
     * Trims params and strip slashes if magic_quotes_gpc is set.
     *
     * @param mixed $mParam request params
     * @return mixed trimmed params.
     */
    
private function _trimData($mParam)
    {        
        if (
is_array($mParam))
        {
            return 
array_map(array(&$this'_trimData'), $mParam);
        }

        if (
get_magic_quotes_gpc())
        {
            
$mParam stripslashes($mParam);
        }
        
        
$mParam trim($mParam);

        return 
$mParam;
    }    
}

?>
Онлайн: 0
Реклама