(2018-09-10 10:04)
标签:
api加密
api安全校验
分类:
php
职责单一化,各司其职,后端只负责Api接口编写提供给各种不同类型的客户端去调用,但是客户端和服务器端调用是要有权限限制的,不能任何一个客户端都可以随便调用我们的接口(这里面的缘由相信大家都知道吧,当然我就默认你们都知道),再者我们都知道http是明文传输,被抓包可可以修改相应参数,当然如果你使用了https就相对安全了不少!
举一个很简单的栗子,微信的接口大家都调用过吧,当然肯定有没调用过的,没关系,没有调用过的人也是能明白我接下来要讲的事情:微信会有一个sign的签名,就是思梦php上面所说的权限认证机制了
下面思梦php给大家讲的只是其中的原理,我们可以根据所讲知识继续扩展,完善成为你自己的一套程序。
主要使用的工具:thinkphp5/PHP
(1)首先客户端和提供服务的服务器加
(2018-08-16 14:35)
分类:
php
数据结构?是一个又爱又恨的存在,不喜欢它的人认为枯燥,乏味,头大。但是喜欢它的人就恰恰相反,小梦也是属于不喜欢之列。如果你把编程看做是一项练就功夫的事情,那么数据结构就是内功,相信很多小伙伴内心多多少少都有一个武侠梦
单链表官方定义:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)
+
指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。(这不是我说的,是官方说的,但是估计你们看了想骂人)
分类:
php
1、问题一关于弱类型
$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2)) {
echo '\\'' . $str1 . '\\' contains \\'' . $str2 . '\\'';
} else {
echo '\\'' . $str1 . '\\' does not contain \\'' . $str2 .
'\\'';
}
正确运行的输出结果:
'yabadabadoo' does not contain 'yaba'
strpos是返回字符串str2在str1的位置,没有找到则返回false然而实际上这次返回了0而在if语句中0也被当作false,所以,我们需要对false做类型判断,正确的代码如下:
if (strpos($str1,$str2) !== false) {
} else {
}
需要注意的是我们使用了!==,在php 和 JS中= !相对== 更为严格需要要求数据类型的一致。
2、下面的输出结果会是怎样?
$x = 5;
echo $x;
echo '
';
echo $x+++$x++;
echo '
';
echo '
';
echo $x---$x--;
echo '
';
实际运行结果是
5
(2018-04-19 13:16)
分类:
php
1、fopen() fwrite() fclose() fiel_put_contents
1)fopen(\$path,'xx') 打开一个文件 xx = r 是以只读的方式打开并将指针指向头部 xx = r+
读写方式打开 xx = w 写入方式,并清空文件内容,指针执行头部,不存在则创建 xx = w+ 读写方式,后面同上 xx = a
写入方式并将指针执行头部,但是写入会覆盖之前存在内容,如果不存在则创建 xx = a+ 读写方式,其他同上
2)fwrite(\$handle,content) 向文件中写入文字
3)flcose(\$path) 关闭文件
4)file_put_contents('file',content) 向文件中写入内容
应用场景:做文件的缓存以及做网站的日志记录等
2、fread() feof() fgets() fgetss() fgetc()
file_get_contents() file()
1)fread(\$handle,\$size) 从一个文件中获取指定字节大写的内容
2)feof(\$handle) 判断指针是否已经到达尾部
3)fgets() 从文件中读取一行
4)fgetss() 读取一行并过来html4)fgetc() 从文件
中读取一个字符
5)file_get_contents() 从一个文件句柄里面获取内容6)file() 同上
应用场景:并发不是很高的情况下可以配置文件锁的机制
(2018-04-19 13:15)
分类:
php
1、ob_start()
开启文件缓存
2、ob_get_contents()
得到缓存中的内存
3、ob_get_length()
得到缓冲区的长度
4、ob_flush()
输出缓冲区的内容,如果你想获取缓冲区的内容要在这个函数之前使用ob_get_contents(),不然数据将会被清空
5、ob_end_flush()
输出缓冲区并关闭缓存
6、ob_end_clean()
清除缓存并关闭输出缓冲,如果这个再ob_start()开启之后不执行这个函数时候,那么将一直写入缓冲区
下面我们来写一个页面静态化示例来练练手,本案例是依托thinkphp框架进行讲解,其他框架小伙伴们自行脑补!
1、首先有四个函数
ob_start() 开启缓存
ob_get_contents() 获取缓冲区的内容
ob_clean() 删除缓冲区的内容
ob_get_clean() 先获取然后再删除缓冲区内容
2、然后我们定义一个函数来生成静态文件
public function createCache(){
\$action = ACTION_NAME;
\$c_name = CONTROLLER_NAME;
\$dir = './Cache/'.\
(2018-04-13 13:10)
标签:
php高效学习
分类:
php
1、循环数组有哪几种方式
1)foreach(能够循环关联和索引数组以及对象)
2)for(只能循环索引数组)
3)list和each配合使用循环数组
$arr = ['a'=>1,'b'=>2];
while(list($key,$val) = each($arr)){
echo $key$,val
}
2、is_array(),is_bool,is_int(),is_integer(),is_numeric(),is_string(),is_object(),is_null,is_file,is_dir,is_readable,is_uploaded_file,is_writeable,
1)is_array() 检查一个变量是否是数组
2)is_file() 检查是否是一个文件
3)is_dir()检查是否是一个目录
4)is_uploaded_file() 检查是否是通过http post过来
5)is_readable() 检查是否可读
3、count()
1)计算数组的长度
4、array_sum()、array_product()
1)array_sum() 计算一个数组的和
2)array_product() 计算数组的乘积
5、array_count_values()
1)计算数组中的值出现次数的和
6、in_array() array_key_exists() array_search() key_exists()
1)in_array('xxx',$arr) 判断某个字符是否
(2018-04-02 09:01)
标签:
php
分类:
php
1、addslashes
addslasehes($string) 对字符串进行编译转义
应用场景:能防止sql的注入(当然并不完全是可以,我们可以使用pdo进行预处理然后方式sql的注入,安全不能只靠一种方式防止事情的发生)
2、echo ,print,printf,number_format
1)echo是语言结构体,不是函数,没有返回值,能输出多个值
for example:echo $a,$b
应用场景:输出一些字符串
2)print是一个函数,它只有一个参数,有返回值,不能输出对象和数组
应用场景:输出一些参数值
3)print_r()是一个函数,有返回值,能输出对象和数组
应用场景:打印一些数组或者对象
4)var_dump是一个函数,有返回值
应用场景:能够返回数据的类型,打印一切值
5)printf()是一个函数,有返回值,格式化输出
应用场景:微信的api接口的参数拼接
for example:
$str = 'string';$num=1;
sprintf('$s is string,$u is int',$str,$num);
还能格式化浮点数,是ceil原则,四舍五入
sprintf('%.2f',23.453) 23
(2018-03-27 09:02)
标签:
es6语法
解构赋值
很多人可能和我一样,第一次看到这个词的时候摸不着头脑。但是冷静再看一遍好像明白了,“把数据结构分解开分别进行赋值”。
我们先看几个小例子
let [a,b,c] = [1,2,3]; console.log(a,b,c);//1 2 3 let {name,age} = {name:'jack',age:'18'}; console.log(name,age);//jack 18 let {t
(2018-03-18 16:57)
分类:
php
PHP垃圾回收机制
1、每一个变量定义时都保存在一个叫zval的容器里面,这里面包含了数量的类型和和值,还包含了一个refcount(理解为存在几个变量个数)和is_ref(理解为是否为引用变量)两个额外信息,当变量被引用一次refcount就会+1,当你unset一下之后这个值就会减1直到为0就会从内存中删除
2、定义一个变量的时候并不是每次都会扩大预定于值,因为PHP会在内存中先预占用一个空间,等你声明变量的时候就会分配给你,但是当你超出这个预占用空间之后,那么它就会增加空间,但是等你删除变量时候这个空间容量不会立即消失
3、变量的引用不会单独的多增加内存占用,它会指向zval结构体,只是refcount+1
4、简单说说,PHP的变量依赖于一个内部实现 symbol_table 符号表,而符号表的基础实现是 HashTable
,也就是和PHP数组的基础实现是一致的。真是因为符号表的存在,让我们可以使用global标记全局变量,用如compact等函数直接从当前符号表中拉出变量出来。
那在谈谈题主说的unset($a)会不会马上释放空间,答案是否定的,unset支持从符号表中把名字为a的这个元素删掉了(只是标记这块空间又可用了,而不是释放空
(2018-02-24 22:05)
标签:
365
分类:
杂记
假期结束了,应该很多小伙伴都已经开工了,新的一年你有什么计划,下面小编整理了一份治愈胡思乱想的清单,希望能帮你在胡思乱想的这条道路上一去不回头!!!