[mw_shl_code=php,true]<?php
/** * [Συζήτηση!] (Γ) 2001-2099 Comsenz Inc. * Αυτό ΔΕΝ είναι δωρεάν λογισμικό, η χρήση υπόκειται σε όρους άδειας χρήσης
* * $Id: function_filesock.php 34441 2014-04-29 07:47:26Z nemohou $ */
if(!defined('IN_DISCUZ')) { exit («Δεν επιτρέπεται η πρόσβαση»)·
}
συνάρτηση _dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE, $position = 0, $files = array( )) { $return = ''; $matches = parse_url($url)· $scheme = $matches['σύστημα']· $host = $matches['host']; $path = $matches['μονοπάτι'] ? $matches['μονοπάτι']. ($matches['ερώτημα']; '?'. $matches['ερώτημα'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : ($scheme == 'http' ? '80' : ''); $boundary = $encodetype == 'URLENCODE' ? '' : τυχαία(40);
if($post) { if(!is_array($post)) { parse_str($post, $post)· } _format_postkey($post, $postnew)· $post = $postnew; } if(function_exists('curl_init') && function_exists('curl_exec') && $allowcurl) { $ch = curl_init(); $httpheader = πίνακας(); if($ip) { $httpheader[] = "Κεντρικός υπολογιστής: ".$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, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, αληθές)· curl_setopt($ch, CURLOPT_FOLLOWLOCATION, αληθές)· curl_setopt($ch, CURLOPT_HEADER, 1); if($post) { curl_setopt($ch, CURLOPT_POST, 1); if($encodetype == 'URLENCODE') { curl_setopt($ch, CURLOPT_POSTFIELDS, $post)· } αλλιώς { foreach($post ως $k => $v) { if(isset($files[$k])) { $post[$k] = '@'.$files[$k]; } } foreach($files ως $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) { επιστροφή; } αλλιώς { $GLOBALS['filesockheader'] = substr($data, 0, $status['header_size']); $data = substr($data, $status['header_size']); επιστροφή !$limit ? $data : substr($data, 0, $limit); } }
if($post) { if($encodetype == 'URLENCODE') { $data = http_build_query($post)· } αλλιώς { $data = ''; foreach($post ως $k => $v) { $data .= "--$boundary\r\n"; $data .= 'Content-Disposition: form-data; όνομα="'.$k.'"''. (isset($files[$k]) ? '; filename="'.basename($files[$k]).'"; Τύπος περιεχομένου: εφαρμογή/οκτάδα-ροή' : '')." \r\n\r\n"; $data .= $v." \r\n"; } foreach($files ως $k => $file) { if(!isset($post[$k]) && file_exists($file)) { if($fp = @fopen($file, 'r')) { $v = fread($fp, filesize($file)); fclose($fp); $data .= "--$boundary\r\n"; $data .= 'Content-Disposition: form-data; όνομα="'.$k.'"; filename="'.basename($file).'"; Content-Type: application/octet-stream'." \r\n\r\n"; $data .= $v." \r\n"; } } } $data .= "--$boundary\r\n"; } $out = "ΔΗΜΟΣΊΕΥΣΗ $path HTTP/1.0\r\n"; $header = "Αποδοχή: */*\r\n"; $header .= "Γλώσσα αποδοχής: zh-cn\r\n"; $header .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data; όριο=$boundary\r\n"; $header .= 'Content-Length: '.strlen($data)." \r\n"; $header .= "Πράκτορας χρήστη: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Κεντρικός υπολογιστής: $host:$port\r\n"; $header .= "Σύνδεση: Κλείσιμο\r\n"; $header .= "Έλεγχος προσωρινής μνήμης: no-cache\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header; $out .= $data; } αλλιώς { $out = "GET $path HTTP/1.0\r\n"; $header = "Αποδοχή: */*\r\n"; $header .= "Γλώσσα αποδοχής: zh-cn\r\n"; $header .= "Πράκτορας χρήστη: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Κεντρικός υπολογιστής: $host:$port\r\n"; $header .= "Σύνδεση: Κλείσιμο\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header; }
$fpflag = 0; if(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) { $context = πίνακας( 'http' => πίνακας( 'μέθοδος' => $post ? 'POST' : 'ΠΆΡΕ', 'header' => $header, 'content' => $post, 'timeout' => $timeout, ), ); $context = stream_context_create($context)· $fp = @fopen($scheme.'://'.( $ip ? $ip : $host).':'.$port.$path, 'b', false, $context); $fpflag = 1; }
if(!$fp) { επιστροφή ''; } αλλιώς { stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout)· @fwrite($fp, $out)· $status = stream_get_meta_data($fp)· if(!$status['timed_out']) { ενώ (!feof($fp) && !$fpflag) { $header = @fgets($fp)· $headers .= $header; if($header && ($header == "\r\n" || $header == "\n")) { διάλειμμα; } } $GLOBALS['filesockheader'] = $headers;
if($position) { for($i=0; $i<$position; $i++) { $char = fgetc($fp); if($char == "\n" && $oldchar != "\r") { $i++; } $oldchar = $char; } }
if($limit) { $return = stream_get_contents($fp, $limit); } αλλιώς { $return = stream_get_contents($fp)· } } @fclose παράγραφος $fp)· επιστροφή $return? }
}
συνάρτηση _format_postkey($post, &$result, $key = '') { foreach($post ως $k => $v) { $_k = $key ? $key». ['.$k.']' : $k; if(is_array($v)) { _format_postkey($v, $result, $_k); } αλλιώς { $result[$_k] = $v; } }
}
?>[/mw_shl_code]
|