`
opensuse
  • 浏览: 183440 次
  • 性别: 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函数 的通用解决办法

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

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

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

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

    fsockopen函数能够运用,首先要开启php.ini中的allow_url_open=on;fsockopen是对socket客户端代码的封装,该函数中封装了socket_create,socket_connect。服务器端代码:server.php复制代码 代码如下:&lt;?...

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

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

    PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法

    也许fsockopen、pfsockopen函数的确存在着安全的隐患,但是我们却已经无从考证,这都是IDC商说的,不管是什么原因吧,反正他们是把这两个函数禁用了,那么如何解决呢,下面是小编整理的方法,希望对用到的同学有一定...

    利用 fsockopen&#40;&#41; 函数开放端口扫描器的实例

    本文利用 fsockopen&#40;&#41; 函数,编写一个功能简单的端口扫描器。 2、关键技术 本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen&#40;&#41; 函数连接,如果连接成功,则该端口处于开放状态,否则该...

    fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法

    近期黑客利用程序漏洞注入后使用 fsockopen 进行PHPDDOS 攻击,导致部分服务器不稳定,现在将危险函数 fsockopen 暂时禁用,部分程序功能可能有问题,以下列出已知问题及通用解决方法

    php笔试题汇总(超级精华的试题)

    fsockopen, A 2、用最少的代码写一个求3值最大值的函数. function($a,$b,$c){ return $a&gt;$b? ($a&gt;$c? $a : $c) : ($b&gt;$c? $b : $c ); } 3、用PHP打印出前一天的时间,打印格式是2007年5月10日 22:21:21 Echo date...

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

    PHP fsockopen函数说明: Open Internet or Unix domain socket connection(打开套接字链接) Initiates a socket connection to the resource specified by target . fsockopen&#40;&#41; returns a file pointer ...

    php定时计划任务与fsockopen持续进程实例

    Web服务器执行一个PHP脚本,有时...使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成,即可实现异步 执行PHP的效果。 例子: 复制代码 代码如下:&lt;? function triggerRequest($ur

    PHP编程实现脚本异步执行的方法

    php语言得用fsockopen&#40;&#41;函数,实现脚本异步运行,代码如下 异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果) main.php &lt;?php function request_by_...

    获取远程文件大小的php函数

    if($fp = @fsockopen&#40;$url[‘host’],empty($url[‘port’]&#41;?80:$url[‘port’],$error)){ fputs($fp,”GET “.(empty($url[‘path’])?’/’:$url[‘path’]).” HTTP/1.1\r\n”); fputs($fp,”Host:$url...

    PHPMailer邮件发送源码修正版+邮件发送实例+教程

    目前记得服务器PHP环境不能禁止fsockopen函数,否则邮件发送不了,但这问题也有解决的办法。总之,一开始使用,总有不顺,由于时间久远,现在想来,也不知道具体改了什么。所以,将现在正在使用的PHPMailer目录文件...

    PHP fclose函数用法总结

    php fclose()函数 语法 作用:关闭一个打开文件 语法: fclose(file) 参数: file 必需。规定要关闭的文件。 说明:如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen&#40;&#41; 或 ...

    PHP快速推送微信模板消息

    由于模板消息发送不需要等待微信的结果,所以利用php的fsockopen&#40;&#41;函数可以达到快速发送的效果。代码如下: $data = [ 'touser' =&gt; '11111111111111111', 'template_id' =&gt; '111111111111111111', 'url'...

    PHP100视频教程 (四十二、PHP通过mail()或Socket发邮件).rar

    使用fsockopen函数打开一个Internet连接这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一  个socket句柄,使用它就可以象使用文件句柄一样的。 4、学会使用一个发送邮件的类

    PHP100视频教程 42:PHP通过mail()或Socket发邮件

    如果邮件的投递被成功地接收,则返回 true,否则返回 false3、socket方式发送原理使用fsockopen函数打开一个Internet连接这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一 个socket句柄,使用...

Global site tag (gtag.js) - Google Analytics