[mw_shl_code=php,true]<?php
/** * [ディスカズ!] (C)2001-2099 Comsenz Inc. * これはフリーウェアではなく、使用はライセンス条件に従います
* * $Id: function_filesock.php 34441 2014-04-29 07:47:26Z nemohou $ */
if(!defined('IN_DISCUZ')) { 出口(「アクセス拒否」);
}
関数 _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['ホスト']; $path = $matches[「パス」] ? $matches[「パス」]。 ($matches['query'] ? '?'. $matches['query'] : '') : '/'; $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 = array(); 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、偽); curl_setopt($ch、CURLOPT_SSL_VERIFYHOST、偽); 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 as $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['fileockheader'] = 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 as $k => $v) { $data .= "--$boundary\r\n"; $data .= 『内容-配置:フォーム-データ; name="'.$k.'' (isset($files[$k])? '; filename="'.basename($files[$k]).'"; Content-Type: application/octet-stream' : '')」 \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 .= 『内容-配置:フォーム-データ; name="'.$k.'"; filename="'.basename($file).'"; コンテンツタイプ:application/octet-stream'。」 \r\n\r\n」; $data .= $v。」 \r\n"; } } } $data .= "--$boundary\r\n"; } $out = 「POST $path HTTP/1.0\r\n」; $header = 「受け入れ:*/*\r\n」; $header .= 「Accept-Language: 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 .= 「接続:Close\r\n」; $header .= 「キャッシュコントロール:no-cache\r\n」; $header .= 「クッキー:$cookie\r\n\r\n」; $out .= $header; $out .= $data; } そうでなければ { $out = 「GET $path HTTP/1.0\r\n」; $header = 「受け入れ:*/*\r\n」; $header .= 「Accept-Language: zh-cn\r\n」; $header .= 「ユーザーエージェント: $_SERVER[HTTP_USER_AGENT]\r\n」; $header .= 「ホスト:$host:$port\r\n」; $header .= 「接続:Close\r\n」; $header .= 「クッキー:$cookie\r\n\r\n」; $out .= $header; }
$fpflag = 0; もし(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) { $context = array( 'http' => array( 「メソッド」=> $post? 『POST』:『GET』、 'header' => $header, 「内容」=> $post、 「タイムアウト」=> $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['fileockheader'] = $headers;
if($position) { for($i=0; $i<$position; $i++) { $char = fgetc($fp); if($char == "\n" & $oldchar != "\r") { $i++; } $oldchar = $char; } }
もし($limit) { $return = stream_get_contents($fp, $limit); } そうでなければ { $return = stream_get_contents($fp); } } @fclose($fp); $returnを戻す; }
}
関数 _format_postkey($post, &$result, $key = '') { foreach($post as $k => $v) { $_k=$key? $key。」 ['.$k.']' : $k; if(is_array($v)) { _format_postkey($v、$result、$_k); } そうでなければ { $result[$_k] = $v; } }
}
?>[/mw_shl_code]
|