php笔记

php数组是由哈希表+链表实现,准确来说,是由哈希表+双向链表实现

php数据类型
标量:整型,浮点型,字符串,布尔
复合:数组,对象
复杂:资源

print是语言结构,echo是函数,可通过function_exists(‘print’)
echo可以打印多个简单标量参数,print只可以打印单个简单标量参数,sprintf只返回不输出,print_r可以打印单个参数
echo false;返回空
array,eval,list是语言结构,each是函数

gettype(); is_string();对一个布尔值进行输出

数据类型强转:1+1+“3+4+5”=1+1+3=5

chr():把ascii转字符
ord():把字符转ascii

数组当有些有下标,有些没有时,会从前面的最大值继续排序下去

a [ b a r ] = ′ h e l l o ′ ; a[bar]='hello'; a[bar]=hello;a[‘bar’]=‘hello’;

位移

:向右移位,即除以2的多少次方
<<:向左移位,即乘以2的多少次方

单引号只转义单引号和反斜线,尽量使用单引号,执行速率较快。

static:静态变量,同一个函数被重复调用的时候,里面的static变量会被累计。

heredoc与newdoc(newdoc类似单引号)

a ∣ ∣ a|| ab=5; 优先级或开关

implode(’’,array( a , a, a,b)),explode(’,’,$str)

cron管理系统日常任务的调度(crontab)
分 时 日 月 年 周 执行的脚本

df与du,cp,dmsg(启动信息),:q!,ps aft|grep 脚本,netstat -anp |grep 9501,pwd,tail -f,

require比include执行速率高,require比require_once执行速率高

+:数组数据合并和变量数据相加

date(‘Y-m/n-d/j H:i:s’)

字符串转数组:str_split( s t r , str, str,len)按长度分割,explode(),preg_split(’/-|_/’, s t r ) 按 正 则 分 割 数 组 转 字 符 串 : j o i n ( ) , i m p l o d e ( ) 字 符 串 截 取 : s u b s t r ( ) , m b s u b s t r ( ) 字 符 串 替 换 : s t r r e p l a c e ( str)按正则分割 数组转字符串:join(),implode() 字符串截取:substr(),mb_substr() 字符串替换:str_replace( str)join(),implode():substr(),mbsubstr()strreplace(target, m o u n t , mount, mount,str),preg_replace( p a t t e r n , pattern, pattern,mount,$str)
字符串查找:preg_match(),strpos(),strrpos()
preg_match(),strpos(),strrpos()

array_merge:key相同时,后面会覆盖前面的,整数下标则会重新排;+:key相同时,前面会覆盖后面的,整数下标则会重新排。

继承,封装,多态
protect:被保护的,类内部,子类,父类可以访问
public:公有,类内部外部子类都可以访问
private:私有的,本类内部可以访问
final:final方法子类不能覆盖该方法,final类不能被继承
interface:接口(只含抽象方法的类就是接口),不能被实例化,一个类可以继承多个接口,而一个类只能继承一个类,trait
abstract:抽象类或抽象方法
final:最终版本的类或方法
static:静态属性或方法,同一个函数被重复调用的时候,里面的static变量会被累计。
trait:不能被实例化
static:一般用来访问类中的静态变量或方法
$this:指向当前对象,写在类中的非静态方法中
self:指向当前类,一般用来访问类中的静态变量或方法

子类中的private,protected变量,父类中的protected变量,可通过__set,__get设置,访问,但父类中的private则无法访问到,只能在本类中访问。
没有魔术方法,在实例中不能通过 $obj->属性名(或方法名) 来调用 protected类型的方法或属性; 在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法 。

$this 是指向当前对象的指针
self 是指向当前类的指针,一般用来指向类本身的静态变量
parent 是指向父类的指针,一般用来调用父类的构造函数

向后引用
$str="08/12/2008";
$ptn='/(\d+)\/(\d+)\/(\d+)/';
$rep='$3-$2-$1';
preg_replace($ptn,$rep,$str);

left join:以左表为主导,先输出左表的所有数据,右边的匹配输出,不匹配为null
right join:以右表为主导,先输出右表的所有数据,左表的匹配输出,不匹配为null
inner join同时符合左右表条件才会输出
索引:主键,唯一,普通,联合

无限分类表设计
必须有id,pid(pid为父类的id,没有父类则为0)

parse_url得到path,query,scheme,host
pathinfo(path)得到dirname,basename,extension
basename(path)

MVC
M模型
V视图
C控制器

大流量高并发
防盗链(HTTP_REFERER检查源文件),跨站点访问,静态缓存,cdn加速,控制大文件下载
服务器负载均衡,分流
页面静态化
数据缓存(memcache,redis),减少数据库访问
表索引

mysql
主从复制,读写分离,表分区,表引擎,索引

安全的用户登陆系统
验证码,ssl证书

session保存在服务器端,cookie主要保存在客户端,session的传送主要依托cookie,也可以修改配置通过url传输,session可以入库,满足分布式架构或负载均衡架构的状态标识。

char定长,查询速度较快,varchar可变

myisam的增删改查速度要比innodb快,myisam不支持事务和行锁,innodb支持灾难性恢复

empty:0,false,null,‘’,‘0’,undefined,array()

select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student group by class;

imagecreatefromjpeg()

功能需求分析,数据库设计,架构设计,sql语句优化

引用与unset(unset只是删除了引用关系)

php是超文本预处理器,基于服务端来创建动态网站的脚本

array_multisort();

PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

如何防止form表单重复提交?
1.从前端页面禁掉按钮,2.使用标志,确定是否已经提交

多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育". 而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

事务由一个或多个sql语句组成一个整体,如果所有的语句执行成功那么修改将会全部生效,如一条sql语句将销量+1,下一条再+1,倘若第二条失败,那么销量将撤销第一条sql语句的+1操作,只有在该事务中所有的语句都执行成功才会将修改加入到数据库中。事务具体四大特性,也就是经常说的ACID ,原子性,一致性,隔离性,持久性。读未提交(脏读,幻读,不可重复读),读已提交(不可重复读,幻读),可重复读(幻读),串行化

Ajax 技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。

redis本质上是一个key-value类型的内存数据库,定期通过异步操作把数据库数据flush到硬盘上进行保存(rdb快照,aof日志),每秒可以处理超过10万次读写操作。保存多种数据类型(string,list,hash,set);支持事务(MULTI/EXEC/DISCARD/WATCH);丰富的特性。

WATCH mykey

val = GET mykey

val = val + 1

MULTI

SET mykey $val

EXEC

redis速度比memcache快,而且redis可以持久化数据,memcache在断电后会挂掉。

redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略通过maxmemory-policy设置策略:
如果设定了maxmemory,使用redis的时候,redis的内存使用量不能超过设定的值,一旦redis的内存使用量达到了最大值,redis将会尝试按照选择的eviction policy(回收策略)移除相应的keys

如果redis不能根据回收策略移除keys,或者回收策略设置成noeviction,那么redis将对需要写操作的命令返回错误信息,如SET,LPUSH操作,对GET这样的只读操作会继续响应。

在redis.conf中给出了一个警告信息,如果一个设置了maxmemory的实例连接了从redis,那么预留给redis使用的内存除了redis实例本身占用的内存外还要加上用于主从复制的输出缓冲区大小(the output buffers need to feed the slaves),这样,才不会触发移除keys的死循环,因为当内存达到最大内存限制后,会根据eviction policy移除相应的keys,这时,从redis也会同步移除keys操作,最终所有数据都被清空。

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
redis 确定驱逐某个键值对后,会删除这个数据并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)

请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。
setex key seconds values

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。

MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比如memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

如何通过javascript判断一个窗口是否已经被屏蔽

var a=window.open('xxx', '_blank'); // 打开新窗口
console.log(a);
var timer = setTimeout(function() { // 假设1秒内窗口还没能打开即窗口被屏蔽
alert('被屏蔽了!');
}, 1000);

在这里插入图片描述
在这里插入图片描述

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

php代码安全

  1. 屏蔽错误,error_reporting()
  2. 过滤用户提交参数
  3. 可以设置统一入口,只允许用户通过指定入口访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值