1.用 PHP 获取当前时间并打印,打印格式:2006-5-10 22:21:21
date_default_timezone_set('PRC');
echo date('Y-n-d H:i:s'); n不带前导0
echo date('Y-m-d H:i:s'); 默认都是带前导0的。
12小时制是小写h,24小时制是大写h
改时区的两种方法
① php.ini找到date.time.row=PRC 全改时区为中华人民共和国时区
② date_default_timezone_set('PRC');改当前页面的时区
2.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?
字符串转数组
1)$str='www.baidu.com';
print_r(str_split($str));//str_split字符串分割
explode()
数组转字符串
2)$arr=array("aaa","bbb","ccc");
print_r(implode('',$arr)); //join()
字符串截取
substr($str,1,10);
mb_substr mb_strcut
字符串替换
4)$bodytag = str_replace("%body%", "black", "");
preg_replace();//正则替换
例如:Linux和php替换成java
$str="linux is very much php";
echo preg_replace('/linux|php/','java',$str);
字符串查找
strpos
strrpos
preg_match 匹配
preg_match_all
例如
截取目录的文件部分
$str="/web/a/b/index.html";
//获取斜线的位置
$pos=strrpos($str,'/');//strrpos获取最后一个斜线
//echo $pos;//8
echo substr($str,$pos+1);
截取目录
$pos=strrpos($str,'/');
echo substr($str,0,$pos);
使用basename,dirname截取目录
basename 截取目录部分
dirname 截取目录中的文件部分
$str="/web/a/b/index.html";
echo dirname($str);
echo basename($str);
案例
查看所有的p*p
$str="pap is pbp and pcp";
preg_match_all('p.p',$str,$ms);
echo $ms;
3,解释一下 PHP 的类中: public, protect,private,interface,abstract,final,static 的含义
public,private,protected修饰类的属性和方法,体现面向对象三大特性的封装特性;封装是指安全级别。
public 共有的 本类 子类 类的外面
protected 受保护的 本类,子类
private 私有的 子类
interface 接口
abstract 抽象类
抽象类是什么?
含有任意一个抽象方法的类叫抽象类
没有方法体的方法叫抽象方法【没有大括号】如function a()
接口中只含有抽象方法。
final和static是两个关键字
final 最后的类和方法
final修饰类和方法,不能修饰属性;代表类是最后一个类,不能有子类;
static 静态方法和属性;属于类,但是并不依附于对象而生成。如果一个类有static,直接object::方法名;不用实例化,因为不属于对象。
static修饰属性和方法
4, 写出下列代码的数据结果
$date='08/26/2003'; 2003/08/26
$date='08/26/2003';
echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3/$1/$2’,$date);
5,从表 login 中选出 name 字段包含 admin 的前 10 条结果所有信息的 sql 语句
select * from login where name like '%admin%' limit 10 order by id;
6,解释:左连接,右连接,内连接,索引
左连接:left join,以左表为主导,右表匹配显示。不匹配,用null补全。多表查询
右连接:right join,以右表为主导,左表匹配显示。
内连接:inner join,与where条件相同,等于普通多表查询。匹配2个表内,条件相等的值。
索引:index,像词典中的目录一样,目的是,查找数据更快。
分为:主键索引,唯一索引,普通索引。
主键索引:一个表一个主键索引。用于id
唯一索引:每一列都可以有唯一索引。不允许有相同值。如id
索引:每一列都可以有普通索引
案例
发过帖子的人
select user.name,post.info from user,post where user.id=post.user_id 普通多表查询
select user.name,post.info from user inner join post on user.id=post.user_id 内联查询
左连接 左表都查出来 【所有人都发过什么帖子】
select user.name,post.info from user left join post on user.id=post.user_id
右连接 右表都查出来
select user.name,post.info from post right join user on user.id=post.user_id
desc select * from user where id=5/G 检索一行
desc select * from user where user5='user5'/G 检索5行,没有加索引
添加索引
alert table user add index in_username(username);//给where条件用的列加索引
删除索引
alert table user drop index in_username; 影响又成5行
7,简述论坛中无限分类的实现原理。
1.设计无限分类表
表中有4列 (递归查询)
id ,name,pid,path
2.好处
可以快速找到父分类,子分类,祖先分类。
8,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
pathinfo:对应目录
path_url:对应url参数
$ref='http://localhost/a/b/index.php'; (文件名中没有?参数)【使用pathinfo】
$arr=pathinfo($ref);
echo "
";"print_r($arr);
echo "
运行结果:
array(
[dirname]=>'http://localhost/a/b
[basename]=>index.php
[extension]=>php
[filename]=>index
)
正则比字符串慢
$ref='http://localhost/a/b/index.php?id=10';
$arr=path_url($ref);
echo "
""print_r($arr);
echo "
运行结果:
array(
[scheme]=>http
[host]=>localhost
[path]=>/a/b/index.php
[query]=> id=10
)
正确做法
$ref='http://localhost/a/b/index.php?id=10';(文件名中有?参数)【先使用path_url,再使用pathinfo】
$arr=path_url($ref);
$path=$arr[path];//取出目录
$arr2=pathinfo($path);
echo "
";";print_r($arr2);
echo "
9,解释:MVC
m:model 模型层 数据层 对数据库进行增删改
v:view 视图层
c:controller 控制层 逻辑层
最大优点:实现视图层和逻辑层的分离
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
10,描述一下大流量高并发量网站的解决方案
1.dns负载均衡【分流到不同机房】
2.负载均衡服务器
3.集群服务器
4.web服务器采用nginx
5.静态缓存(tp,smarty)
6.文件数据缓存(tp)
7.内存数据缓存(memcache,redis)
8.给数据库加索引
9.磁盘阵列技术
********************************************************************
集群:防止挂掉,进行替换
买服务器:阿里云,自己公司
web服务器,apache同时在线用户是4000人。解决办法,加服务器。
********************************************************************
高并发是由大流量带来的
高并发是指同一时间打开同一个页面,同时在线的状态,针对视频网站。
大流量:访问量,访问次数。
*******************************************************
Mysql 数据库优化
1.sql语句(索引优化,语句定位:1.慢查询 2. desc或explain去解析sql语句,分析索引使用
情况以及扫描行数)
2.表优化(表引擎使用:myisam 或 innodb)
3.数据库优化(分库分表或分区)
4.服务器优化(四种字符集,主从 mysql)
get与post区别
get安全性低,传播速度快,有数据大小限制,1024字节
post安全性高,传播速度慢,没有数据限制。
如何进行防sql注入
sql注入是借助sql语句入侵服务器
1.表单尽量用post提交,表单判断用get。
2.$_SERVER[HTTP_REFERER]判断提交者的源头。如果是本服务器的ip,则提交;不是,则停止提交。
3.开启addslashes,防止sql语句的破坏性。php是自动开启的。
4.密码一定要设置md5加密
5.服务器本身的安全(web+mysql)
案例
a.php是表单,提交到b.php,在b.php进行源头判断。
b.php
$path=$_SERVER[HTTP_REFERER];
$arr=parse_url($path);
echo "
";";print_r($arr);
echo "
运行结果
array(
[scheme]=>http
[host]=>localhost
[path]=>/test/index.php
)
判断host的值