dfopen():discuz封装的fsockopen()
浏览:2345次 出处信息
<?php function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) { $return = ''; $uri = parse_url($url); $host = $uri['host']; $path = $uri['path'] ? $uri['path'].($uri['query'] ? '?'.$uri['query'] : '') : '/'; $port = !empty($uri['port']) ? $uri['port'] : 80; if($post) { $out = "POST $path HTTP/1.0\r\n"; $out .= "Accept: */*\r\n"; //$out .= "Referer: $boardurl\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n"; $out .= 'Content-Length: '.strlen($post)."\r\n"; $out .= "Connection: Close\r\n"; $out .= "Cache-Control: no-cache\r\n"; $out .= "Cookie: $cookie\r\n\r\n"; $out .= $post; } else { $out = "GET $path HTTP/1.0\r\n"; $out .= "Accept: */*\r\n"; //$out .= "Referer: $boardurl\r\n"; $out .= "Accept-Language: zh-cn\r\n"; $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $out .= "Host: $host\r\n"; $out .= "Connection: Close\r\n"; $out .= "Cookie: $cookie\r\n\r\n"; } $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); if(!$fp) { return '';//note $errstr : $errno \r\n } else { //集阻塞/非阻塞模式流,$block==true则应用流模式 stream_set_blocking($fp, $block); //设置流的超时时间 stream_set_timeout($fp, $timeout); @fwrite($fp, $out); //从封装协议文件指针中取得报头/元数据 $status = stream_get_meta_data($fp); //timed_out如果在上次调用 fread() 或者 fgets() 中等待数据时流超时了则为 TRUE,下面判断为流没有超时的情况 if(!$status['timed_out']) { while (!feof($fp)) { if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { break; } } $stop = false; //如果没有读到文件尾 while(!feof($fp) && !$stop) { //看连接时限是否=0或者大于8192 =》8192 else =》limit 所读字节数 $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit)); $return .= $data; if($limit) { $limit -= strlen($data); $stop = $limit <= 0; } } } @fclose($fp); return $return; } } $result = dfopen("http://localhost/ret.php",0,"a=3&b=4"); var_dump($result); ?>
建议继续学习:
- fsockopen 异步处理 (阅读:9029)
- MySQL优化 之 Discuz论坛MySQL通用优化 (阅读:6726)
- Discuz!7.0横版及子版块图标显示方法 (阅读:5048)
- MySQL优化 之 Discuz论坛优化 (阅读:2863)
- 门户、论坛、博客、SNS,网站模式的辨析 (阅读:2317)
- 解决DISCUZ7.2和ss7.5聚合设置提示论坛路径错误的方法 (阅读:2215)
- 解决Google Adsense无法在Discuz论坛上显示的问题 (阅读:2212)
- 如何让discuz7 版规支持html代码 (阅读:1673)
- 五四陈透过PHP看JAVA系列:fsockopen (阅读:1607)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:WordPress模板的image.php
后一篇:PHP stream未能及时清理现场导致Core的bug >>
文章信息
- 作者:标点符 来源: 标点符
- 标签: dfopen discuz fsockopen
- 发布时间:2010-09-28 09:24:40
建议继续学习
近3天十大热文
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] 图书馆的世界纪录
- [53] android 开发入门
- [52] Go Reflect 性能
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [49] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑