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

Tp5开发规范

命名规范

ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:

目录和文件

目录使用小写+下划线;
类库、函数文件统一以.php为后缀;
类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);

函数和类、属性命名

类的命名采用驼峰法(首字母大写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;
函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip;
方法的命名使用驼峰法(首字母小写),例如 getUserName;
属性的命名使用驼峰法(首字母小写),例如 tableName、instance;
以双下划线“__”打头的函数或方法作为魔术方法,例如 __call 和 __autoload;

常量和配置

常量以大写字母和下划线命名,例如 APP_PATH和 THINK_PATH;
配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert;

数据表和字段

数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name字段,不建议使用驼峰和中文作为数据表字段命名。
应用类库命名空间规范
应用类库的根命名空间统一为app(不建议更改,可以设置app_namespace配置参数更改,V5.0.8版本开始使用APP_NAMESPACE常量定义);
例如:appindexcontrollerIndex和appindexmodelUser。

微信支付

1.获取prepay_id
2.根据prepay_id获取支付参数

后台

$wx_pay_config                   = [];
       $wx_pay_config['appid']          = config('appid');
       $wx_pay_config['appsecret']      = config('appsecret');
       $wx_pay_config['token']          = config('token');
       $wx_pay_config['encodingaeskey'] = config('encodingaeskey');
       $wx_pay_config['mch_id']         = config('mch_id');
       $wx_pay_config['partnerkey']     = config('partnerkey');
       $wx_pay_config['cert_key']       = config('cert_key');
       $wx_pay_config['cert_cert']      = config('cert_cert');

       $wechatpay    = new WechatPay( $wx_pay_config );
       $openid       = $order_info['openid'];
       $body         = $order_info['product_name'];
       $out_trade_no = $order_info['order_sn'];
       $total_fee    = $order_info['total_price'] * 100;
       $notify_url   = config('url_domain_root') .'mobile/Notify/index';
       $prepayid     = $wechatpay->getPrepayId( $openid, $body, $out_trade_no, $total_fee, $notify_url );
       $wx_res       = $wechatpay -> createMchPay( $prepayid );

      $jsticket    = new WechatScript( $this->option );
      $protocol    = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
      $url         = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
      $jssign_info = $jsticket -> getJsSign( $url );
      //return view( 'index', [ 'data'=> json_encode( $wx_res ) ] );
      return view( 'index', [ 'title' => '支付订单', 'data'=> $wx_res, 'obj'=> $jssign_info, 'order_info'=>$order_info] );

前台

<script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
        <script>
          wx.config({
            debug: false,
            appId: '{$obj["appId"]}',
            timestamp: '{$obj["timestamp"]}',
            nonceStr: '{$obj["nonceStr"]}',
            signature: '{$obj["signature"]}',
            jsApiList: [
              // 所有要调用的 API 都要加到这个列表中
                'chooseWXPay',
              ]
          });
        </script>
        <script type="text/javascript">
            function getOrder(){
                wx.chooseWXPay({
                    timestamp: '{$data["timestamp"]}', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                    nonceStr: '{$data["nonceStr"]}', // 支付签名随机串,不长于 32 位
                    package: '{$data["package"]}', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id =***)
                    signType: '{$data["signType"]}', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                    paySign: '{$data["paySign"]}', // 支付签名
                    success: function (res) {
                        // 支付成功后的回调函数
                        alert('支付成功!');
                        window.location.href = "{:url('Mycenter/index')}";
                    },
                    fail: function (res) {
                        alert(JSON.stringify(res));
                    }
                });
            }
        </script>

注意事项:
1.商户后台填写授权支付域名,如果带参数,最好带一个,其余参数可以根据这个去获取,如:http://xxxxxx/mobile/wxpay/index/order_id/33.html
这时候授权支付域名就是 http://xxxxxx/mobile/wxpay/index/order_id/
2.支付成功异步回调,一定不能继承逻辑代码的父类,最好单独一个类

微信获取config参数及共享地址

后台

$jsticket     = new WechatScript( $this->option );
        $protocol     = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $url          = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        $jssign_info  = $jsticket -> getJsSign( $url );

前台

<script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
     <script>
      wx.config({
        debug: false,
        appId: '{$obj["appId"]}',
        timestamp: '{$obj["timestamp"]}',
        nonceStr: '{$obj["nonceStr"]}',
        signature: '{$obj["signature"]}',
        jsApiList: [
          // 所有要调用的 API 都要加到这个列表中
            'checkJsApi',
            'openAddress',
            'editAddress'
          ]
      });
    </script>
    <script language="javascript">
        function callpay()
        {
            wx.openAddress({
                trigger: function (res) {
                   // alert('用户开始拉出地址');
                },
                success: function (res) {
                   var address_info = res.detailInfo + ' ' + res.userName + ' ' + res.telNumber;
                   $('#address').html( address_info );
                   $('#link_people').val( res.userName );
                   $('#link_phone').val( res.telNumber );
                },
                cancel: function (res) {
                   alert('地址拉取取消');
                },
                fail: function (res) {
                   alert('地址拉取失败');
                }
            });
        }
    </script>

二维数组去除重复的一维数组,及按照某一值分组

public function array_unique_fb($array2D){   
        foreach ($array2D as $v){ 
            $v=join(',',$v);//降维,也可以用implode,将一维数组转换为用逗号连接的字符串 
            $temp[]=$v; 
        } 
        $temp=array_unique($temp);//去掉重复的字符串,也就是重复的一维数组 
        foreach ($temp as $k => $v){ 
            $temp[$k]=explode(',',$v);//再将拆开的数组重新组装 
        } 
        return $temp; 
    }
$combine_tem = $this->array_unique_fb( $combine_order );
            foreach ((array)$combine_tem as $key => $value) {
                $store_tem[ $value[0] ][] = $value[1];
            }

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;