php面试题


发布时间:2020-05-19 23:28:10 | 来源: | 编辑整理:超管

1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
$a = date("Y-m-d H:i:s", strtotime("-1 day"));   print_r($a);
2、echo(),print(),print_r()的区别(3分)
echo 和print不是一个函数,是一个语言结构   int print(string $arg), 只有一个参数   echo arg1,arg1,arg2; 可以输出多个参数,返回void  
echo和print只能打印出string,不能打印出结构   print_r能打印出结构   比如     $arr = array("key"=>"value");   print_r($arr);
3、能够使HTML和PHP分离开使用的模板(1分)
smarty,phplib
4、使用哪些工具进行版本控制?(1分)
svn,git,cvs
5、如何实现字符串翻转?(3分)
英文:   strrev($a)   中文或其他文字:   中文:GB2312, 代码是使用GB2312编码  
---------------------------------------------------------------
6、优化MYSQL数据库的方法。(4分,多写多得)

语句方面:
1、使用索引,增加查询效率
2、优化查询语句,提高索引命中率

数据库涉及方面:
1、构造分库分表,提高数据库的存储和扩展能力
2、根据需要使用不同的存储引擎

7、PHP的意思(送1分)
超级文本预处理语言
Hypertext PreProcessor

8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
CURRENT_TIMESTAMP()   DATE_FORMAT()   select DATE_FORMAT("2011-11-21 10:10:10", "%Y-%m-%d");
9、实现中文字串截取无乱码的方法。(3分)
mb_substr($str, 1, 1, "GB2312");

------------------------

10、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)
svn
git

11、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)
smarty

12、请简单阐述您最得意的开发之作(4分)
XXX

13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
1、有效使用缓存,增加缓存命中率
2、使用负载均衡
3、对静态文件使用CDN进行存储和加速
4、想法减少数据库的使用
5、查看出现统计的瓶颈在哪里

---------------------

14、用PHP写出显示客户端IP与服务器IP的代码1分)
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]

15、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)

在失败的时候:
include产生一个warning,而require产生直接产生错误中断
require在运行前载入
include在运行时载入
require_once
include_once

16、如何修改SESSION的生存时间(1分).
session_set_cookie_params 

17、有一个网页地址, 比如PHP研究室主页: http://www.phpv.net/index.html,如何得到它的内容?($1分)
file_get_contents
curl

18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
未授权
header("HTTP/1.0 404 Not Found");
fast CGI中:
header("Status: 404 Not Found");

19、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
成对出现
$a = <
good test
EOD;

20、谈谈asp,php,jsp的优缺点(1分)
asp是需要依赖IIS,是微软开发的语言
php和jsp可以依赖apache或者 nginx等其他服务器

21、谈谈对mvc的认识(1分)
model : 数据结构层
view :展现
control : 接收和判断处理输入

-----------

22、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
select top 10 id,username from members order by posts desc

23、请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
&表示传引用
函数中参数传引用会将参数进行改变
一般在输出参数有多个的时候可以考虑使用引用

24. 在PHP中error_reporting这个函数有什么作用? (1分)
设定error的展示级别

25. 请写一个函数验证电子邮件的格式是否正确 (2分)
$str = "jianfeng@126.com";   regex="([a?z0?9\.?]+)@([\da?z\.?]+)\.([a?z\.]2,6)regex="([a?z0?9\.?]+)@([\da?z\.?]+)\.([a?z\.]2,6)" ; //正则   return preg_match(regex,regex,str)
26. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)
$argc --获取参数数量
$argv --获取参数列表

27.如何修改SESSION的生存时间. (1分)
session_set_cookie_params

------------

28、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)
alert()
confirm()
promopt()
focus()

29、JS的转向函数是?怎么引入一个外部JS文件?(2分)
window.location.href="#"

30、foo()和@foo()之间有什么区别?(1分)
@代表所有warning忽略

31、如何声明一个名为”myclass”的没有方法和属性的类? (1分)
class myclass
{
}

32、如何实例化一个名为”myclass”的对象?(1分)
$myclass = new myclass();

33、你如何访问和设置一个类的属性? (2分)
name;   print_r($n);

34、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。 
---------------
35、GD库是做什么用的? (1分)
动态的开放的图片处理库

36、指出一些在PHP输入一段HTML代码的办法。(1分)
echo "{html}"
echo <
{html}
EOD;

37、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分) c
(a) fget() (b) file_open() (c) fopen() (d) open_file()

38、下面哪个选项没有将 john 添加到users 数组中? (1分) b
(a) $users[] = ‘john’;   (b) array_add($users,’john’);   (c) array_push($users,‘john’);   (d) $users ||= ‘john’;

39、下面的程序会输入是否?(1分) 10
$num = 10;     function multiply(){     num=num=num * 10;     }     multiply();     echo $num;     ?>

40、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)

表名 UserName Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15

请根据上面的题目完成代码:
 $mysql_db=mysql_connect("local","root","pass");     @mysql_select_db("DB",$mysql_db);      $sql = sprintf("select * from %s where UserName = '%s'",            "表名",            "张三");      values=mysqlquery(values=mysqlquery(sql);      while(item=mysqlfetchqueryarray(item=mysqlfetchqueryarray(values))      {          echo sprintf("用户名:%s, 电话 %s, 学历: %s, 毕业日期: %s",                item[′UserName′],item[′UserName′],item['Tel'], item[′Content′],item[′Content′],item['Date']          );      }
41、如何使用下面的类,并解释下面什么意思?(3)
   class test{     function Get_test($num){     num=md5(md5(num=md5(md5(num)."En");     return $num;     }     }   $test = new test();   ret=ret=test->Get_test(11);   print_r($ret);exit;
将num进行MD5编码之后生成的32位字符串a1和"En"联系起来之后再进行一次MD5编码

---------------

42、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)

表名 UserName Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15

(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中

insert into 表名 values('小王', '13254748547', '高中毕业', '2007-05-06')

(b) 请用sql语句把张三的时间更新成为当前系统时间
update 表名 set Date = GETDATE() where UserName = "张三"

(c) 请写出删除名为张四的全部记录
delete from 表明 where UserName = "张四"

43、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)

int 整型
char 存储定长
varchar 存储变长
datetime 时间
text 存储变长的
varchar是变长
char(20) 定长

44、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
auto_increment

45、写出以下程序的输出结果 (1分)
  $b=201;     $c=40;     a=a=b>$c?4:5;     echo $a;     ?>   4
46、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)

isset()
empty()

-----------------------------------------------------------------------------

47、取得查询结果集总数的函数是?(1分)

mysql_num_rows()

48、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)
 print_r($arr[0]);   reset($arr);   print_r(current($arr));   print_r(array_shift($arr));
49、请将41题的数组的值用','号分隔并合并成字串输出(1分)
implode

50、a=′abcdef′;请取出a=′abcdef′;请取出a的值并打印出第一个字母(1分)
$a[0];
substr($a, 0, 1);

51、PHP可以和sql server/oracle等数据库连接吗?(1分)
可以
有现成的库

52、请写出PHP5权限控制修饰符(3分)
public
private 
protected

 53、请写出php5的构造函数和析构函数(2分)
public function __construct()   {   }   public function __destruct()   {   }

====================

编程题

1、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php  
$str = 'http://www.sina.com.cn/abc/de/fg.php?id=1';
function getExt($str){
$arr = parse_url($str);
$file = basename($arr['path']);
$ext = explode('.',$file);
return $ext[count($ext)-1];
}
 
2. 写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';   $b = '/a/b/12/34/c.php';   计算出 b相对于b相对于a 的相对路径应该是 http://www.cnblogs.com/12/34/c.php将添上  

 
3、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
用scandir函数,scandir() 函数返回指定目录中的文件和目录的数组
function listDir($dir){
$list = scandir($dir);
$dirs = [];
foreach ($list as $v){
if($v != '.' && $v != '..'){
$full_dir = $dir . '/' . $v;
if(is_dir($full_dir)){
$dirs[][$v] = listDir($full_dir);
}else{
$dirs[] = $full_dir;
}
}
}
return $dirs;
}



###########################################

Mysql行锁,事务
Php7.0 5.6了解
单线程多线程
Soket
shell脚本

SSO单点登录的原理
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录

一般我们单系统实现登录会这样做: 
登录:将用户信息保存在Session对象中 
如果在Session对象中能查到,说明已经登录 
如果在Session对象中查不到,说明没登录(或者已经退出了登录) 

SSO(登录系统)的逻辑如下: 
我们可以将登录功能单独抽取出来,做成一个子系统。 
其他子系统登录时,请求SSO(登录系统)进行登录,将返回的token写到Cookie中,下次访问时则把Cookie带上。 
SSO系统生成一个token,并将用户信息存到Redis中,并设置过期时间 
其他系统请求SSO系统进行登录,得到SSO返回的token,写到Cookie中 每次请求时,Cookie都会带上,拦截器得到token,判断是否已经登录 

其实我们会发现其实就两个变化: 
将登陆功能抽取为一个系统(SSO),其他系统请求SSO进行登录 
本来将用户信息存到Session,现在将用户信息存到Redis  

解决系统之间Session不共享问题有几种方案:
 把Session数据放在Redis中(使用Redis模拟Session)【建议】

针对Cookie存在跨域问题,有几种解决方案: 
服务端将Cookie写到客户端后,客户端对Cookie进行解析,将Token解析出来,此后请求都把这个Token带上就行了 
多个域名共享Cookie,在写到客户端的时候设置Cookie的domain。 
将Token保存在SessionStroage中(不依赖Cookie就没有跨域的问题了)

Redis的发布/订阅原理



1、简述MVC
model : 数据结构层
view :展现
control : 接收和判断处理输入

2、session和cookie区别,什么时候用,关掉cookie后session还能不能用,如果不能,怎样才能正常用session
cookie 和session 的区别:
a、cookie数据存放在客户的浏览器上,session数据放在服务器上。
b、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
c、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
d、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
e、所以个人建议:,将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中

一般SESSION 必须倚赖COOKIE才可用,假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:
a. 设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开打开了“--enable-trans-sid”选项,让PHP自动跨页传递Session ID。
b. 手动通过URL传值、隐藏表单传递Session ID。
c. 用文件、数据库等形式保存Session ID,在跨页过程中手动调用。

3、post和get区别,什么时候用。

4、单引号和双引号区别,什么时候用。

5、include,require,include_once,require_once。

6、php字符串反转。
strrev($a);

7、mysql的内连接和左链接、右链接
1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。     
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   
    
2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
 
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     
1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       
2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 

8、获取数组的最后一个键值
值:end($arr),键:key($arr)

9、不用第三变量,交换两个变量的值
$a = 12; $b=22;
$a = $a.'-'.$b;
list($b,$a) = explode('-',$a);

10、php5.4和php5.5的数据库链接区别
mysql mysqli

11、mysql的各种引擎的区别。
引擎有InnoDB、MyISAM,InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
一般来说,MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建
让所有的灵活性成为可能的开关是提供给ANSI SQL的MySQL扩展——TYPE参数。MySQL能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是table formats。下面的示例代码表明了如何创建分别使用MyISAM、ISAM和HEAP引擎的表格。要注意,创建每个表格的代码是相同的,除了最后的 TYPE参数,这一参数用来指定数据引擎。

12、写一个mysql子查询
select * from tab1 where id in (select id from tab2 );

13、在递增和递减的情况下,$i++和++$i哪个效率更高
内建数据类型的情况,效率没有区别。
自定义数据类型的情况,++$i效率较高。

14、mysql优化。

15、mysql联合索引。
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
两个或更多个列上的索引被称作复合索引。所以说创建复合索引时,应该仔细考虑列的顺序。
索引原则
1.索引越少越好
原因:主要在修改数据时,第1个索引都要进行更新,降低写速度。
2.最窄的字段放在键的左边
3.避免file sort排序,临时表和表扫描.
ALTER TABLE table_name
ADD INDEX index_name (column_list)

16、高访问量和高并发时,怎么处理
17、微信开发

18、http协议 301 403 500等代表什么
http状态码 301 :永久重定向,所请求的页面已经转移至新的url。
http状态码 403 :(禁止) 服务器拒绝请求。
http状态码 500 :(服务器内部错误) 服务器遇到错误,无法完成请求。

19、apc
20、spuid
21、mysql_connect,mysql_pconnect
22、apache性能调优

23、写正则匹配URL
^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$

24、写出地址栏中的$_SERVER。
$_SERVER(
'PHP_SELF' //则反映的是 PHP 程序本身 (/test/test.php)
'SCRIPT_NAME' //反映的是程序文件本身(这在页面需要指向自己时非常有用)(/test/test.php)
'REQUEST_URI' //则反映了完整 URL 地址(不包括主机名)(/test/test.php)
'SERVER_NAME' //local.wwwroot.cn
'SERVER_ADDR' //当前运行脚本所在的服务器的 IP 地址 (127.0.0.1)
'REMOTE_ADDR' //正在浏览当前页面用户的 IP 地址 (127.0.0.1)
'HTTP_HOST' //URL中网站的域名或者ip地址 (local.wwwroot.cn)
'SERVER_PORT' //端口号 (80)
);
$_SERVER['HTTP_HOST'] = $_SERVER['SERVER_NAME'] : $_SERVER['SERVER_PORT'];

25、BOM头

26、json_encode(),json_decode(),对象转数组

27、isset(),empty()
isset()检测一个变量是否有设置的函数
empty()检测是否为空的函数

28、SQL防止注入
htmlspecialchars 把预定字符转换为HTML实体
addslashes 在双引号前加上反斜杠

29、怎么面对高并发?
数据库主要靠缓存,服务器弄负载均衡
数据库搞读写分离,分库分表,服务器负载均衡+CDN

30、js闭包
闭包就是能够读取其他函数内部变量的函数。
闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

31、css盒子
32、HTML5新增的标签
33、redis有哪些方式,什么时候用到缓存
队列list(支付使用)
34、MySQL在哪些地方建索引
35、MySQL有哪些情况是需要建索引却不适合建索引
36、thinkphp底层源码实现

37、session存在于文件中,还能存在哪些地方,怎么配置
38、linux怎么去访问一个PHP文件
39、页面突然访问空白,怎么调试

40、MySQL创建表,字段语句
41、MySQL修改表字段语句
42、MySQL给字段添加索引语句
43、正则,匹配字符串里的数字,打印出来
44、一个课程表、一个评论表、一个用户表,写出查询评论数前10位的用户信息的语句,写出查询没发表过评论的用户信息的语句
45、linux里常用的命令有哪些
46、打印出text.txt文件里的前100个字符
47、MVC在平时用的时候有没有觉得不够用?

48、怎么做接口规范?
restful

49、什么是restful,讲讲你对restful的理解。
它是一种接口规范。

50、一般怎么做MySQL优化。

51、分库分表怎么做?

52、thinkphp、laravel、Yii等框架的区别。
ThinkPHP的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期代码解耦是个让人头疼的事情。不过很多第三方功能不需要自己写,众多大牛已经给铺好路了。
Laravel的话,传说写起来很爽扩展性也够,但是学习成本有点高,总不能给初级开发者半个月的时间去学习框架吧。而且据说江湖人士透漏,Laravel性能不怎么样,文档也并不是特别丰富。
Yii的话,语法有点啰嗦,前后端代码分离有点小麻烦,不过性能是非常好的,而且已经有众多国内大公司在使用了,出现意外可以快速的找到大牛答疑解惑。

53、mvc和mvvm的区别

54、memcache的缓存机制

55、restful怎么做API版本管理
小版本的更新可通过把版本号作为参数的方式,例如www.demo.com/list?version=2。
或者通过accept字段标示版本号的方式判断,因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分。
大的版本更新则通过URL上添加版本号控制,例如developer.github.com/v3/media/。

56、laravel Server中间件,laravel要定很多路由有没有更好的解决方法

57、很多if-else或switch-case分支,改用数组

58、查询关键字除了用LIKE还有没有更好的方法。
正则表达式匹配:REGEXP、NOT REGEXP、RLIKE、NOT RLIKE
select * from table where name like '%a%';
select * from table where name regexp 'a'

sphinx
使用Sphinx从InnoDB中获得全文索引


59、
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。
strip_tags(string,allow);
string 必需。规定要检查的字符串。
allow 可选。规定允许的标签。这些标签不会被删除。

60、memcahce和redis的区别。
memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。
redis在数据支持上要比memecache多。

对于两者的选择还是要看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,我在项目里还是采用memcache,它也足够的稳定可靠。如果涉及到存储,排序等一系列复杂的操作时,毫无疑问选择redis。
有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。
memcached 是多线程的 redis目前是单线程。

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2 、Redis支持数据的备份,即master-slave模式的数据备份。
3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

Redis能够替代memcached,让你的缓存从只能存储数据变得能够更新数据,因此你不再需要每次都重新生成数据了。


61、nginx和apache的区别。
nginx比apache 占用更少的内存及资源。
nginx 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 。
apache 比nginx 的伪静态rewrite 强大 。
apache 比nginx稳定。
一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
nginx处理静态文件好,耗费内存少。
nginx的负载能力比apache高很多。
nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡。
Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧。

62、搜索引擎爬虫。
file_get_content 或curl等获取网页内容,用正则匹配出需要的信息。

63、explain索引长度

64、redis list长度
Redis Llen 命令 - 获取列表长度
LLEN KEY_NAME


65、PHP和JS中'0',是true还是false。
php为false,js为true
PHP:
var_dump(0 == false); //bool(true)
var_dump('0' == false); //bool(true)
var_dump('' == false); //bool(true)
var_dump('null' == false); //bool(false)
var_dump(null == false); //bool(true)
在js做比较的时候,有这样的三条规则:
如果比较的两者中有bool,会把 bool 先转换为对应的 number,即 0 和 1
如果比较的双方中有一方为number一方为string,会把string转换为数字
把string直接转换为bool的时候,空字符串''转换为 false,除此外的一切字符串转换为 true


66、
在数据库test中的一个表student,字段是name,class,score。分别代表姓名、所在班级,分数。   1) 算出每个班级中的学生,按照成绩降序排序;   select name,class,score from student order by score desc;   2) 查出每个班的及格人数和不及格人数,格式为:class、及格人数、不及格人数   SELECT     sum(case when score >= 60 then 1 else 0 end) jige,     sum(case when score < 60 then 1 else 0 end) bujige,     class   FROM `score`   GROUP BY `class`   3) 用PHP写入连接数据库("localhost","msuser","mspass")、执行以上SQL、显示结果、判断错误、关闭数据库的过程   $conn=mysql_connect(‘localhost’,'msuser’,’mspass′);   Mysql_select_db(‘test’);   $sql="SELECT       sum(case when score >= 60 then 1 else 0 end) jige,       sum(case when score < 60 then 1 else 0 end) bujige,       class      FROM `score`      GROUP BY `class`";   if($result=Mysql_query($sql)){   while($row=mysql_fetch_assoc($result)){   print_r($row);    }   }   Mysql_close($conn);



使用五种以上方式获取一个文件的扩展名
function get_ext1($file_name){
return strrchr($file_name, .);
}
function get_ext2($file_name){
return substr($file_name, strrpos($file_name, .));
}
function get_ext3($file_name){
return array_pop(explode(., $file_name));
}
function get_ext4($file_name){
$p = pathinfo($file_name);
return $p['extension'];
}
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), .)));
}


如果修改上传文件的最大限制?
php.ini设置:
1、post_max_size =10M 表单zd提交最大数据为10M.此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的.
2、upload_max_filesize =2M 最大上传文件大小,此项针对上传文件时单个文件的大小.