这个函数是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";
?>
分享到:
相关推荐
下载此文件,解压并上传到网站源码根目录。然后访问这个文件【例如您网站的源码是直接放在abc.com的根目录,则访问http://abc.com/pfsockopen.php】,直接点【开始执行替换操作】,即可。
二、如何解决fsockopen函数被禁用1、如果服务器没有同时禁用pfsockopen,那么直接将fsockopen函数替换为pfsockopen。具体操作:搜索程序中的字符串 fsockopen( 替换为 pfsockopen( 。示例如下修改前:$fp = ...
fsockopen函数能够运用,首先要开启php.ini中的allow_url_open=on;fsockopen是对socket客户端代码的封装,该函数中封装了socket_create,socket_connect。服务器端代码:server.php复制代码 代码如下:<?...
本文实例讲述了php使用fsockopen函数发送post,get请求获取网页内容的方法。分享给大家供大家参考。 具体实现代码如下: 复制代码 代码如下:$post =1; $url = parse_url($url); $host =’//www.jb51.net’; $path ...
也许fsockopen、pfsockopen函数的确存在着安全的隐患,但是我们却已经无从考证,这都是IDC商说的,不管是什么原因吧,反正他们是把这两个函数禁用了,那么如何解决呢,下面是小编整理的方法,希望对用到的同学有一定...
本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器。 2、关键技术 本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该...
近期黑客利用程序漏洞注入后使用 fsockopen 进行PHPDDOS 攻击,导致部分服务器不稳定,现在将危险函数 fsockopen 暂时禁用,部分程序功能可能有问题,以下列出已知问题及通用解决方法
fsockopen, A 2、用最少的代码写一个求3值最大值的函数. function($a,$b,$c){ return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c ); } 3、用PHP打印出前一天的时间,打印格式是2007年5月10日 22:21:21 Echo date...
PHP fsockopen函数说明: Open Internet or Unix domain socket connection(打开套接字链接) Initiates a socket connection to the resource specified by target . fsockopen() returns a file pointer ...
Web服务器执行一个PHP脚本,有时...使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成,即可实现异步 执行PHP的效果。 例子: 复制代码 代码如下:<? function triggerRequest($ur
php语言得用fsockopen()函数,实现脚本异步运行,代码如下 异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果) main.php <?php function request_by_...
if($fp = @fsockopen($url[‘host’],empty($url[‘port’])?80:$url[‘port’],$error)){ fputs($fp,”GET “.(empty($url[‘path’])?’/’:$url[‘path’]).” HTTP/1.1\r\n”); fputs($fp,”Host:$url...
目前记得服务器PHP环境不能禁止fsockopen函数,否则邮件发送不了,但这问题也有解决的办法。总之,一开始使用,总有不顺,由于时间久远,现在想来,也不知道具体改了什么。所以,将现在正在使用的PHPMailer目录文件...
php fclose()函数 语法 作用:关闭一个打开文件 语法: fclose(file) 参数: file 必需。规定要关闭的文件。 说明:如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen() 或 ...
由于模板消息发送不需要等待微信的结果,所以利用php的fsockopen()函数可以达到快速发送的效果。代码如下: $data = [ 'touser' => '11111111111111111', 'template_id' => '111111111111111111', 'url'...
使用fsockopen函数打开一个Internet连接这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一 个socket句柄,使用它就可以象使用文件句柄一样的。 4、学会使用一个发送邮件的类
如果邮件的投递被成功地接收,则返回 true,否则返回 false3、socket方式发送原理使用fsockopen函数打开一个Internet连接这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一 个socket句柄,使用...