[mw_shl_code=php,true]< ?php
/** * [Discouz !] (C)2001-2099 Comsenz Inc. * Ce n’est PAS un freeware, l’utilisation est soumise aux conditions de licence
* * $Id : function_filesock.php 34441 2014-04-29 07:47:26Z nemohou $ */
if( !defined('IN_DISCUZ')) { exit (« Accès refusé ») ;
}
fonction _dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FAUX, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE, $position = 0, $files = array( )) { $return = '' ; $matches = parse_url($url) ; $scheme = $matches[« schéma »] ; $host = $matches[« hôte »] ; $path = $matches['chemin'] ? $matches[« chemin »]. ($matches['requête'] ? '?'. $matches['requête'] : '') : '/' ; $port = !vide($matches['port']) ? $matches['port'] : ($scheme == 'http' ? '80' : ''); $boundary = $encodetype == 'URLENCODE' ? « ' : aléatoire(40) ;
if($post) { if( !is_array($post)) { parse_str($post, $post) ; } _format_postkey($post, $postnew) ; $post = $postnew ; } si(function_exists('curl_init') & & function_exists('curl_exec') & & $allowcurl) { $ch = curl_init() ; $httpheader = tableau() ; if($ip) { $httpheader[] = « Hôte : » .$host ; } if($httpheader) { curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader) ; } curl_setopt($ch, CURLOPT_URL, $scheme.' ://'.( $ip ? $ip : $host). ($port ? ' :'.$port : '').$path) ; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, faux) ; curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, faux) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, vrai) ; curl_setopt($ch, CURLOPT_FOLLOWLOCATION, vrai) ; curl_setopt($ch, CURLOPT_HEADER, 1) ; if($post) { curl_setopt($ch, CURLOPT_POST, 1) ; if($encodetype == 'URLENCODE') { curl_setopt($ch, CURLOPT_POSTFIELDS, $post) ; } else { foreach($post as $k => $v) { if(isset($files[$k])) { $post[$k] = '@'.$files[$k] ; } } foreach($files as $k => $file) { if( !isset($post[$k]) && file_exists($file)) { $post[$k] = '@'.$file ; } } curl_setopt($ch, CURLOPT_POSTFIELDS, $post) ; } } if($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie) ; } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout) ; curl_setopt($ch, CURLOPT_TIMEOUT, $timeout) ; $data = curl_exec($ch) ; $status = curl_getinfo($ch) ; $errno = curl_errno($ch) ; curl_close($ch) ; if($errno || $status['http_code'] != 200) { retour ; } else { $GLOBALS['fichier en-tête'] = sous-str($data, 0, $status['header_size']) ; $data = sous-for($data, $status['header_size']) ; retour !$limit ? $data : sous-for($data, 0, $limit) ; } }
if($post) { if($encodetype == 'URLENCODE') { $data = http_build_query($post) ; } else { $data = '' ; foreach($post as $k => $v) { $data .= « --$boundary\r\n » ; $data .= « Content-Disposition : form-data ; name="'$k.'"'. (isset($files[$k]) ? '; nom de fichier = « ..nombase($files[$k]). » » Type de contenu : application/octet-stream : ''). » \r\n\r\n ; $data .= $v. » \r\n ; } foreach($files as $k => $file) { if( !isset($post[$k]) && file_exists($file)) { if($fp = @fopen($file, 'r')) { $v = fread($fp, taille du fichier($file)) ; fclose($fp) ; $data .= « --$boundary\r\n » ; $data .= « Content-Disposition : form-data ; nom="'.$k.' » ; nom de fichier = « '.nombase($file). » » ; Type de contenu : application/flux d’octets'. » \r\n\r\n ; $data .= $v. » \r\n ; } } } $data .= « --$boundary\r\n » ; } $out = « POST $path HTTP/1.0\r\n » ; $header = « Accepter : */*\r\n » ; $header .= « Accept-Language : zh-cn\r\n » ; $header .= $encodetype == 'URLENCODE' ? « Type-Content : application/x-www-form-urlencoded\r\n » : « Type-Content : multipart/form-data ; frontière=$boundary\r\n » ; $header .= 'Longueur du contenu : '.strlen($data)." \r\n ; $header .= « User-Agent : $_SERVER[HTTP_USER_AGENT]\r\n » ; $header .= « Animateur : $host :$port\r\n » ; $header .= « Connexion : Close » ; $header .= « Contrôle de cache : no-cache\r\n » ; $header .= « Cookie : $cookie\r\n\r\n » ; $out .= $header ; $out .= $data ; } else { $out = « OBTENIR $path HTTP/1.0\r\n » ; $header = « Accepter : */*\r\n » ; $header .= « Accept-Language : zh-cn\r\n » ; $header .= « User-Agent : $_SERVER[HTTP_USER_AGENT]\r\n » ; $header .= « Animateur : $host :$port\r\n » ; $header .= « Connexion : Close » ; $header .= « Cookie : $cookie\r\n\r\n » ; $out .= $header ; }
$fpflag = 0 ; if( !$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) { $context = tableau( 'http' => tableau( 'méthode' => $post ? 'POST' : 'GET', 'header' => $header, 'content' => $post, 'timeout' => $timeout, ), ); $context = stream_context_create($context) ; $fp = @fopen($scheme.' ://'.( $ip ? $ip : $host).' :'.$port.$path, 'b', faux, $context) ; $fpflag = 1 ; }
if( !$fp) { retour » ; } else { stream_set_blocking($fp, $block) ; stream_set_timeout($fp, $timeout) ; @fwrite($fp, $out) ; $status = stream_get_meta_data($fp) ; if( !$status['timed_out']) { tandis que ( !feof($fp) && !$fpflag) { $header = @fgets($fp) ; $headers .= $header ; if($header && ($header == « \r\n » || $header == « \n »)) { pause ; } } $GLOBALS['en-tête de fichier'] = $headers ;
if($position) { pour ($i=0 ; $i<$position ; $i++) { $char = fgetc($fp) ; if($char == « \n » && $oldchar != « \r ») { $i++ ; } $oldchar = $char ; } }
if($limit) { $return = stream_get_contents($fp, $limit) ; } else { $return = stream_get_contents($fp) ; } } @fclose($fp) ; retour $return ; }
}
fonction _format_postkey($post, &$result, $key = '') { foreach($post as $k => $v) { $_k = $key ? $key. » ['.$k.']' : $k ; if(is_array($v)) { _format_postkey($v, $result, _k $) ; } else { $result[$_k] = $v ; } }
}
?>[/mw_shl_code]
|