php 获取客户端mac地址程序代码
例1
PHP代码:
代码如下 | 复制代码 |
<?php @exec("arp -a",$array); //执行arp -a命令,结果放到数组$array中 echo "<pre>"; print_r($array); //打印获取的数组 foreach($array as $value) { if( //匹配结果放到数组$mac_array strpos($value,$_SERVER["REMOTE_ADDR"]) && preg_match("/(:?[0-9a-f]{2}[:-]){5}[0-9a-f]{2}/i",$value,$mac_array) ) { $mac = $mac_array[0]; break; } } echo $mac; //输出客户端MAC ?> |
例2
代码如下 | 复制代码 |
<?php |
获取服务端的逻辑没什么大问题,可能会存在权限问题。
获取客户端的时候,可能会比较慢,arp/nbstat命令执行会比较慢。
代码如下 | 复制代码 |
<script language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo"> |
只适用于IE浏览器,而且会有告警提示
文件搜索就是利用php遍历目录然后去一个个文件获取文件名进行对比,然后查找到我们指定文件时就停止遍历并显示要搜索的文件名与地址即可。今天要做一个专门用于处理搜索文件的功能,而搜索的文件可能是位于某个目录下的,寻找目录下是否存在该目录,PHP函数当中好像没有专门这样的搜索函数。
文件的操作在 php 中是不可缺少的,而文件的使用频率也是非常高的,比如我们常见的目录管理系统,无数据库留言本等,都用到了文件的操作,而这里的文件指的不仅仅是目录的操作,还有指定文件的操作,比如 txt 文件等。
下面是一个专门用于文件搜索的函数方法,file_search 是方法名,后面有三个参数,$directory 是要搜索的文件所在的目录,比如 “admin/”目录下, $search 是搜索的文件了,$recursive 是判断是否搜索成功的,默认就可以了,如果还需要其它操作,可以在后面进行添加相应参数即可。
例1
代码如下 | 复制代码 |
<?php function file_search($directory, $search, $recursive = TRUE) |
例2
代码如下 | 复制代码 |
<?php //test: |
例3
使用php glob函数查找文件,遍历文件目录
函数说明:array glob ( string $pattern [, int $flags ] )
功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的,不能用于远程文件)
参数说明:第一个参数:匹配模式;第二个可选参数:
•GLOB_MARK - 在每个返回的项目中加一个斜线
•GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
•GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
•GLOB_NOESCAPE - 反斜线不转义元字符
•GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
•GLOB_ONLYDIR - 仅返回与模式匹配的目录项
代码如下 | 复制代码 |
|
例4
代码如下 | 复制代码 |
<?php print_r(listDir('./')); //遍历当前目录 |
下面是我们的测试页面,就几句
代码如下 | 复制代码 |
<?php session_start(); ?> |
CPU,IO,磁盘,内存……这些没问题的,都有排查过,刚开始以为网络问题、被墙、过滤、内存……问题,最后确定都不是.应该不是硬件资源问题了.
现在用额外加段代码能解决这问题,治标不治本,还没找到是什么原因导致session_start启动慢.
先自动创建一PHPSESSID,不用session_start自动分配的.
代码如下 | 复制代码 |
if(!isset($_COOKIE['PHPSESSID'])) |
最后的样子如下:
代码如下 | 复制代码 |
<?php if(!isset($_COOKIE['zenid']) && $_SERVER['HTTP_USER_AGENT']!='UDROBOT') ..... |
其实模拟登录就那点事,无法就是获得相应的参数,然后模拟发送,把获得的COOKIE 带入下一步操作中去
discuzx 系列为防止灌水,一直在用 formhash() 这个函数:
1、下面来看下formhash 这个函数:
代码如下 | 复制代码 |
function formhash($specialadd = '') { |
注:生成方式:
1、截取的时间戳
2、用户名
3、用户ID
4、authkey
5、hashadd(定值)
6、specialadd(定值)
因为存在用户名和用户id ,所以 在登录前跟登录后的 产生的值是不同的,即:在登录前跟登录后你要2次来获得fromhash;
那么authkey又是个什么东西呢 ?
2、关于authkey
//代码位置:/source/class/discuz/discuz_application.php
代码如下 | 复制代码 |
if(empty($this->var['cookie']['saltkey'])) { $this->var['cookie']['saltkey'] = random(8);//这一步不要去管 dsetcookie('saltkey', $this->var['cookie']['saltkey'], 86400 * 30, 1, 1); } $this->var['authkey'] = md5($this->var['config']['security']['authkey'].$this->var['cookie']['saltkey']); |
在这里可以看到:authkey是根据配置文件的authkey 和cookie 里面的saltkey 来生成的
其实在这里就可以看出来了, 只要网站的$this->var['cookie']['saltkey'] 这个值始终保存在cookie里面就这样就可以保证 formhash 那里生成的值永远是一样的(永远是相对的)
这里还要说一点:
3 cookie系列
discuz 的cookie的前缀是随机生成的
代码位置:/source/class/discuz/discuz_application.php
代码如下 | 复制代码 |
$this->var['config']['cookie']['cookiepre'] = $this->var['config']['cookie']['cookiepre'].substr(md5($this->;var['config']['cookie']['cookiepath'].'|'.$this->;var['config']['cookie']['cookiedomain']), 0, 4).'_'; |
只要你登录下网站看看cookie 的设置这里就可以了,他的前缀确实hi一直不变的,当然改了配置文件那肯定会变
到底该怎么写呢:说下我实现的思路
1、登录下访问网站一下抓取网页返回的 saltkey(cookie),formhash(值) 这两个值(saltkey在下面一定要带上,而且上下文要一致)
2、构造登录的内容然后模拟post 提交 (一定要带上第一步抓取到的cookie跟formhash 这一个值)
3、如果登录成功,接着获取一个页面的 formhash 跟设置的cookie(这次获得到的formhash 就是你可以一直使用的了)
4、构造发帖还有顶帖的post 提交到页面 (cookie 跟formhash 还是重点 )
关于php 使用 crul 模拟 post 部分代码
代码如下 | 复制代码 |
$ch = curl_init($url); //初始化 |
代码就不共享了,有能力的朋友自己写把; 这东西容易引起混乱
现在使用微信公众平台的商家越来越多了,微信公众平台为我提供了大量api接口他可以实现与我们网站数据对接,然后用户输入内容自动回复相关信息,下面我来介绍微信公众平台智能机器开发教程。最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
下面写个实例,开发微信智能聊天机器人:
1. 注册微信公众平台账号
https://mp.weixin.qq.com/
注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。
2. 申请服务器/虚拟主机
没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
3. 开启开发者模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
4. 填写接口配置信息
同样是在“高级功能”菜单中配置,需要配置两项参数:
URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.你的域名.com/weixin/index.php”为例。
TOKEN: 随意填写,用于生成签名,以“你的域名”为例。
填写完把下面代码保存为index.php并上传至http://www.你的域名.com/weixin/目录,最后点击“提交”完成验证。
代码如下 | 复制代码 |
<?php private function checkSignature() { |
这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。
http://mp.weixin.qq.com/wiki/index.php
5. 开发微信公众平台功能
OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:
当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:
代码如下 | 复制代码 |
<xml> <!--开发者微信号--> <ToUserName><![CDATA[toUser]]></ToUserName> <!--发送方帐号(OpenID)--> <FromUserName><![CDATA[fromUser]]></FromUserName> <!--消息创建时间 (整型)--> <CreateTime>12345678</CreateTime> <!--消息类别 (text文本消息)--> <MsgType><![CDATA1]></MsgType> <!--消息内容--> <Content><![CDATA[content]]></Content> <!--消息ID (64位整型)--> <MsgId>1234567890123456</MsgId> </xml> |
开发者在处理完消息后需要返回数据给微信服务器:
代码如下 | 复制代码 |
<xml> <!--接收方帐号(OpenID)--> <ToUserName><![CDATA[toUser]]></ToUserName> <!--开发者微信号--> <FromUserName><![CDATA[fromUser]]></FromUserName> <!--消息创建时间 (整型)--> <CreateTime>12345678</CreateTime> <!--消息类别 (text文本消息)--> <MsgType><![CDATA1]></MsgType> <!--回复消息内容--> <Content><![CDATA[content]]></Content> <!--星标操作(位0x0001被标志时 星标刚收到的消息)--> <FuncFlag>0</FuncFlag> </xml> |
除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。
来看看官方提供的一个PHP示例,我做了一些精简:
代码如下 | 复制代码 |
<?php //---------- 接 收 数 据 ---------- // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据 //用SimpleXML解析POST过来的XML数据 $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
//返回消息模板 $msgType = "text"; //消息类型 //格式化消息模板 |
把代码保存为index.php并上传至http://www.你的域名.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。
现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.你的域名.com”的消息。
接下来需要做的就是根据用户消息动态返回结果~
SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码:
代码如下 | 复制代码 |
<?php //---------- 接 收 数 据 ---------- // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据 //用SimpleXML解析POST过来的XML数据 $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
//返回消息模板 $msgType = "text"; //消息类型 //格式化消息模板 |
把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~
相关文章
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
- php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- 获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
- 1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31