php把IP地址转换成广播地址的例子

 更新时间:2016年11月25日 16:59  点击:1894
Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机

网络广播地址计算方法:
(1)IP地址与子网掩码进行“位与”运算,得到网络地址
(2)子网掩码“取反”运算,然后与网络地址进行“位或”运算,得到广播地址

 代码如下 复制代码

//ip地址转换广播地址
private function ip2broadcast($ip,$mask){
 $ipSplit = explode('.',$ip);
 $maskSplit = explode('.',$mask);
 $broadcast = null;
 for ($i=0; $i < 4; $i++) {
  $ipBin = sprintf("%b",$ipSplit[$i]);
  while((8-strlen($ipBin))>0) $ipBin = "0".$ipBin;

  $maskBin = sprintf("%b",$maskSplit[$i]);
  while((8-strlen($maskBin))>0) $maskBin = "0".$maskBin;

  $broadcastBin = null;//www.111cn.net
  for ($j=0; $j < 8; $j++) {
   $broadcastBin .= (!intval(substr($maskBin, $j , 1))) |
      (intval(substr($ipBin, $j , 1)) & intval(substr($maskBin, $j , 1)));
  }

  if ($i>0) $broadcast .= ".";
  $broadcast .= bindec($broadcastBin);
 }
 return $broadcast;
}

 

下面本文章给各位整理了一篇关于微信公众平台消息有时候不处理问题追踪,希望此思路对各位朋友会带来帮助哦。

这几天我们的微信公众平台突然不处理用户消息,但是接口应答率是100%,但是还是会经常出现无法回复请求的信息,也就是是说明我么有接收到微信官方提供的数据,所以这边应答率是100%,昨天微信官方也发布了新的PHP SDK,发现sort在排序的时候需要设置第二个参数,以字符串来进行排序,这样就很清楚,微信又发送消息给我们,但是被我们的验证机制给拦截了,所以会造成这样的问题。

微信在升级SDK的时候也开放了微支付的接口申请,接口申请必须是服务号,而且是必须认证过的。O2O终于可以整套实现了。

以前我们写过很多利用curl模拟登录的,今天我来介绍两个例子都可以实现对方网站有验证码图片时由用户输入验证码之后再验证。


例子

读取远程的验证码利用框架加载到此页面然后手工输入

 

 代码如下 复制代码

<?php
/**
 * @author 追逐__something
 * @version $id
 */
define('SCRIPT_ROOT',dirname(__FILE__).'/');
$act = trim($_REQUEST['act']);
switch($act)
{
    case 'login':
        // 获取验证码
        $code = trim($_REQUEST['code']);
       
        // $loginParams为curl模拟登录时post的参数
        $loginParams['act'] = 'login';
        $loginParams['password'] = '111111';
        $loginParams['username'] = 'wlpadmin';
        $loginParams['vcode'] = $code;
       
        // $cookieFile 为加载验证码时保存的cookie文件名
        $cookieFile = SCRIPT_ROOT.'cookie.tmp';
       
        // $targetUrl curl 提交的目标地址 www.111cn.net
        $targetUrl = 'http://local.xx.com/admin/login.php';
       
        // 参数重置
        $content = curlLogin($targetUrl, $cookieFile, $loginParams);
        echo $content;
    break;
    case 'authcode':
        // Content-Type 验证码的图片类型
        header('Content-Type:image/png');
        showAuthcode('http://local.xx.com/admin/vcode.php?r=0.03192671708666017');
        exit;
    break;
}

/**
 * 模拟登录
 * @param string $url 提交到的地址
 * @param string $cookieFile 保存cookie的文件
 * @param string $loginParams 提交时要post的参数
 * @return string $content 返回的内容
 */
function curlLogin($url, $cookieFile, $loginParams)
{
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFile); //同时发送Cookie
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $loginParams); //提交查询信息
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

/**
 * 加载目标网站图片验证码
 * @param string $authcode_url 目标网站验证码地址
 */
function showAuthcode( $authcode_url )
{
    $cookieFile = SCRIPT_ROOT.'cookie.tmp';
    $ch = curl_init($authcode_url);
    curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFile); // 把返回来的cookie信息保存在文件中
    curl_exec($ch);
    curl_close($ch);
}
?>
<iframe src="?act=authcode" style='width: 100px; height:40px ' frameborder=0 ></iframe>
<form>
<input type="hidden" name="act" value="login">
<input type="text" name="code" />
<input type="submit" name="submit" >
</form>

例子

思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作

 

 代码如下 复制代码

//初始化变量
$cookie_file = "tmp.cookie";
$login_url = "http://xxx.com/logon.php";
$verify_code_url = "http://xxx.com/verifyCode.php";

echo "正在获取COOKIE...n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储
$contents = curl_exec($curl);
curl_close($curl);

echo "COOKIE获取完成,正在取验证码...n";
//取出验证码 www.111cn.net
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);

$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存n";
//停止运行20秒
sleep(20);

echo "休眠完成,开始取验证码...n";
$code = file_get_contents("code.txt");
echo "验证码成功取出:$coden";
echo "正在准备模拟登录...n";

$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);

//这一块根据自己抓包获取到的网站上的数据来做判断
if(substr_count($result,"登录成功")){
 echo "登录成功n";
}else{
 echo "登录失败n";
 exit;
}

//啦啦啦,开始做你想做的事吧。。。。。

下面我们利用正则函数把字符转换在url形式了,当然后面推荐的php自带的函数我们也可以尝试一下哦,这里就不介绍了。

英文:

 代码如下 复制代码

function tourl($str) {
  $str = preg_replace('/[^a-zA-Z0-9]+/', '-', $str);
  $str = trim($str, '-');
  return strtolower($str);
}

包含特殊字符:

 代码如下 复制代码

function strtourl($str) {
  $str = htmlentities($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/&([a-z]{1,2})(?:acute|lig|grave|ring|tilde|uml|cedil|caron);/i','1',$str);
  $str = html_entity_decode($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/[^a-z0-9]+/i', '-', $str);
  return strtolower($str);
}

除了上面方法php提供了urlencode()、urldecode()、rawurlencode()、rawurldecode()函数了,利用它就可以直接转换了这个就不介绍了。

留言板是学习php用来入门的一个常用的例子,下面我看一站长写了这个例子,从注册到登录都有比较的好逻辑于时拿来与大家分享了。
显示效果
如图:
wKiom1LOaN_ylQA2AABIuPmS5fQ575.jpg
wKiom1LOaN_AA_VnAAGjGc5OYew734.jpg
wKioL1LOaNPCSbOxAABUGpgitw4886.jpg
wKiom1LOaN_x9jSQAAAbiSstFWU938.jpg
1.导入MYSQL数据:
将如下SQL语句导入库,假定库名称为bbs,这里保证库与表字段的编码都为UTF-8模式
 代码如下 复制代码
-------------------------------------------
CREATE TABLE `message` (
 `id` tinyint(1) NOT NULL auto_increment,
 `user` varchar(25) NOT NULL,
 `title` varchar(50) NOT NULL,
 `content` tinytext NOT NULL,
 `lastdate` date NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--------------------------------------------
2.部分PHP代码
add.php
------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//加载head.php文件
include("head.php");
//提交表单到数据库
if($_POST['submit']){
  $sql = "insert into message(id,user,title,content,lastdate) " .
         "values('','$_POST[user]','$_POST[title]','$_POST[content]',now())";
  mysql_query($sql);
  echo "<script language="javascript">alert('添加成功');history.go(-1)</script>";
}  www.111Cn.neT
?>
<!--利用JS对表单输入进行字符限制-->
<SCRIPT language=javascript>
   function CheckPost() {
       if (myform.user.value==""){
           alert("请填写用户名");
           myform.user.focus();
           return false;
       }
       if (myform.title.value.length<5){
           alert("标题不能少于5个字符");
           myform.title.focus();
           return false;
       }
       if (myform.content.value==""){
           alert("必须要填写留言内容");
           myform.content.focus();
           return false;
       }
}
</SCRIPT>
<!--HTML表单结构-->
<form action="add.php" method="post" name="myform" onsubmit="return CheckPost();">
用户: <input type="text" size="10" name="user"/><br>    
标题: <input type="text" name="title" value="value" size="40" maxlength="40"/><br>
内容: <textarea name="content"></textarea><br/>
<input type='submit' name='submit' value="发布留言"/>
</form>
------------------------------------------------
head.php
-------------------------------------------------
<!--HTML头导航链接-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<link href='#'" /css.css" rel="stylesheet" type="text/css">
<b><a href='#'" /a> | <a href="list.php">浏览留言</a> | <a href="login.php">登陆</a></b>
<hr size="1">
-------------------------------------------------
list.php
-------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//加载head.php文件
include("head.php");
//设置分页值为5
$pagesize=5;
//取得除域名外后面完整的地址路径
$url=$_SERVER["REQUEST_URI"];
//取得该固定键值[path][query]的url数组
$url=parse_url($url);
//print_r($url);
//取得url的[path]路径值
$url=$url[path];
//取得test表信息
$numq =  mysql_query("select * from message");
//取得test表内容的行数
$num = mysql_num_rows($numq);
//判断是否能取到page参数值
if($_GET[page]){
   //将该值传给pageval
   $pageval=$_GET[page];
   //计算page值,供SQL语句使用
   $page=($pageval-1)*$pagesize;
   //等价于 $page = $page.',' 意思就是将page参数值与,连接起来
   $page.=",";
}
//判断数据库条目总数大于页数,显示分页
if($num > $pagesize){
   //判断上一页和下一页的值若小于0,则按照0处理
   if($pageval<=1)
       $pageval=1;
   //显示分页
   echo "共 $num 条".
   //.(...).用来连接变量名
   " <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
?>
<!--HTML留言列表结构-->
<table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
 <?
 $sql = "select * from message order by id desc limit $page $pagesize";
 $query = mysql_query($sql);
 while($row=mysql_fetch_array($query)){
 ?>
 <tr bgcolor="#eff3ff">
 <td>标题:<?=$row[title]?> 用户:<?=$row[user]?></td>
 </tr>
 <tr bgColor="#ffffff">
     <td>内容:<? echo htmtocode($row[content]); ?></td>
 <tr bgColor="#ffffff">
 <td>时间:<?=$row[lastdate]?></td>
 </tr>
 <?
 }
 ?>
</table>
-------------------------------------------------
conn.php
--------------------------------------------------
<?
//登录MYSQL数据库
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
//进入BBS库
mysql_select_db("bbs", $conn);
//使用UTF-8中文编码传输数据流
mysql_query("set names 'UTF8'");
//修改空格和回车编码为HTML可识别编码
function htmtocode($content){
   $content = str_replace("n","<br>", str_replace(" ", "&nbsp;", $content));
   return $content;
}
?>
--------------------------------------------------
login.php
---------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//判断是否退出,并标记cookie为out,返回登录页
if($_GET[out]){
   setcookie("cookie","out");
   echo "<script language="javascript">location.href='login.php';</script>";
}
//提交表单判断登录ID是否为admin,密码是否匹配'PHP'的MD5值,并标记cookie为ok
if($_POST[id] =='admin'){
   $pw=md5($_POST[pw]);
   if ($pw=='e1bfd762321e409cee4ac0b6e841963c'){
       setcookie("cookie","ok");
       //刷新登录页面使cookie标记值生效.
       echo "<script language="javascript">location.href='login.php';</script>";
   }
}
//加载head.php文件
include("head.php");
//提交表单判断cookie标记值不为ok,则显示登录页,否则显示退出页
if($_COOKIE['cookie']!='ok'){
?>
<!--利用JS对登录字符进行限制-->
<SCRIPT language=javascript>
   function Checklogin(){
       if (myform.id.value ==""){
           alert("请填写登录名");
           myform.id.focus();
           return false;
       }
       if (myform.id.value !=="admin"){
           alert("用户名错误");
           myform.id.focus();
           return false;
       }
       if (myform.pw.value ==""){
           alert("密码不能为空");
           myform.pw.focus();
           return false;
       }
       }
   }
</SCRIPT>
<!--HTML登录页-->
<form action="" method="post" name="myform" onsubmit="return Checklogin();">
   用户名: <INPUT type="text" name="id" /><br>
   密&nbsp;&nbsp;码: <INPUT type="password" name="pw" />
   <input type="submit" name="submit" value="登陆">
</form> www.111cn.Net
<?
}else{
?>
<!--HTML退出页-->
   <a href='?out=login'>退出</a>
<?
}

?>

好了,这个是基于学习了,如果更好点的需要对数据进行安全过程操作,否则这样很容易被黑哦。

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • 美图秀秀把普通照片快速转换成卡通效果教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下把普通照片快速转换成卡通效果的教程,各位想知道具体制作步骤的使用者们,那么下面就快阿里跟着小编一起看一...2016-09-14
  • 浅析C#数据类型转换的几种形式

    本篇文章是对C#中数据类型转换的几种形式进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • JavaScript实现Base64编码转换

    这篇文章主要介绍了JavaScript实现Base64编码转换的相关资料,非常简单实用,需要的朋友可以参考下...2016-04-25
  • PHP编码转换函数mb_convert_encoding与iconv用法

    文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25
  • c#入门之类型转换详解

    这篇文章主要介绍了c#的类型转换详解,类型转换分两种形式:隐式转换、显示转换,下面是详细介绍...2020-06-25
  • JavaScript实现数据类型的相互转换

    这篇文章主要为大家详细介绍了JavaScript实现数据类型的相互转换,感兴趣的朋友可以参考一下...2016-03-09
  • php使用floor去掉小数点的例子

    floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
  • C#将数字转换成字节数组的方法

    这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    这篇文章主要介绍了java中JSONObject转换为HashMap(方法+main方法调用实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-14
  • JSON字符串转换JSONObject和JSONArray的方法

    这篇文章主要介绍了JSON字符串转换JSONObject和JSONArray的方法的相关资料,需要的朋友可以参考下...2016-06-12
  • php中iconv编码转换来解决中文乱码的问题

    用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些 代码如下 复制代码 ...2016-11-25
  • c#之用户定义的数据类型转换介绍

    c#允许定义自己的数据类型,这意味着需要某些工具支持在自己的数据类型间进行数据转换。方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明是隐式或者显式,以说明怎么使用它...2020-06-25
  • photoshop把照片转换为铅笔素描画人像效果后期处理教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说把照片转换为铅笔素描画人像效果的后期处理教程,各位想知道具体的后期处理方法的使用者们,那么大家...2016-09-14
  • Golang中的自定义类型之间的转换的实现(type conversion)

    这篇文章主要介绍了Golang中的自定义类型之间的转换的实现(type conversion),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
  • C#数据类型及其转换详解

    这篇文章主要介绍了C#数据类型及其转换详解,在C#中,数据类型可以分为几种类型,今天小编通过本文给大家详细介绍,需要的朋友可以参考下...2020-07-10
  • Lua判断变量是否为数字、字符串是否可以转换为数字等

    这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下...2020-06-30