PHP随机生成国内IP的函数
有时候需要伪造IP去抓取别的网站内容,最好是国内的IP,网上找了个函数,能随机10个IP段的国内IP,我自己查了些IP数据,手动加了5段IP,一共15个IP段,这样可以随机很多个国内IP了,附代码:
function rand_ip(){
$ip_long = array(
array('607649792', '608174079'), //36.56.0.0-36.63.255.255
array('975044608', '977272831'), //58.30.0.0-58.63.255.255
array('999751680', '999784447'), //59.151.0.0-59.151.127.255
array('1019346944', '1019478015'), //60.194.0.0-60.195.255.255
array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
array('1947009024', '1947074559'), //116.13.0.0-116.13.255.255
array('1987051520', '1988034559'), //118.112.0.0-118.126.255.255
array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
);
$rand_key = mt_rand(0, 14);
$huoduan_ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));
return $huoduan_ip;
}
补充:long2ip函数
把存储空间降到了接近四分之一(char(15)的15个字节对整形的4个字节),计算一个特定的地址是不是在一个区段内页更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点)。
例子
$ip = long2ip(3232235881);
echo $ip;//127.255.255.255
我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。
那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手,首先从前端做限制。前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效。第二,我们可以在提交后做redirect页面重定向,即提交后跳转到新的页面,主要避免F5重复提交,但是也有不足之处。第三,就是数据库做唯一索引约束。第四,就是做session令牌验证。
我们现在来了解下简单的利用session token来防止表单重复提交的方法。
我们在表单中加一个input隐藏域,即type="hidden",其value值用来保存token值,当页面刷新的时候这个token值会变化,提交后判断token值是否正确,如果前台提交的token与后台不匹配,则认为是重复提交。
代码如下 | 复制代码 |
<?php /* * PHP简单利用token防止表单重复提交 */ session_start(); header("Content-Type: text/html;charset=utf-8"); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false; set_token(); return $return; } //如果token为空则生成一个token if(!isset($_SESSION['token']) || $_SESSION['token']=='') { set_token(); } if(isset($_POST['web'])){ if(!valid_token()){ echo "token error,请不要重复提交!"; }else{ echo '成功提交,Value:'.$_POST['web']; } }else{ ?> <form method="post" action=""> <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>"> <input type="text" class="input" name="web" value="www,111cn.net"> <input type="submit" class="btn" value="提交" /> </form> <?php } ?> |
以上是一个简单的防止重复提交表单的例子,仅供参考。那么实际项目开发中,会对表单token做更复杂的处理,即我们说的令牌验证。可能要做的处理有:验证来源域,即来路,是否为外部提交;匹配要执行的动作,是添加、修改or删除;其次最重要的是构建token,token可以采用可逆的加密算法,尽可能复杂,因为明文还是不安全的。令牌验证的具体算法可以参考各大PHP框架,如ThinkPHP提供了很好的令牌验证功能。
下面我们一起来看一篇关于SAE 上安装 Wecenter 错误问题处理例子,希望这篇文章能够帮助到各位朋友。今天其实想搭建个社区,专门为 Zephir/Phalcon/Yaf/Docker/Swoole 建设一个社区, 专门为 C 语言的PHP框架和 C 语言扩展做一个,刚开始挺高兴的,直接用 wecenter 搭建多好,而且官网说支持 SAE,我就信心满满的去了,结果不行,坑爹呀,新浪那么大字,mysql 不支持 host:port 没看吗? 稍微修改一下就可以了。
0x01
修改 system\Zend\Db\Adapter\Mysqli.php ,搜索找到 // Suppress connection warnings here. ,然后在上边加入以下代码:
代码如下 | 复制代码 |
//修复SAE上连接错误 BUG add by widuu 2015/4/23 if (defined('IN_SAE')){ $host = $this->_config['host']; $this->_config['host'] = strstr($host,':',true); $port = trim(strstr($host,':'),':'); } // end by widuu |
修改 system\Zend\Db\Adapter\Pdo\Abstract.php,搜索一下代码:
代码如下 | 复制代码 |
return $this->_pdoType . ':' . implode(';', $dsn); |
然后替换成如下这样:
代码如下 | 复制代码 |
//修复SAE上连接错误 BUG add by widuu 2015/4/23 |
伪静态不管用,大哥你知道吗,最好看看官方的 API,然后伪静态变成如下就可以了:
name: 你的应用名称
version: 你的版本
handle:
代码如下 | 复制代码 |
- rewrite: if (!-d && !-f) goto "/index.php?%{QUERY_STRING}" |
好就到这里,明天预告,更新 Phalcon 的东西,我也想更新 YAF 的知识,当然一个一个慢慢来。然后是 Zephir。
股票信息查询功能我们是需要抓取第三方的数据,然后我们再把这些数据进行分析组成自己想要的,下面我们来看一个php 股票信息查询类。今天一个二逼朋友让我帮忙写个股票查询的类,来集成到微信中,所以花了一点时间写了一个不完整的,哈哈,如果有想玩的人,可以继续提交代码,让它变得完善起来!!
GitHub 地址:github.com/widuu/stock
代码如下:
代码如下 | 复制代码 |
class stock{ /** const STOCK_URL = "http://apis.baidu.com/apistore/stockservice/stock"; const SOCKET_SUGGEST = "http://cjhq.baidu.com/suggest?code5="; /** private static $instance; /** private static $apikey; /** public static function getInstance($apikey){ return self::$instance; /** public static function getName($stockid){ /** public static function getTime($stockid){ /** public static function getKline($stockid,$date='min'){ /** public static function getSingleStock($stockid){ /** private static function getStockId($name){ /** private static function httpGet($url,$header=false) { //测试代码 |
作为php菜鸟,在公司捣鼓的一个基于thinkphp框架项目上要是用七牛(原来有用过C#版本的sdk)。现在在官方找到php的官方sdk,最后发现原来Thinkphp已经支持驱动类型是qiniu的文件上传了。
现在将配置说明一下。
利用七牛云私有空间存储文件
注册七牛云,创建空间,将空间设为私有
需要记下的东西:
AK,SK,bucket
在config.php添加
//七牛上传文件设置
'PICTURE_UPLOAD_DRIVER'=>'Qiniu',
//本地上传文件驱动配置
'UPLOAD_LOCAL_CONFIG'=>array(),
'UPLOAD_QINIU_CONFIG'=>array(
'accessKey'=>'l3N4q0XCqm0rssaaMTHryZYG-LnKMH',
'secrectKey'=>'7qPVaeRasasan2TjALqQAjF0h6jOt0D1jF',
'bucket'=>'yaasasnbao',
'domain'=>'7xasssa.com2.z0.glb.qiniucdn.com',
'timeout'=>3600,
),
3、添加一个上传类Model
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: huajie <banhuajie@163.com>
// +----------------------------------------------------------------------
namespace Admin\Model;
use Think\Model;
use Think\Upload;
/**
* 图片模型
* 负责图片的上传
*/
class PictureModel extends Model{
/**
* 自动完成
* @var array
*/
protected $_auto = array(
array('status', 1, self::MODEL_INSERT),
array('create_time', NOW_TIME, self::MODEL_INSERT),
);
/**
* 文件上传
* @param array $files 要上传的文件列表(通常是$_FILES数组)
* @param array $setting 文件上传配置
* @param string $driver 上传驱动名称
* @param array $config 上传驱动配置
* @return array 文件上传成功后的信息
*/
public function upload($files, $setting, $driver = 'Local', $config = null){
/* 上传文件 */
$Upload = new Upload($setting, $driver, $config);
$info = $Upload->upload($files);
if($info){ //文件上传成功,记录文件信息
return $info; //文件上传成功
} else {
$this->error = $Upload->getError();
return false;
}
}
/**
* 下载指定文件
* @param number $root 文件存储根目录
* @param integer $id 文件ID
* @param string $args 回调函数参数
* @return boolean false-下载失败,否则输出下载文件
*/
public function download($root, $id, $callback = null, $args = null){
/* 获取下载文件信息 */
$file = $this->find($id);
if(!$file){
$this->error = '不存在该文件!';
return false;
}
/* 下载文件 */
switch ($file['location']) {
case 0: //下载本地文件
$file['rootpath'] = $root;
return $this->downLocalFile($file, $callback, $args);
case 1: //TODO: 下载远程FTP文件
break;
default:
$this->error = '不支持的文件存储类型!';
return false;
}
}
/**
* 检测当前上传的文件是否已经存在
* @param array $file 文件上传数组
* @return boolean 文件信息, false - 不存在该文件
*/
public function isFile($file){
if(empty($file['md5'])){
throw new \Exception('缺少参数:md5');
}
/* 查找文件 */
$map = array('md5' => $file['md5'],'sha1'=>$file['sha1'],);
return $this->field(true)->where($map)->find();
}
/**
* 下载本地文件
* @param array $file 文件信息数组
* @param callable $callback 下载回调函数,一般用于增加下载次数
* @param string $args 回调函数参数
* @return boolean 下载失败返回false
*/
private function downLocalFile($file, $callback = null, $args = null){
if(is_file($file['rootpath'].$file['savepath'].$file['savename'])){
/* 调用回调函数新增下载数 */
is_callable($callback) && call_user_func($callback, $args);
/* 执行下载 */ //TODO: 大文件断点续传
header("Content-Description: File Transfer");
header('Content-type: ' . $file['type']);
header('Content-Length:' . $file['size']);
if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { //for IE
header('Content-Disposition: attachment; filename="' . rawurlencode($file['name']) . '"');
} else {
header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
}
readfile($file['rootpath'].$file['savepath'].$file['savename']);
exit;
} else {
$this->error = '文件已被删除!';
return false;
}
}
/**
* 清除数据库存在但本地不存在的数据
* @param $data
*/
public function removeTrash($data){
//$this->where(array('id'=>$data['id'],))->delete();
}
}
4、修改调用上传类的代码
public function ImgUpload()
{
//$this->error("没有文件!");
//TODO: 用户登录检测
/* 调用文件上传组件上传文件 */
$Picture = D('Picture');
$pic_driver = C('PICTURE_UPLOAD_DRIVER');
$info = $Picture->upload(
$_FILES,
C('PICTURE_UPLOAD'),
C('PICTURE_UPLOAD_DRIVER'),
C("UPLOAD_{$pic_driver}_CONFIG")
); //TODO:上传到远程服务器
/* 记录图片信息 */
if($info){
/* 返回JSON数据 */
echo json_encode($info);
} else {
echo json_encode($info);
}
}
5、在客户端使用ajaxfileupload调用php方法
//上传图片
$(document).on('change','#upfile',function(){
$.ajaxFileUpload({
url:'{:U("Company/ImgUpload")}',
secureuri:false,
fileElementId:'upfile',
dataType: 'json',
type:'post',
data: { fileElementId: 'upfile'},
success: function (data) {
$('#showimg').attr('src',data.upfile.url);
$('#imageurl').val(data.upfile.url);
}
})
})
这里最好使用json的数据类型进行传输
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
- 分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
SQL Server中row_number函数的常见用法示例详解
这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08