php控制访问人数的方法

php控制访问人数的方法

//添加访问人数
 public function addfangwen()
    {
        header("Content-type:text/html;charset=utf-8");
        $redis = \RedisClient::getInstance();
        $moban_fangwen = $redis->get('gheliceshi1_fangwen');
        if ($moban_fangwen >= 10) {
            echo '<script>alert("访问人数过多,请稍后访问")</script>';
            exit();
        }else{
            $redis->incr('gheliceshi1_fangwen');
        }
    }
//减少访问人数
   public function jianshaofangwen()
    {
        $redis = \RedisClient::getInstance();
        $redis->decr('gheliceshi1_fangwen');
        if ($redis->get('gheliceshi1_fangwen') <= 0) {
            $redis->set('gheliceshi1_fangwen', 0);
        }
        print_r($redis->get('gheliceshi1_fangwen'));
        exit();
    }

网站入口写

addfangwen();

还有js初始化的时候要长连接 swoole

swoole

$server->on('close', function ($ser, $fd) {

    $redis = \RedisClient::getInstance();
    $redis->decr('gheliceshi1_fangwen');
    if ($redis->get('gheliceshi1_fangwen') <= 0) {
        $redis->set('gheliceshi1_fangwen', 0);
    }

});

关闭浏览器自然就是断开连接了 用下面方法减少人数


jianshaofangwen();

这样就可以使用贷款了 不怕不够用了

微信公众号 微信连wifi最全的教程

微信公众号 微信连wifi最全的教程

http://jingyan.baidu.com/article/1709ad806c69bd4634c4f0b3.html

放到自定义菜单 只能用新建图文 把二维码放到图文里面。。。 然后把图文链接放到自定义菜单

如果添加完设备扫二维码 已添加设备还是0 就参考这个 扫描二维码后 会提示你连接成功的
http://kf.qq.com/faq/140806zARbmm150127yUzEfU.html

javascript高德地图放到网页中的方法

javascript高德地图放到网页中的方法

1 先获取到经纬度
http://lbs.amap.com/console/show/picker

2 下面代码直接设置下中心点 和标记点就可以了

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>点标记</title>
    <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/>
    <style>
        .marker {
            color: #ff6600;
            padding: 4px 10px;
            border: 1px solid #fff;
            white-space: nowrap;
            font-size: 12px;
            font-family: "";
            background-color: #0066ff;
        }
    </style>
    <script src="http://webapi.amap.com/maps?v=1.3&key=输入key值"></script>
    <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>

<script>
    var marker, map = new AMap.Map("container", {
        resizeEnable: true,
        center: [123.17699, 33.21674],
        zoom: 16
    });
    marker = new AMap.Marker({
        icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
        position: [123.17699, 33.21674]
    });
    marker.setMap(map);

</script>
</body>
</html>

jquery换一批的写法

jquery换一批的写法

  <img src="{$yuming}/images/3/huanyipi.png" alt="" currentindex="1" count="3" class="huanyipi">
 $('.huanyipi').on('click',function () {
         var currentindex=parseInt($(this).attr('currentindex'));
         var count=parseInt($(this).attr('count'));
        currentindex++;
        if(currentindex>count){
            currentindex=1;
        }
        $(this).attr('currentindex',currentindex);
        $('.bufenlist').css('display','none');
        $('.bufen'+currentindex).fadeIn();
    })

点一次一次currentindex+1 来判断 就行了

linux shell `符号详解

linux shell `符号详解

[root@iZ23uewresmZ arjianghu]# echo `ls`
asss.html common guaji.php images index.php log.log register.html register.php restartswoole.sh testditu.html timg.jpg zhuangtai.php
[root@iZ23uewresmZ arjianghu]# echo $(ls)
asss.html common guaji.php images index.php log.log register.html register.php restartswoole.sh testditu.html timg.jpg zhuangtai.php
[root@iZ23uewresmZ arjianghu]# 

就是变量。。

php 获取文件mime类型的方法

php 获取文件mime类型的方法

使用fileinfo需要安装php_fileinfo扩展。

如已安装可以在extension_dir目录下找到php_fileinfo.dll(windows),fileinfo.so(Linux)
打开php.ini,把extension=php_fileinfo.dll前的”;”去掉,然后重启apache。

<?php  
$fi = new finfo(FILEINFO_MIME_TYPE);  
$mime_type = $fi->file('1.jpg');  
echo $mime_type; // image/jpeg  
?>  

php开启多线程下载

php开启多线程下载

<?php
/**
 * 多进程批量下载文件(使用php curl_multi_exec实现)
 * Date:    2017-07-16
 * Author:  fdipzone
 * Version: 1.0
 *
 * Func
 * public  download 下载处理
 * public  process  多进程下载
 * private to_log   将执行结果写入日志文件
 */
class BatchDownLoad {

    // 下载文件设置
    private $download_config = array();

    // 最大开启进程数量
    private $max_process_num = 10;

    // 超时秒数
    private $timeout = 10;

    // 日志文件
    private $logfile = null;

    /**
     * 初始化
     * @param  Array  $download_config   下载的文件设置
     * @param  Int    $max_process_num   最大开启的进程数量
     * @param  Int    $timeout           超时秒数
     * @param  String $logfile           日志文件路径
     */
    public function __construct($download_config, $max_process_num=10, $timeout=10, $logfile=''){
        $this->download_config = $download_config;
        $this->max_process_num = $max_process_num;
        $this->timeout = $timeout;

        // 日志文件
        if($logfile){
            $this->logfile = $logfile;
        }else{
            $this->logfile = dirname(__FILE__).'/batch_download_'.date('Ymd').'.log';
        }
    }

    /**
     * 执行下载
     * @result Int
     */
    public function download(){

        // 已处理的数量
        $handle_num = 0;

        // 未处理完成
        while(count($this->download_config)>0){

            // 需要处理的大于最大进程数
            if(count($this->download_config)>$this->max_process_num){
                $process_num = $this->max_process_num;
                // 需要处理的小于最大进程数
            }else{
                $process_num = count($this->download_config);
            }

            // 抽取指定数量进行下载
            $tmp_download_config = array_splice($this->download_config, 0, $process_num);

            // 执行下载
            $result = $this->process($tmp_download_config);

            // 写入日志
            $this->to_log($tmp_download_config, $result);

            // 记录已处理的数量
            $handle_num += count($result);

        }

        return $handle_num;

    }

    /**
     * 多进程下载文件
     * @param  Array $download_config 本次下载的设置
     * @return Array
     */
    public function process($download_config){

        // 文件资源
        $fp = array();

        // curl会话
        $ch = array();

        // 执行结果
        $result = array();

        // 创建curl handle
        $mh = curl_multi_init();

        // 循环设定数量
        foreach($download_config as $k=>$config){
            $ch[$k] = curl_init();
            $fp[$k] = fopen($config[1], 'a');

            curl_setopt($ch[$k], CURLOPT_URL, $config[0]);
            curl_setopt($ch[$k], CURLOPT_FILE, $fp[$k]);
            curl_setopt($ch[$k], CURLOPT_HEADER, 0);
            curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch[$k], CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)');

            // 加入处理
            curl_multi_add_handle($mh, $ch[$k]);
        }
           //下面几句话就是执行多线程curl  不用理解为什么这样写 照着写就是了  如果执行好 $active会变成0的
        $active = null;

        do{
            $mrc = curl_multi_exec($mh, $active);
        } while($active);

        // 获取数据
        foreach($fp as $k=>$v){
            fwrite($v, curl_multi_getcontent($ch[$k]));
        }

        // 关闭curl handle与文件资源
        foreach($download_config as $k=>$config){
            curl_multi_remove_handle($mh, $ch[$k]);
            fclose($fp[$k]);

            // 检查是否下载成功
            if(file_exists($config[1])){
                $result[$k] = true;
            }else{
                $result[$k] = false;
            }
        }

        curl_multi_close($mh);

        return $result;

    }

    /**
     * 写入日志
     * @param Array $data 下载文件数据
     * @param Array $flag 下载文件状态数据
     */
    private function to_log($data, $flag){

        // 临时日志数据
        $tmp_log = '';

        foreach($data as $k=>$v){
            $tmp_log .= '['.date('Y-m-d H:i:s').'] url:'.$v[0].' file:'.$v[1].' status:'.$flag[$k].PHP_EOL;
        }

        // 创建日志目录
        if(!is_dir(dirname($this->logfile))){
            mkdir(dirname($this->logfile), 0777, true);
        }

        // 写入日志文件
        file_put_contents($this->logfile, $tmp_log, FILE_APPEND);
    }

}
date_default_timezone_set('Asia/Shanghai');
$base_path = dirname(__FILE__).'/phototest';

$download_config = array(
    array('http://img.ads.csdn.net/2017/201707141625579530.jpg', $base_path.'/p1.jpg'),
    array('http://geek.csdn.net/assets/images/geek_logo.png', $base_path.'/p2.jpg'),
    array('http://images.csdn.net/20170718/Hans_meitu_401.jpg', $base_path.'/p3.jpg'),
);

$obj = new BatchDownLoad($download_config, 2, 10);
$handle_num = $obj->download();

echo 'download num:'.$handle_num.PHP_EOL;
?>


ps:经过测试单线程和多线程下载速度是差不多的 因为带宽就这些 这是多线程能更好的使用带宽利用率

php 将图片文件转成base64编码的方法

php 将图片文件转成base64编码的方法

<?php

/** 文件转base64输出
 * @param  String $file 文件路径
 * @return String base64 string
 */

function fileToBase64($file){
    $base64_file = '';
    if(file_exists($file)){
        $mime_type= mime_content_type($file);
        $base64_data = base64_encode(file_get_contents($file));
        $base64_file = 'data:'.$mime_type.';base64,'.$base64_data;
    }
    return $base64_file;
}

print_r(fileToBase64('bd_logo1.png'));
exit();
?>

base64编码直接 在浏览器地址栏输入就可以看到图片啦。。
ps:mime_content_type函数在 php5.3 以上就被废弃了, 如果要用就要重新开启