PHP开发小记

composer安装ThinkPHP5

D:\wamp64\www\17xiu>php think build --config build.php

Successed
***********************************
1.多表联查 users userinfo detail 表
select id,detail,phone,age from users inner join userinfo on users.id = userinfo.user_id inner join detail on userinfo.user_id = detail.detail_id;


select * from T1 left join T2 on T1.userid = T2.userid
$res = $a->join('left join a on a.id = b.id left join b.id = c.id')->select();




原生:分组联合查询
SELECT * from tb_user a LEFT JOIN (select count(app_id),user_id from tb_app GROUP BY user_id) b on a.user_id = b.user_id; 


SELECT * from tb_user u INNER JOIN tb_user_role ur on u.user_id = ur.uid;


删除表中所有数据并清除auto_increment:truncate table items;


普通索引:最基本的索引,不具备唯一性,就是加快查询速度
注:可以使用key,也可以使用index 。index 索引名称(字段)  ,索引名称,可以加也可以不加,不加使用字段名作为索引名。。
mysql> create table demo( id int(4), name varchar(20), pwd varchar(20), index(pwd) );
删除索引
mysql> alter table demo drop key pwd; 注意此处的pwd指的是索引的名称,而不是表中pwd的那个字段
再用alter添加
mysql> alter table demo add key(pwd);


唯一索引


与普通索引基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一,用来约束内容,字段值只能出现一次。应该加唯一索引。唯一性允许有NULL值<允许为空>。


mysql> create table demo3(id int(4) auto_increment primary key, uName varchar(20), uPwd varchar(20), unique  index  (uName));


php think build --config build.php
++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
2.Mysql原生语句拼接 


$where['_string'] = 'find in set';
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N。


SQL> SELECT FIND_IN_SET('b','a,b,c,d');
+---------------------------------------------------------+
| SELECT FIND_IN_SET('b','a,b,c,d')                       |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec) ;


$where['_string'] = 'datetime > '.time().;




++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
3.SQL函数


dayofweek(date)    
返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准)  
mysql> select dayofweek('1998-02-03');    
  -> 3    
weekday(date)    
返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 
  
mysql> select weekday('1997-10-04 22:23:00');    
  -> 5    
mysql> select weekday('1997-11-05');    
  -> 2    
 
dayofmonth(date)    
返回date是一月中的第几日(在1到31范围内)    
mysql> select dayofmonth('1998-02-03');    
  -> 3    
 
dayofyear(date)    
返回date是一年中的第几日(在1到366范围内)    
mysql> select dayofyear('1998-02-03');    
  -> 34    
 
month(date)    
返回date中的月份数值    
mysql> select month('1998-02-03');    
  -> 2    
 
dayname(date)    
返回date是星期几(按英文名返回)  
mysql> select dayname("1998-02-05");    
  -> 'thursday'    
 
monthname(date)    
返回date是几月(按英文名返回)  
mysql> select monthname("1998-02-05");    
  -> 'february'    
 
quarter(date)    
返回date是一年的第几个季度    
mysql> select quarter('98-04-01');    
  -> 2    
 
week(date,first)   
返回date是一年的第几周(first默认值0,first取值1表示周一是
周的开始,0从周日开始)  
mysql> select week('1998-02-20');    
  -> 7    
mysql> select week('1998-02-20',0);    
  -> 7    
mysql> select week('1998-02-20',1);    
  -> 8    
 
year(date)    
返回date的年份(范围在1000到9999)    
mysql> select year('98-02-03');    
  -> 1998    
 
hour(time)    
返回time的小时数(范围是0到23)   
mysql> select hour('10:05:03');    
  -> 10    
 
minute(time)    
返回time的分钟数(范围是0到59)    
mysql> select minute('98-02-03 10:05:03');    
  -> 5    
 
second(time)    
返回time的秒数(范围是0到59)   
mysql> select second('10:05:03');    
  -> 3    
 
period_add(p,n)    
增加n个月到时期p并返回(p的格式yymm或yyyymm)    
mysql> select period_add(9801,2);    
  -> 199803    
 
period_diff(p1,p2)    
返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm)  
mysql> select period_diff(9802,199703);    
  -> 11    
4.前一天,后一天函数
echo "今天:",date("Y-m-d",strtotime("18 june 2008")),"
";
 
echo "昨天:",date("Y-m-d",strtotime("-1 day")), "
";
 
echo "明天:",date("Y-m-d",strtotime("+1 day")), "
";
 
echo "一周后:",date("Y-m-d",strtotime("+1 week")), "
";
 
echo "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "
";
 
echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "
";
 
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."
";
 
echo "一个月前:".date("Y-m-d",strtotime("last month"))."
";
 
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."
";
 
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."
";




++++++++++++++++++++++++++++++++++++++++++++++++++++======================================
4.OOP笔记
面向对象OOP


// 完整类结构
===========================================================================
[修饰词] class A extends B implements C,D
{
public $name;
protected $age;


private function fun()
{}
}


面向对象三大特点:
======================================================================
1.(*)封装
本类 子类 外部
public 可以 可以 可以
protected 可以 可以 不可以
private 可以 不可以 不可以


2.(*)继承
class Demo extends parent
{


}
3.(*)多态


抽象类
abstract class demo
{
public abstract function fun();
}
接口
interface A
{
const HOST = 'localhost';


public function fun();
}


class B implements A
{
public function fun(){}
}


常见的关键字
======================================================================
(*)this
(*)parent::fun()
(*)self:类内部调用静态属性,常量
final:修饰类和方法,类不能被继承,方法不能被覆盖
static:
静态属性:
(*)内部:self::属性名
(*)外部:类名::属性名
对象名::属性名
静态方法:
(*)内部:self::方法名
外部:
$obj->方法名
(*)类名::方法名
对象::方法名


// 在静态方法中不可以使用非静态方法和属性
static function fun(){
echo $this->name;
}
clone:普通赋值
$p = $obj; 引用赋值
$p = clone $obj; 普通赋值
(*)const:常量
const HOST = 'localhost';
instanceof:(类型约束)


魔术方法
(*)__set($param,$value):设置非公有属性时自动调用
(*)__get($param):获取非公有属性时自动调用
(*)__construct():实例化(new 类)自动调用的方法


__destruct():对象被删除的时候,自动调用的方法
__isset($param):判断非公有属性是否存在(isset或者empty)
__unset($param):删除一个非公有属性时
(*)__call($functionName,$arguments)):调用一个不存在的方法的时候
(*)__toString():输出一个对象的时候
__sleep():串行化的时候
__wakeup():反串行化
__clone():克隆对象的时候
__call():


魔术函数
(*)__autoload():自动加载不存在的类函数
serialize():串行化
unserialize():反串行化


类函数
get_class($obj):获取对象的类名
get_class_methods($className):获取类的方法名
get_object_vars($obj):获取对象的属性
class_exists():判断一个类是否存在
get_parent_class():获取父类名
method_exists()
property_exists()


(*)PDO对象
===============================================
1.query()
2.exec()
3.setAttribute()
4.getAttribute()


5.beginTransaction()
6.commit()
7.rollback()


8.prepare()


注意:query()和prepare()返回的是pdostatements对象


(*)PDOStatement
=================================================
1.fetch()  PDO::FETCH_ASSOC(关联数组) PDO::FETCH_OBJ
2.fetchAll()
3.execute()
4.rowCount()
5.bindValue()
6.bindParam()


异常处理 PDOException
============ =====================================
try
{
throw new Exception('错误消息');
}catch(Exception $e){
echo $e->getMessage();
}


********++++++++++++++++++++++++++++++++++++++++======================================
5.JS处理图片加载失败
a.$('img').error(function(){
            $(this).attr('src', "default.jpg(默认图片的url地址)");
         });
b.test


********++++++++++++++++++++++++++++++++++++++++======================================
6.数据表设计三范式的设计与理解
a.1NF是关系型数据库中的最基本要求,就是要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了(原子不可再分性)


b.2NF是不能有部分依赖,部分依赖的前提条件是有组合主键,就是每条记录是需要一个主键的,这个主键可以是一个单独的属性,但也可以是组合主键,就是由记录的多个属性来唯一确定一条记录,那么只要出现了组合主键就可以产生部分依赖,部分依赖是组合主键出现的前提下,剩余的属性,不完全依赖于组合主键,也是部分依赖组合主键,比如该表的N条记录中由组合主键中的一条或者几条就可以确定剩余属性的属性,那么就可以说产生部分依赖,而在实际开发中,一般不采用组合主键,而是自己增加一个字段id自增长,作为主键,这样的单属性主键是不会产生部分依赖的!


c.3NF的理解:不能出现传递依赖:就是主键,非主键1,非主键2三者之间不能出现传递依赖关系,如果出现由主键可以推出非主键1,然后由非主键1可以推出非主键2,那么主键与非主键2就产生了传递依赖关系,这就不满足三范式,通俗来讲,在一个表的,当然以一条记录为单位,主键和非主键之间可以产生父子关系,但是非主键之间是不能出现父子关系的!


********++++++++++++++++++++++++++++++++++++++++======================================
7.数据库优化
A  对数据表的设计要符合三范式
B  添加适当的索引(index) 四种: 普通索引  index
                               主键索引 primary key
                               唯一索引 unique
                               全文索引  --鸡肋
                               复合索引
C 分表技术(水分分割) (垂直分割)
D 读(select)写(update | delete | create)分离
E 存储过程
F 对mysql的配置优化 配置最大并发数 调整缓存大小
E 定时清除不需要的数据
H 没有什么不是钱解决不了的-----硬件升级
delimiter 修改mysql结束符
********++++++++++++++++++++++++++++++++++++++++======================================


8.拼接whereTP5
Db::table('think_user')
->where([
'name' => ['like','thinkphp%'],
'title' => ['like','%thinkphp'],
'id' => ['>',0],
'status'=> 1
])
->select();


9.页面传id
var id = $(this).data('id'); jQuery data属性
//接收页面js传递过来的值 嵌入html页面
var src="{:url('Model/zmkindex')}"+"?id="+id;
window.loca获取r')->insertGetId($data); 
php think build --module admin --添加admin模块

text-align:justify; 文字左右对齐

10.JS只能输入数字(连小数都不可以)


 οnkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"


11.严格区分大小写  PHP虽然是弱语言,但是上传到服务器上面服务器上面不认识 LINUX严格区分大小写


mysql 2MXA7sH3U66VKnd3


12.获取一小时内的数据
select * from 表名 where 时间字段 BETWEEN (select DATE_SUB(NOW(), INTERVAL 1 HOUR)) and NOW()
13. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
14.登陆之后 阻止浏览器后退回登录页

15.
$_SERVER["QUERY_STRING"]  获取查询 语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"]   获取 http://localhost 后面的值,包括/
$_SERVER["SCRIPT_NAME"]   获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"]      当前正在执行脚本的文件名
16.mysql 表id重新自增
① TRUNCATE TABLE tableName 
② alter table tableName AUTO
③ $sql="delete from $table_vote"; 
   mysql_query($sql, $link); 
   $sql="alter table $table_vote auto_increment=1"; 
   mysql_query($sql, $link);
④ ISAM表


如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开


始,并1为基数递增。


把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。


当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。


当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果


插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的


信息。truncate表后,表的主键就会重新从1开始。


16.传入一个条件查询出所有满足条件的值  CONCAT()函数
SELECT * FROM `tb_behavior_log` WHERE CONCAT


(`behavior_log_action`,`behavior_log_controller`,`behavior_log_id`,`behavior_log_opname`) LIKE '%index%'


17. replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有


此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重


复的数据。
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...


18.ajax 中加参数  traditional:true,


19.生成随机字符串


function getrandomstring($len,$chars=null){
if(is_null($chars)){
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
}
mt_srand(1000*(double)time());
$str = '';
for($i = 0,$lc = strlen($chars)-1;$i<$len;$i++){
$str.= $chars[mt_rand(0,$lc)];
}
return $str;
}
20.规避关键字
function strFilter($str,$preg='*'){
   $sensitivewords='党|国家';
   if(!$str || !$sensitivewords){
    return false;
   }
   $sensitivewords = explode('|',$sensitivewords);
   $newsensitivewords = array_combine($sensitivewords,array_fill(0,count($sensitivewords),$preg)); 
   $result =strtr($str,$newsensitivewords);
   return $result;
}
echo strFilter($str=调用外部的家,我爱中国共产党,我爱你中国,我爱我的国家');
21.PHP 执行系统外部命令的函数
system(),exec(),passthru()

22.接口请求方式
GET方式的直接使用 
$file_contents = file_get_content('http://localhost/openUser.php?act=get_user_list&type=json') 


POST方式得用下面的(需要开启PHP curl支持)。 
$url = 'http://localhost/openUser.php?act=get_user_list&type=json';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交
$file_contents = curl_exec ( $ch );
curl_close ( $ch );


23.password_hash 加密
//查看哈希值的相关信息
array password_get_info (string $hash)


//创建hash密码
string password_hash(string $password , integer $algo [, array $options ])


//判断hash密码是否特定选项、算法所创建
boolean password_needs_rehash (string $hash , integer $algo [, array $options ] 


boolean password_verify (string $password , string $hash)
//验证密码
$password = 'password123456';//原始密码
$hash_password = password_hash($password, PASSWORD_BCRYPT);//使用BCRYPT算法加密密码
if (password_verify($password , $hash_password)){
   echo "密码匹配";
}else{  
   echo "密码错误";
}
24.H5本地存储
 ⑴.localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
  eg.

⑵.sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。
 eg.
 
25.pattern 属性


pattern 属性规定用于验证 input 域的模式(pattern)。


模式(pattern) 是正则表达式。您可以在我们的 JavaScript 教程中学习到有关正则表达式的内容。


注释:pattern 属性适用于以下类型的 标签:text, search, url, telephone, email 以及 password。


下面的例子显示了一个只能包含三个字母的文本域(不含数字及特殊字符):


实例
Country code: 26.验证表单是否为空 
required 属性规定必须在提交之前填写输入域(不能为空)。

pattern="[A-z]{3}" title="Three letter country code" />
26.Jquery引用库
jquery-3.1.1(最新)
官网jquery压缩版引用地址:

jquery-3.0.0
官网jquery压缩版引用地址:

jquery-2.1.4
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-2.1.1
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-2.0.0
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.11.3
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.11.1
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.10.2
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.9.1
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.8.3
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.7.2
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.6.4
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.5.2
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.4.4
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.4.2
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.3.2
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

jquery-1.2.3
百度压缩版引用地址:

微软压缩版引用地址:

官网jquery压缩版引用地址:

27.表单加密
标签规定用于表单的密钥对生成器字段。


当提交表单时,私钥存储在本地,公钥发送到服务器。
28.组合表单


 

    健康信息
    身高:
    体重:
 




如果表单周围没有边框,说明您的浏览器太老了。


29. 标签定义字符(中文注音或字符)的解释或发音。
30.JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。
在 JavaScript 中,对象是拥有属性和方法的数据
31.JS中 test() 方法检索字符串中的指定值。返回值是 true 或 false。exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
32.location.href 属性返回当前页面的 URL  location.pathname 属性返回 URL 的路径名。
window.navigator 对象包含有关访问者浏览器的信息。
33.setTimeout()
未来的某时执行代码
clearTimeout()
取消setTimeout()
34.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| $(this)                   |    当前 HTML 元素                                     |
|---------------------------|-------------------------------------------------------|                            
| $("p")                    |    所有

元素                   |
|---------------------------|-------------------------------------------------------|
| $("p.intro")              |    所有 class="intro" 的

元素                     |
|---------------------------|-------------------------------------------------------|
| $(".intro")               |    所有 class="intro" 的元素                          |
|---------------------------|-------------------------------------------------------|
| $("#intro") |id="intro" 的元素                                   |
| $("ul li:first") |每个

    的第一个
  • 元素                        |
    | $("[href$='.jpg']") |所有带有以 ".jpg" 结尾的属性值的 href 属性          |
    | $("div#intro .head") |id="intro" 的
    元素中的所有 class="head" 的元素|
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    35.
    ========================================================================================
    ||$(document).ready(function)     || 将函数绑定到文档的就绪事件(当文档完成加载时)    ||
    ========================================================================================
    ||$(selector).dblclick(function)  || 触发或将函数绑定到被选元素的双击事件   ||
    ========================================================================================
    36.
    $(selector).hide(speed,callback);    
    可选的 speed 参数规定隐藏/显示的速度,可以取以下值:"slow"、"fast" 或毫秒。
    可选的 callback 参数是隐藏或显示完成后所执行的函数名称。
    37.
    通过 jQuery,您可以使用 toggle() 方法来切换 hide() 和 show() 方法。(可用于实现权限树)
    eg.





    这是一个段落。


    这是另一个段落。

    ssss
    38. 
    ⑴.Jquery 淡入淡出
    jQuery Fading 方法
    通过 jQuery,您可以实现元素的淡入淡出效果。


    jQuery 拥有下面四种 fade 方法:


    a.fadeIn()        淡入已隐藏的元素。  $(selector).fadeIn(speed,callback);
    b.fadeOut()     淡出可见元素。      $(selector).fadeOut(speed,callback);
    c.fadeToggle() 
    如果元素已淡出,则 fadeToggle() 会向元素添加淡入效果。
    如果元素已淡入,则 fadeToggle() 会向元素添加淡出效果。
    d.fadeTo() 方法允许渐变为给定的不透明度(值介于 0 与 1 之间)。 $(selector).fadeTo(speed,opacity,callback); 0为完全隐藏
    ⑵.jQuery 效果 - 滑动  (可用来实现权限树效果)
    39.jQuery 动画 - animate() 方法
    40.jQuery remove() 方法删除被选元素<及其>子元素。  jQuery empty() 方法删除被选元素<的>子元素。
    41.微信昵称有表情  urldecode php
    42. levenshtein() 比较出两个字符串的不同程度
     eg.
    $str1 = "carrot";
    $str2 = "carrrott";
    echo levenshtein($str1, $str2); //Outputs 2
    43.get_defined_vars()  这个函数返回一个多维数组,里面包含了所有定义过的变量。
    44.ignore_user_abort() 这个函数用来拒绝浏览器端用户终止执行脚本的请求。正常情况下客户端的退出会导致服务器端脚本停止运行。 
    eg.
    ignore_user_abort();
    ?>
    45.highlight_string() 当你想把PHP代码显示到页面上时,highlight_string()函数就会显得非常有用。这个函数会把你提供的PHP代码用内置的PHP语 法突出显示定义的颜色高亮显示。这个函数有两个参数,第一个参数是一个字符串,表示这个字符串需要被突出显示。第二个参数如果设置成TRUE,这个函数就 会把高亮后的代码当成返回值返回。
    highlight_string(' ');
    ?>
    46.highlight_file()  这是一个非常有用的PHP函数,它能返回指定的PHP文件,并按照语法语义用高亮颜色突出显示文件内容。其中的突出显示的代码都是用HTML标记处理过的。
    highlight_file("php_script.php");
    ?>
    47.get_browser 这个函数会读取browscap.ini文件,返回浏览器兼容信息。
    echo $_SERVER['HTTP_USER_AGENT'];
    $browser = get_browser();
    print_r($browser);
    ?>
    48.memory_get_usage(),memory_get_peak_usage(),getrusage()
    这些函数用来获取内存和CPU使用情况,memory_get_usage()函数返回内存使用 量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况,在调试PHP代码性能时,这些函 数会给你提供一些有用信息。但有一点请注意,在这些函数中Window上无效。
    echo "Initial: ".memory_get_usage()." bytes \n";
    echo "Peak: ".memory_get_peak_usage()." bytes \n";
    $data = getrusage();
    echo "User time: ".
    ($data['ru_utime.tv_sec'] +
    $data['ru_utime.tv_usec'] / 1000000);
    echo "System time: ".
    ($data['ru_stime.tv_sec'] +
    $data['ru_stime.tv_usec'] / 1000000);


    ?>
    49.gzcompress(), gzuncompress()
    这两个函数用来压缩和解压字符串数据。它们的压缩率能达到50% 左右。另外的函数 gzencode() 和 gzdecode() 也能达到类似结果,但使用了不同的压缩算法。https://yq.aliyun.com/articles/81501?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&2017517&utm_content=m_21209
    50.tp5生成模块 php think build --module demo
    51.二维码API http://www.topscan.com/pingtai
    52.get_declared_classes(),返回由已定义类的名字所组成数组。
    53.阿里云apache配置https,阿里云安全策略需要开启443端口访问,免费ssl证书->配置完成之后,apache开启域名自动跳转
       二级域名->cert目录下建立子目录放置子域名ssl证书->复制ssl配置->设置servername 为子域名并设置端口为443
       多个子域名 同理  https://segmentfault.com/a/1190000009220479
    54.当只要一行数据时使用 LIMIT 1。MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
    55.把IP地址存成 UNSIGNED INT 便于后期查询
    56.动态获取URL
    $protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
    $url = "$protocol"."$_SERVER[HTTP_HOST]"."$_SERVER[REQUEST_URI]"
    57.微信分享图片size大于300*300
    58. 过滤提交的数据
    function post_input($data)
    {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
    58.进行select 查询时使其区分大小写加关键字binary ->比如:select * from usertable where binary id = 'AbC';
    59. 
    #测试网址:     http://localhost/blog/testurl.php?id=5


    //获取域名或主机地址 
    echo $_SERVER['HTTP_HOST']."
    "; #localhost


    //获取网页地址 
    echo $_SERVER['PHP_SELF']."
    "; #/blog/testurl.php


    //获取网址参数 
    echo $_SERVER["QUERY_STRING"]."
    "; #id=5


    //获取用户代理 
    echo $_SERVER['HTTP_REFERER']."
    "; 


    //获取完整的url
    echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    #http://localhost/blog/testurl.php?id=5


    //包含端口号的完整url
    echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
    #http://localhost:80/blog/testurl.php?id=5


    //只取路径
    $url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; 
    echo dirname($url);
    #http://localhost/blog


    60.随机查询5条数据
    SELECT * FROM `tb_img` 
    WHERE img_id >= (SELECT floor(RAND() * (SELECT MAX(img_id) FROM `tb_img`)))  
    ORDER BY img_id LIMIT 5;


    61.为图片或DIV增加灰度
    .brightness {
        -webkit-filter: brightness(0.30);
        filter: brightness(0.30);
    }


    .contrast {
        -webkit-filter: contrast(180%);
        filter: contrast(180%);
    }

    62.str_pad(param1, param2, param3, param4) param1是要改变的值,param2是要想定param1位数,param3是如果param1位数不够param2位要补充的数,param4是在左边补还是右边补还是左右两侧

    62.str_pad(param1, param2, param3, param4) param1是要改变的值,param2是要想定param1位数,param3是如果param1位数不够param2位要补充的数,param4是在左边补还是右边补还是左右两侧
    63.SQL统计当前月有多少天
    SELECT  TIMESTAMPDIFF(day,'2018-02-05',(DATE_add('2018-02-05',INTERVAL 1 month))) as daycount

    63.内网穿透工具 https://www.ngrok.cc/login.html

    64. var close;
    close = layer.load(2);
    close = layer.load(2, {content:'loading...',time: 10*1000,success: function(layero){
        layero.find('.layui-layer-content').css('left', '160px');
        layero.find('.layui-layer-loading2').css('left', '180px');
        }})
    setTimeout('loading()',800);
    function loading(){
    layer.close(close);
    layer.msg('Hello World');

    }

    65. 技术图谱

    https://github.com/xingshaocheng/architect-awesome/blob/master/README.md

    66. curl请求远程地址

        $url = 'url';  
        $timeout = 60;  
        $data = array();  
        $header = array();  
        $ch = curl_init();    
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查    
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在    
        curl_setopt($ch, CURLOPT_URL, $url);    
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);    
        curl_setopt($ch, CURLOPT_POST, true);    
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));    
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);   //CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数  
         
        $response = curl_exec($ch);   
         
        if($error=curl_error($ch)){    
            die($error);    
        }    
        curl_close($ch);

        var_dump($response);

    67.  加密解密

            $str = '终风且暴,顾我则笑。谑浪笑敖,中心是悼。终风且霾,惠然肯来。莫往莫来,悠悠我思。';

    $mi = '123456';
    $pwd = base64_encode($str.$mi);
    // echo $pwd;
    $ni = base64_decode($pwd);

    echo str_replace($mi,"",$ni);

    68. 鼠标选中文字变色CSS

     ::-moz-selection{background:#93C; color:#FCF;} 
     ::selection {background:#93C; color:#FCF;} 

你可能感兴趣的:(PHP)