您正在查看: PHP 分类下的文章

tp5隐藏index.php入口文件

Apache

location / { // …..省略部分代码
    if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=/$1  last;
        break;
    }
}

Phpstudy

<IfModule mod_rewrite.c> 
Options +FollowSymlinks -Multiviews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 
</IfModule>

Nginx

location / { // …..省略部分代码
    if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=/$1  last;
        break;
    }
}

判断当前数组是几维数组

if (!empty($service_child_order_list)) {

           foreach ($service_child_order_list as $service_child_order) {
                if( is_array( $service_child_order ) ){
                    $child_order_amount += $service_child_order['order_amount'];
                }else{
                    $child_order_amount = $service_child_order_list['order_amount'];
                }
                //$child_order_amount += $service_child_order['order_amount'];
            }
      }

PHP 按一定比例压缩图片,保持清晰度

<?php
/**
 图片压缩操作类
 v1.0
*/
   class Image{
       
       private $src;
       private $imageinfo;
       private $image;
       public  $percent = 0.1;
       public function __construct($src){
           
           $this->src = $src;
           
       }
       /**
       打开图片
       */
       public function openImage(){
           
           list($width, $height, $type, $attr) = getimagesize($this->src);
           $this->imageinfo = array(
                
                'width'=>$width,
                'height'=>$height,
                'type'=>image_type_to_extension($type,false),
                'attr'=>$attr
           );
           $fun = "imagecreatefrom".$this->imageinfo['type'];
           $this->image = $fun($this->src);
       }
       /**
       操作图片
       */
       public function thumpImage(){
           
            $new_width = $this->imageinfo['width'] * $this->percent;
            $new_height = $this->imageinfo['height'] * $this->percent;
            $image_thump = imagecreatetruecolor($new_width,$new_height);
            //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
            imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);
            imagedestroy($this->image);    
            $this->image =     $image_thump;
       }
       /**
       输出图片
       */
       public function showImage(){
           
            header('Content-Type: image/'.$this->imageinfo['type']);
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image);
           
       }
       /**
       保存图片到硬盘
       */
       public function saveImage($name){
           
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image,$name.'.'.$this->imageinfo['type']);
           
       }
       /**
       销毁图片
       */
       public function __destruct(){
           
           imagedestroy($this->image);
       }
       
   }
 

?>

测试

<?php  
          
        require 'image.class.php';  
        $src = "001.jpg";  
        $image = new Image($src);  
        $image->percent = 0.2;  
        $image->openImage();  
        $image->thumpImage();  
        $image->showImage();  
        $image->saveImage(md5("aa123"));  
  
  
?>

原文:
http://blog.csdn.net/gaoxuaiguoyi/article/details/49592151

base64转图片

$base64 = 'data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD';
$url = explode(',', $base64);
$a = file_put_contents('test.png', base64_decode($url[1]));//返回的是字节数
print_r($a);die;
function save_img_by_base($base64_image_content){
    header('Content-type:text/html;charset=utf-8');
    //保存base64字符串为图片
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
        $type = $result[2];//匹配出图片的格式
        $root_path= dirname(ROOT_PATH)."/images/cardarticleimg/"; //图片保存的路径
        $path=date('Y-m-d').'/';
        $mulu=$root_path.$path;
        if(!file_exists($mulu)){
            mkdir($mulu,0777,true);
            chmod($mulu,0777);
        }
        $file_name = mt_rand().".$type";
        $new_file=$mulu.$file_name;
        /*$new_file = "./test.{$type}";*/
        if (file_put_contents("$new_file", base64_decode(str_replace($result[1], '', $base64_image_content)))){
            return $path.$file_name;
        }
    }
}

jquery模拟点击触发a标签href

h5页打电话location.href='tel:123456', 很简单就可以实现,我是用的安卓,没有问题,以为就万事大吉,没想到苹果qq浏览器不认识,于是就查资料。

<a href="javascript:;" id="ios_href"><span>阅读 </span></a>

$('#ios_href').attr( 'href', href );
$("#ios_href")[0].click();

网上资料

jquery对象转化成DOM对象即可,否则不能触发url跳转,只能执行函数
$("#managementid")[0].trigger()
$("#managementid")[0].click()

注意事项:
1、a标签里面必须有内容
2、好像这个a标签还不能隐藏
3.内容是特殊字符好像还不行

im标签正则表达式

preg_match_all( '/<img.*?src="(.*?)".*?>/i', $article_info['content'], $matchs );
        $lazySrcs = array();
        if( !empty($matchs[1]) ) {
            foreach( $matchs[1] as $k=>$v ) {
                $lazySrcs[] = '<img class="lazy" width="100%" data-src="'.$v.'" >';
            }
        }
        $newsrcs                 = str_replace( $matchs[0], $lazySrcs, $article_info['content'] );
        $article_info['content'] = $newsrcs;

lnmp环境下发布网站

安装lnmp步骤
1.下载lnmp并安装
https://lnmp.org/install.html
2.远程navicat(Ip/phpmyadmin)  https://bbs.vpser.net/thread-13563-1-1.html
    开启的话可以按如下步骤:
    1、首先需要自己在phpmyadmin里添加一个用户 主机为 % 的任意主机(也可以编辑已有的用户)
    2、并且iptables 里删除DROP 3306端口的规则,iptables教程:https://www.vpser.net/security/linux-iptables.html
3.远程FTP
    172.247.**.**  1234
    SFTP
    root   **************
4.  
    1.lnmp vhost add
    2.删除 .user.ini 文件 先修改权限 (ls -a)
      如要修或删除需要先执行:chattr -i .user.ini
      修改完成后再执行:rm .user.ini
    3. chmod -R 755 文件夹
5.修改php.ini后需要service php-fpm reload
6.修改nginx里的conf需要nginx -s reload

注意

redis学习笔记

客户端是否启动  netstat -tunpl | grep 6379
启动客户端  redis-server redis.conf
进入客户端  redis-cli.exe -h 127.0.0.1 -p 6379
关闭客户端  pkill redis-server
设置auth的cookie值  setcookie( 'auth', $auth, time()+86400 )
删除auth的cookie值  setcookie( 'auth', '', time()-1 )
前台跳转  header('location:list.php')

redis数据类型
1.string  key=>value

    set  set name lijie
    get  get name 
    setnx(如果key存在,返回0,不设置不更新)
    setex   设置值和有限期  setex haircolor 10 red
    setrange  setrange name 6 gmail.com  (lijie@126.com--->lijie@gmail.com)
    mset  设置多个key的值,1所有都成功,0都不成功
    msetnx 设置多个key的值,1所有都成功,0都不成功,不会覆盖之前的key值
    
    get  get name
    getset      获取旧值,设置新值  getset key6 30
    getrange   获取子集的部分     getrange name 0 5
    mget   获取多个value值  mget key1 key2 key3 key4
    
    incr  对某个值递增 incr key6
    incrby 加指定值 key不存在时候,设置并认为是0  incrby key6 5    incrby key6 -5
    decr 
    decrby 
    append 指定字符串追加 append name .net
    strlen 获取字符串长度 strlen name

2.hash string类型的field和value的映射表
    
    hset    user:001 name lijie (user:001是一张表,对里面的name赋值,不能覆盖,即使里面有一个字段)
    hget    hget user:001 name  (获取user:001的name值)      
    hsetnx  hset user:001 name lijie(设置不成功)
    hmset   hmset user:001 name lijie age 20
    hmget   hmget user:001 name age
    hincrby  
    hexists
    hlen    hlen user:001  字段数量
    hdel    hdel user:001 age
    hkeys   hkeys user:001 
    hvals  
    hgetall  

3.list 链表架构,push、pop、一个key的范围(栈和队列同时具备)

    lpush  从头部压入一个元素 
    lrange  lrange mylist 0 -1 取出全部元素
    rpush  从尾部压入元素
    linsert   linsert list3 before one three
    lset    lset list5 1 four 指定下标的值替换掉
    lrem    lrem list5 n one (n > 0 从头删除,n = 0,全部删除,n < 0,从尾删除) 
    ltrim   保留key的值的范围内的数据   ltrim list8 1 -1 (保留下表1到最后) 
                                        ltrim list8 1 2(保留下表1和2的)
    lpop 从头部删除,并返回删除元素
    rpop 从尾部删除,并返回删除元素
    rpoplpush 尾弹出头压入
    lindex 返回下标为key的index的元素  lindex mylist 1(返回下标为1的元素)
    llen 
    
4.set  string类型的无序集合(不允许有重复的值) 并集、交集、差集

    sadd   集合中添加元素
    smembers   查询集合中元素
    srem   删除名称为key的set中的元素
    spop   随机删除名称为key的set中的元素,返回删除的数据
    sdiff  两个集合的差集 返回第一个可以的交集
           myset1  one,two  myset2 two,three
           sdiff myset1 myset2   ->  one
           sdiff myset2 myset1   ->  three
    sdiffstore  sdiffstore myset3 myset1 myset2 (1与2的差集存在3中)
    sinter 返回key的交集
    sinterstore 交集存到一个地方
    sunion 并集
    sunionstore 交集存在一个地方
    smove  将第一个集合的元素移动到第二个集合
           smove myset1 myset2 three   1的three元素移动到2中
    scard  获取几个个数
    sismember 某个值是否是集合中的元素
    srandmember 随机取出集合中的元素

5.zset 有序排列
    
    zadd 添加元素并指定顺序,如果存在则更新排序 zadd myset 1 one
    zrange zrange myset 0 -1 withscores
    zrem 删除元素
    zincrby 存在元素则顺序变化为顺序号,不存在则插入 zincrby sset1 3 one
    zrank  返回元素的下标(从小到大排列)
    zrevrank 返回元素的下标(从大到小排列
    zrangebyscore     zrangebyscore myset 2 3 withscores
    zcount    zcount myset 2 3
    zcard   返回所有元素个数
    zremrangbyrank  删除索引(下标)元素  zremrangbyrank myset 1 1(删除下标为1的元素)
    zremrangbyscore 删除排序元素  zremrangbyscore myset 1 2(删除排序1,2的元素)

redis常用命令
    
1、键值相关命令

    keys 返回所有键  keys *   keys my*
    exists 确认key是否存在    exists age
    del 删除一个键   del age 
    expire 对key设置过期时间   expire addl 10 (addr 10秒过期)
    ttl  addl 获取key的有效时长(-1代表已过期)
    select 连接数据库    select 0  
    persist 移除给定key的过期时间(此key不受过期时间限制)
    randomkey 随机返回key空间的一个key
    remane 重命名key    rename age age1
    type  返回键的类型

2、服务器相关命令
    
    ping   出现 PONG 则显示正常
    echo   
    select 选择数据库
    quit exit 断开客户端
    dbsize 返回数据库中key的数目
    info 获取服务器信息
    config get 实时转储收到的请求 congif get timeout
    flushdb 删除当前选择数据库的所有key
    flushall 删除所有数据库中的所有键

redis高级应用

1、安全性
    redis.conf里修改requirepass beijing,重启一下redis.conf
    
    方法1: *******/redis-cli
            auth beijing
    方法2: *******/redis-cli -a beijing
    
2、主从复制

    1.master可拥有多个slave
    2.多个slave都可连接master,也可以连接别的slave
    3.同步数据不影响客户端写入
    4.伸缩性

    配置从服务器
        加入配置 
        slaveof 192.168.1.1 6379
        masterauth beijing

3、事务处理

    age 10
    multi  
    set age 20
    set age 30
    exec
    get age  ->30

    age 10
    multi
    set age 20
    set age 30
    discard
    get age  ->10
    
    队列中有错误,事务不会回滚
    

4、持久化机制
5、发布订阅信息
6、虚拟内存使用

    

session设置及数组排序查找

今天修改信息页,要查许多人的排序,第一次登陆进去之后查询一遍,放入session中,以后就可以直接读取了。后来遇到一个问题,当换账号进来后还是之前的session,所有又把user_id加入session中,先判断user_id是否相同

if( $_SESSION['user_id'] == $member_id ){
   if( $_SESSION['integral_num'] ){
       $integral_num = $_SESSION['integral_num'];
   }
  if( $_SESSION['branch_order'] ){
      $branch_order = $_SESSION['branch_order'];
  }
  if( $_SESSION['jiedao_order'] ){
      $jiedao_order = $_SESSION['jiedao_order'];
  }
}

二维数组根据某一个字段排序

$person_all = $this -> my_sort( $integral_num_all, 'member_inter', SORT_DESC ); 
function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){   
        if(is_array($arrays)){   
            foreach ($arrays as $array){   
                if(is_array($array)){   
                    $key_arrays[] = $array[$sort_key];   
                }else{   
                    return false;   
                }   
            }   
        }else{   
            return false;   
        }  
        array_multisort($key_arrays,$sort_order,$sort_type,$arrays);   
        return $arrays;   
    }

某一个字段在二维数组中的key值

$jiedao_order = $this->deep_in_array( $member_id, $person_all );
function deep_in_array($value, $array) {   
        foreach($array as $key => $item) {   
            if(!is_array($item)) {   
                if ($item == $value) {  
                    return $key;  
                } else {  
                    continue;   
                }  
            }     
            if(in_array($value, $item)) {  
                return $key;      
            } else if($this->deep_in_array($value, $item)) {  
                return $key;      
            }  
        }   
        return false;   
    }

form表单提交之前验证

今天做个弹框提交表单,信息不全时候跳转到后台检测,不符合要求返回到前台,虽然不能添加成功,但用户体验不好,所以改成提交前验证

<form class="am-form" action='' method="post" id="add_form" onsubmit="return check()" >
代码区
</form>
<script type="text/javascript">
  function check(){
    $meeting_name = $('#meeting_name').val();
    $join = $("input[type='checkbox']").is(':checked');
    if( $meeting_name == '' ){
      alert('请填写会议名称');return false;
    }
    if( $join === false ){
      alert('请选择参加人员');return false;
    }
    return true;
  }
</script>

注意:
1.form中添加 onsubmit="return check()"
2.check()中必须有return,onsubmit认为ture或者不写都为提交,只有false才不提交
3.checkbox判断是否选中 $("input[type='checkbox']").is(':checked') 选中为ture,没选中为false