PHP利用socket模拟post之fsockopen发送数据
代码如下 | 复制代码 |
POST /目的程序 HTTP/1.1 |
fsockopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的接受变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
代码如下 | 复制代码 |
$port = $url['port'] ? $url['port'] : 80; |
今天用CPAN安装Term::ReadLine,报了个这样的错误
Going to read /root/.cpan/sources/modules/03modlist.data.gz
Can't locate object method "data" via package "CPAN::Modulelist" (perhaps you forgot to load "CPAN::Modulelist"?) at (eval 31) line 1.
at /usr/lib/perl5/5.8.5/CPAN.pm line 3406
CPAN::Index::rd_modlist('CPAN::Index', '/root/.cpan/sources/modules/03modlist.data.gz') called at /usr/lib/perl5/5.8.5/CPAN.pm line 3129
CPAN::Index::reload('CPAN::Index') called at /usr/lib/perl5/5.8.5/CPAN.pm line 675
CPAN::exists('CPAN=HASH(0x9c79658)', 'CPAN::Module', 'Term::ReadLine') called at /usr/lib/perl5/5.8.5/CPAN.pm line 1842
CPAN::Shell::expandany('CPAN::Shell', 'Term::ReadLine') called at /usr/lib/perl5/5.8.5/CPAN.pm line 2078
CPAN::Shell::rematein('CPAN::Shell', 'install', 'Term::ReadLine') called at /usr/lib/perl5/5.8.5/CPAN.pm line 2165
CPAN::Shell::install('CPAN::Shell', 'Term::ReadLine') called at /usr/lib/perl5/5.8.5/CPAN.pm line 201 eval {...} called at /usr/lib/perl5/5.8.5/CPAN.pm line 201 CPAN::shell() called at -e line 1
google结果有人是这样解决的
rm -rf ~/.cpan
删除后在perl -MCPAN -e shell中执行reload index
然后执行install Bundle::CPAN
最后执行reload CPAN即可正常通过命令行install MODULES
我按照这个做,结果reload index执行都报错,继续google,发现应该是Config.pm的问题,重新配置
cpan> o conf urllist unshift http://www.perl.com/CPAN/
cpan> o conf commit
然后再执行上面的reload index之后的步骤就OK了。
我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦,下面只讲简单的
首先验证的时候产生一个sessionid;
代码如下 | 复制代码 |
<?php Session_start(); $sessionId = session_id();//得到sessionid //将session下发给客户端 ......... ?> |
客户端携带sessionid这个变量来请求数据
代码如下 | 复制代码 |
<?php Session_id(‘$sessionid’);//注意这个时候session_id()这个函数是带有参数的 Session_start();//这个函数必须在session_id()之后 ?> |
多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了
我们这里是一个简单的利用php来php 模拟登录后再到QQ空间发送文章的一个简单的程序,有需要的朋友可以参考,或改进可以给我意见哦。代码如下 | 复制代码 |
<?php //模拟get post请求函数
//表单输出,没有提交时
header('Content-Type:text/html;charset=gb2312'); //获取cookie文件,不存在创建,并退出程序 //构成发表页,post数据等的重要信息 $title=empty($_POST['title'])?die('标题不得空'):$_POST['title'];//文章标题 $category='个人日记';//分类
$_POST['title']---文章标题,不得空 |
给marker、lable、circle等Overlay添加事件很简单,直接addEventListener即可。那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~
代码如下 | 复制代码 |
// 定义自定义覆盖物的构造函数 function SquareOverlay(center, length, color){ this._center = center; this._length = length; this._color = color; } // 继承API的BMap.Overlay |
代码如下 | 复制代码 |
// 实现初始化方法 |
代码如下 | 复制代码 |
// 实现绘制方法 |
代码如下 | 复制代码 |
//添加自定义覆盖物 |
代码如下 | 复制代码 |
SquareOverlay.prototype.show = function(){ |
代码如下 | 复制代码 |
mySquare.show(); |
// 实现隐藏方法
代码如下 | 复制代码 |
SquareOverlay.prototype.hide = function(){ if (this._div){ this._div.style.display = "none"; } } |
mySquare.hide();
代码如下 | 复制代码 |
SquareOverlay.prototype.yellow = function(){ |
mySquare.yellow();
代码如下 | 复制代码 |
<div style="width:520px;height:340px;border:1px solid gray" id="container"></div> |
代码如下 | 复制代码 |
// 实现显示方法 |
六、如何给自定义覆盖物添加点击事件(这章重要!很多人问的)
代码如下 | 复制代码 |
SquareOverlay.prototype.addEventListener = function(event,fun){ |
代码如下 | 复制代码 |
mySquare.addEventListener('click',function(){ |
代码如下 | 复制代码 |
mySquare.addEventListener('mousemover',function(){ |
代码如下 | 复制代码 |
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>自定义覆盖物的点击事件</title> 6 <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script> 7 </head> 8 <body> 9 <div style="width:520px;height:340px;border:1px solid gray" id="container"></div> 10 <p> 11 <input type="button" value="移除覆盖物" onclick="mySquare.hide();" /> 12 <input type="button" value="显示覆盖物" onclick="mySquare.show();" /> 13 <input type="button" value="变成黄色" onclick="mySquare.yellow();" /> 14 </p> 15 </body> 16 </html> 17 <script type="text/javascript"> 18 var map = new BMap.Map("container"); // 创建Map实例 19 var point = new BMap.Point(116.404, 39.915); // 创建点坐标 20 map.centerAndZoom(point,15); // 初始化地图,设置中心点坐标和地图级别。 21 22 //1、定义构造函数并继承Overlay 23 // 定义自定义覆盖物的构造函数 24 function SquareOverlay(center, length, color){ 25 this._center = center; 26 this._length = length; 27 this._color = color; 28 } 29 // 继承API的BMap.Overlay 30 SquareOverlay.prototype = new BMap.Overlay(); 31 32 //2、初始化自定义覆盖物 33 // 实现初始化方法 34 SquareOverlay.prototype.initialize = function(map){ 35 // 保存map对象实例 36 this._map = map; 37 // 创建div元素,作为自定义覆盖物的容器 38 var div = document.createElement("div"); 39 div.style.position = "absolute"; 40 // 可以根据参数设置元素外观 41 div.style.width = this._length + "px"; 42 div.style.height = this._length + "px"; 43 div.style.background = this._color; 44 // 将div添加到覆盖物容器中 45 map.getPanes().markerPane.appendChild(div); 46 // 保存div实例 47 this._div = div; 48 // 需要将div元素作为方法的返回值,当调用该覆盖物的show、 49 // hide方法,或者对覆盖物进行移除时,API都将操作此元素。 50 return div; 51 } 52 53 //3、绘制覆盖物 54 // 实现绘制方法 55 SquareOverlay.prototype.draw = function(){ 56 // 根据地理坐标转换为像素坐标,并设置给容器 57 var position = this._map.pointToOverlayPixel(this._center); 58 this._div.style.left = position.x - this._length / 2 + "px"; 59 this._div.style.top = position.y - this._length / 2 + "px"; 60 } 61 62 //4、显示和隐藏覆盖物 63 // 实现显示方法 64 SquareOverlay.prototype.show = function(){ 65 if (this._div){ 66 this._div.style.display = ""; 67 } 68 } 69 // 实现隐藏方法 70 SquareOverlay.prototype.hide = function(){ 71 if (this._div){ 72 this._div.style.display = "none"; 73 } 74 } 75 76 //5、添加其他覆盖物方法 77 //比如,改变颜色 78 SquareOverlay.prototype.yellow = function(){ 79 if (this._div){ 80 this._div.style.background = "yellow"; 81 } 82 } 83 84 //6、自定义覆盖物添加事件方法 85 SquareOverlay.prototype.addEventListener = function(event,fun){ 86 this._div['on'+event] = fun; 87 } 88 89 //7、添加自定义覆盖物 90 var mySquare = new SquareOverlay(map.getCenter(), 100, "red"); 91 map.addOverlay(mySquare); 92 93 //8、 为自定义覆盖物添加点击事件 94 mySquare.addEventListener('click',function(){ 95 alert('click'); 96 }); 97 </script> |
相关文章
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
Vue生命周期activated之返回上一页不重新请求数据操作
这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- 下面小编就为大家带来一篇C#模拟http 发送post或get请求的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了解决vue watch数据的方法被调用了两次的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07
- 这篇文章主要介绍了JS WebSocket断开原因和心跳机制,对websocket感兴趣的同学,可以参考下...2021-05-08
- 这篇文章主要介绍了c# socket网络编程,server端接收,client端发送数据,大家参考使用吧...2020-06-25
- 这篇文章主要介绍了C#实现Socket通信的解决方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了vue 数据(data)赋值问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了Python3 常用数据标准化方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-24