`
opensuse
  • 浏览: 186855 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

每天学习PHP函数之fsockopen

    博客分类:
  • php
阅读更多

这个函数是Discuz封装好的dfopen。我加了一下注释。创作权归Discuz所有。

 

就是不知道有没有好的学习curl的函数。呵。

 

<?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);
?>

 

我的ret.php里面只有这么个东东。别见笑。只当学习了

 

<?php
	if($_POST['a'] == '' || $_POST['b'] == '')
		echo "xxx";
	else
		echo "yyy";
?>
 

分享到:
评论

相关推荐

    fsockopen用法.txt

    ### fsockopen函数详解 在PHP中,`fsockopen`是一个非常强大的函数,用于创建一个网络连接(套接字)到指定的主机和端口。这个函数在处理网络通信时特别有用,尤其是在进行HTTP请求、FTP操作或任何需要与远程服务器...

    PHP 文件操作函数

    这篇博客主要探讨了PHP中的文件操作函数,通过学习这些函数,开发者可以高效地处理服务器上的文件系统。下面我们将深入探讨其中的关键知识点。 1. **文件读写** PHP提供了多种文件读写函数。`file_get_contents()`...

    php函数手册.rar

    总的来说,《PHP函数手册》是开发者解决问题的利器,它不仅提供了详细的函数介绍,还包含了丰富的示例和提示,使得PHP的学习和开发变得更加高效。无论你是初学者还是经验丰富的开发者,都应该将这本手册视为必备的...

    不支持fsockopen函数 的通用解决办法

    下载此文件,解压并上传到网站源码根目录。然后访问这个文件【例如您网站的源码是直接放在abc.com的根目录,则访问http://abc.com/pfsockopen.php】,直接点【开始执行替换操作】,即可。

    浅析虚拟主机服务器php fsockopen函数被禁用的解决办法

    二、如何解决fsockopen函数被禁用1、如果服务器没有同时禁用pfsockopen,那么直接将fsockopen函数替换为pfsockopen。具体操作:搜索程序中的字符串 fsockopen( 替换为 pfsockopen( 。示例如下修改前:$fp = ...

    PHP函数库查询辞典

    《PHP函数库查询辞典》是一部详尽的资源,旨在为PHP开发者提供全面的函数参考。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域中占据重要地位。其强大的函数库是其灵活性和功能丰富...

    PHP函数参考

    **PHP函数参考** PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其适合于Web开发。它能够嵌入到HTML中,用于增加动态交互性。PHP提供了丰富的内置函数,使得开发者能够轻松地处理各种任务,如数据...

    PHP上百个常用功能函数.zip

    "PHP上百个常用功能函数.zip"这个压缩包显然包含了众多实用的PHP函数和方法,旨在帮助开发者在日常工作和学习中提升效率。下面将详细讨论一些PHP中常见的功能函数,这些函数通常会在各种场景下被广泛应用。 1. **...

    php使用fsockopen函数发送post,get请求获取网页内容的方法

    本文实例讲述了php使用fsockopen函数发送post,get请求获取网页内容的方法。分享给大家供大家参考。 具体实现代码如下: 复制代码 代码如下:$post =1; $url = parse_url($url); $host =’//www.jb51.net’; $path ...

    PHP 函数手册 Api 中文版

    **PHP函数手册API中文版**是为中文使用者提供的PHP编程参考文档,包含了PHP语言中所有内置函数、类、接口和常量的详细说明。这个手册不仅提供了全面的函数描述,还具备搜索功能,使得开发者在编写代码时能够快速查找...

    fsockopen get/post 表单及上传文件例子

    在PHP编程中,`fsockopen`函数是一个非常重要的网络通信工具,它允许开发者通过创建一个到指定主机的套接字连接来实现低级别的网络I/O操作。本示例主要探讨如何利用`fsockopen`进行GET和POST请求,以及处理文件上传...

    php源码 fsockopen获取网页内容实例详解

    本文将详细介绍如何使用PHP中的fsockopen函数获取网页内容,以及相关的PHP代码实例。fsockopen是PHP提供的一个网络函数,主要用于打开一个网络连接或Unix域套接字的连接。通过fsockopen函数,我们可以向服务器发送...

    基于php socket(fsockopen)的应用实例分析

    在PHP编程中,`fsockopen` 是一个用于创建网络连接的函数,它允许开发者直接通过Socket接口与服务器进行通信,比如HTTP、FTP等协议。本篇文章将深入探讨`fsockopen`函数及其在实际应用中的例子。 首先,为了使用`...

    php函数参考大全光盘

    下面将详细探讨PHP函数、PHP光盘中的内容以及它们对学习和实践PHP编程的重要性。 PHP是一种广泛应用于Web开发的开源脚本语言,尤其在服务器端编程方面具有显著优势。它的灵活性和强大的功能使其成为构建动态网站和...

    php中fsockopen用法实例

    在PHP编程中,fsockopen是一个用于打开网络套接字连接的函数,允许用户与远程服务器进行基于TCP/IP的通信。这个函数非常有用,特别是在需要进行HTTP或其他协议通信时。本文将详细介绍fsockopen的基本用法,并通过...

    php fsockopen解决办法 php实现多线程

    `fsockopen`是一个PHP内置函数,用于创建一个到远程主机的套接字连接,而`stream_socket_client`是PHP5引入的更强大、更灵活的网络连接函数。 在传统的`fsockopen`使用方式中,每个连接都会阻塞直到连接建立或超时...

    PHP中的危险函数全解析.rar

    在PHP编程语言中,存在一些潜在的危险函数,如果使用不当,可能会导致严重的安全问题,如数据泄露、代码注入或服务器资源滥用。本教程将详细解析这些危险函数,帮助开发者了解其风险,避免在实际应用中误用。 一、...

    PHP函数手册

    通过深入学习《PHP函数手册》,开发者可以熟练地掌握PHP的各种函数用法,从而编写出高效、稳定和易于维护的代码。手册中的实例代码和详细解释使得学习过程更加直观,无论是初学者还是经验丰富的开发者,都能从中受益...

Global site tag (gtag.js) - Google Analytics