首页  >  文章  >  后端开发  >  php面试题及答案

php面试题及答案

WBOY
WBOY原创
2016-06-20 13:03:281690浏览

1.表单中 get与post提交方法的区别?

答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. session与cookie的区别?  

(1)、session保存在服务器,客户端不能获取其中的信息;cookie保存在客户端,服务器能够获取其中的信息。   

(2)、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。   

(3)、session需要借助cookie才能正常工作。如果客户端完全禁止cookie且不通过url传值,session将失效。

(4)、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

   考虑到安全应当使用session。 

2.数据库中的事务是什么?

答:事务(transaction)是一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。 

3.用PHP打印出前一天的时间格式是2006-5-10 22:21:21

答:echo date('Y-m-d H:i:s', strtotime('-1 day')); 

4.echo(),print(),print_r()的区别

答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)     

print()    只能打印出简单类型变量的值(如int,string)     

print_r() 可以打印出复杂类型变量的值(如数组,对象)     

echo     输出一个或者多个字符串 

5.能够使HTML和PHP分离开使用的模板

答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate 

6.使用哪些工具进行版本控制?

答:cvs,svn,vss; 

7.如何实现字符串翻转?

答:echo strrev($a); 

8.优化MYSQL数据库的方法。

答:1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM

2、使用连接(JOIN)来代替子查询:  

3、使用联合(UNION)来代替手动创建的临时表

4、事务处理:  

5、锁定表,优化事务处理:  

6、使用外键,优化锁定表   

7、建立索引:  

8、优化查询语句   

9.MYSQL取得当前时间的函数是?,格式化日期的函数是

答:now(),date() 

10.实现中文字串截取无乱码的方法。

mb_substr() 

function GBsubstr($string, $start, $length) {    if(strlen($string)>$length){     $str=null;     $len=$start+$length;     for($i=$start;$i0xa0){     $str.=substr($string,$i,2);     $i++;    }else{     $str.=substr($string,$i,1);     }    }   return $str.'...';    }else{   return $string;   }} 

11.您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?

TortoiseSVN;

12.对于大流量的网站,您采用什么样的方法来解决访问量问题?

答:使用缓存/镜像,确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,   程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量 

13.如何修改SESSION的生存时间

答:

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache   

方法2:

$savePath = "./session_save_dir/";        

$lifeTime = 小时 * 秒;        

session_save_path($savePath);        

session_set_cookie_params($lifeTime);         

session_start();  

方法3:

setcookie() and session_set_cookie_params($lifeTime); 

18、有一个网页地址, 比如PHP开发资源网主页: http://www.scutephp.com/index.html,如何得到它的内容?

答:方法1(对于PHP5及更高版本):  

$readcontents = fopen("http://www.scutephp.com/index.html", "rb");   

$contents = stream_get_contents($readcontents);   

fclose($readcontents);   echo $contents;   

方法2:   

echo file_get_contents("http://www.scutephp.com/index.html");   

14、谈谈对mvc的认识

答:由模型(model),视图(view),控制器(controller)完成的应用程序   由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;  

16. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?

答:

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

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

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。   

按引用传递则不需要复制值,对于性能提高很有好处。 

17. 在PHP中error_reporting这个函数有什么作用? 

答:设置错误级别与错误信息回报 

18. 请写一个函数验证电子邮件的格式是否正确

答:function checkEmail($email)  {    $pregEmail = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";    return preg_match($pregEmail,$email);    } 

19. 简述如何得到当前执行脚本路径,包括所得到参数。

答:$script_name = basename(__file__); print_r($script_name); 

21、JS表单弹出对话框函数是?获得输入焦点函数是?

答:弹出对话框: alert(),prompt(),confirm()   获得输入焦点 focus()

22、JS的转向函数是?怎么引入一个外部JS文件?

答:window.location.href,<script></script> 

23、foo()和@foo()之间有什么区别?

答:@foo()忽略错误输出 

24、如何声明一个名为”myclass”的没有方法和属性的类? 

答:class myclass{ } 

25、如何实例化一个名为”myclass”的对象?

答:new myclass() 

26、你如何访问和设置一个类的属性?

答:$object = new myclass();   $newstr = $object->test;   $object->test = "info"; 

27、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? 

答:mysql_fetch_row是从结果集取出1行数组,作为枚举   mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得 

28、GD库是做什么用的? 

答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。    

在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。    

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

答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串   char的场地固定为创建表设置的长度,varchar为可变长度的字符  

39、检测一个变量是否有设置的函数是否?是否为空的函数是?

答:isset($str),empty($str); 

40、取得查询结果集总数的函数是?

答:mysql_num_rows($result);  

45、请写出PHP5权限控制修饰符

答:public(公共),private(私用),protected(继承) 

46、请写出php5的构造函数和析构函数

答:__construct , __destruct 

47、创建表名为message有如下字段

 id 文章id  title 文章标题  content 文章内容  category_id 文章分类id    hits 点击量答:CREATE TABLE 'message'(   'id' int(10) NOT NULL auto_increment,   'title' varchar(200) default NULL,   'content' text,   'category_id' int(10) NOT NULL,   'hits' int(20),   PRIMARY KEY('id');   )ENGINE=InnoDB DEFAULT CHARSET=utf8; 

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名   例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

答案1:end(explode(‘,’, basename($url)));  

2.执行程序段将输出__0__。 

PEAR中的数据库连接字符串格式是____。

$dsn = "mysql://root:123@192.168.0.1/testdb"; 

6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):

preg_replace("/<script>].*?>.*?</script>/si", "newinfo", $script); 

7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。 

 LoadModule php5_module "c:/php/php5apache2.dll" ,

 AddType application/x-httpd-php .php, 

3、防止SQL注入漏洞可以用哪些函数?

addslashes()

mysql_escape_string()

4、用PHP写出显示客户端IP与服务器IP的代码

echo $_SERVER[‘REMOTE_ADDR’];

echo $_SERVER[‘SERVER_ADDR’]; 

6、写一个函数,能够遍历一个文件夹下的所有文件和子文件

<p>function dir_recurse($dir) </p><p>{</p><p>    $i = 1;</p><p>    if($handle = opendir($dir)) {</p><p>        while(false !== ($file = readdir($handle))) {</p><p>            if($file != "." && $file != ".." ) {</p><p>                if(is_dir($dir."/".$file) == true) {</p><p>                    $fullpath = $dir."/".$file;</p><p>                    dir_recurse($fullpath);</p><p>                    echo "$fullpathn";</p><p>                    $i++;</p><p>                }else {</p><p>                    $fullpath = $dir."/".$file;</p><p>                    echo "$fullpathn";</p><p>                    $i++;</p><p>                }</p><p>            }</p><p>        }</p><p>        closedir($handle);</p><p>    }</p><p>} </p>

7、创建文件exer1,设置访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,写出操作过程的命令

touch exer1

chmod 644  exer1

增加权限

chmod a+x  exer1

chmod g+w  exer1 或者chmod 775 exer1 

8、字符串“to upper case” 分别用php,shell ,js实现将字符串中的字符全部转换成大写并输出。

Php实现: echo strtoupper(‘to upper case’)

Shell实现:echo "to upper case" | tr 'a-z' 'A-Z'

Js实现:<script></script>

var stmp1 = " to upper case ";
alert(stmp1.toLocaleUpperCase());//转换成大写
alert(stmp1.toUpperCase())//转换成大写

 

9、用root登陆mysql数据库,如果mydb不存在,则在mysql中创建数据库mydb,给root用户分配所有权限从192.168.1.1 ip来访问mysdb数据库。(root用户密码为空)

 CREATE DATABASE IF NOT EXISTS mydb; 

grant all on mydb.* to root@’ 192.168.1.1’ identified by '' ; 

11.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。

答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 


3.在HTTP 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(5)。


答:(4)未授权 (5) header("HTTP/1.0 404 Not Found");


4.数组函数 arsort 的作用是(6);语句 error_reporting(2047)的作用是(7)。

答:(6)对数组进行逆向排序并保持索引关系  (7)All errors and warnings


7.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是(12);为了避免多次包含同一文件,可以用语句(13)来代替它们。

答:(12) 发生异常时include产生警告require产生致命错误  (13) require_once()/include_once()

8.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是(14)。

答:serialize() /unserialize()


9.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on.

答:allow_call_time_pass_reference


10.SQL 中LEFT JOIN的含义是(16)。

如果 tbl_user记录了学生的姓名(name)和学号(ID),

tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),

要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句(17)。


答:(16) 自然左外连接

     (17) select name , count(score) as sum_score from tbl_user left join tbl_score on tbl_user.ID=tbl_score.ID  group by tbl_user.ID
11..在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(18)。
答:结束标识符所在的行不能包含任何其它字符除";"

14.如何实现字符串翻转?
答:.用strrev函数呗,不准用PHP内置的就自己写:

strrev($str)<br />{<br />    $len=strlen($str);<br />    $newstr = '';<br />    for($i=$len;$i>=0;$i--)<br />    {<br />        $newstr .= $str{$i};<br />    }<br />    return $newstr;<br />}


18.使用五种以上方式获取一个文件的扩展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
答:使用五种以上方式获取一个文件的扩展名

1)<br />get_ext1($file_name)<br />{<br />    return strrchr($file_name, '.');<br />}<br /><br />2)<br />get_ext2($file_name)<br />{<br />    return substr($file_name, strrpos($file_name, '.'));<br />}<br /><br />3)<br />get_ext3($file_name)<br />{<br />    return array_pop(explode('.', $file_name));<br />}<br /><br />4)<br />get_ext4($file_name)<br />{<br />    $p = pathinfo($file_name);<br />    return $p['extension'];<br />}<br /><br />5)<br />get_ext5($file_name)<br />{<br />    return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));<br /><p>}</p>


30.请举例说明在你的开发过程中用什么方法来加快页面的加载速度


A.生成静态HTML

B.生成xml

C.可不用数据库的尽量不用数据库把变量参数存于文本.

D.用ZEND加速

21. 如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?

答:$_SERVSR[‘REQUEST_URI’]

$_SERVER[‘REMOTE_ADDR’]

25.mysql_fetch_row() 和 mysql_fetch_array() 有什么分别?

mysql_fetch_row() 把数据库的一列储存在一个以零为基数的阵列中,第一栏在阵列的索引 0,第二栏在索引 1,如此类推。mysql_fetch_assoc() 把数据库的一列储存在一个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个栏位,阵列的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。

29.防止SQL注射漏洞一般用__addslashes___函数。

30.PHP中传值和传引用、传地址的区别是什么?

答:传值是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 

传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象

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

答:获取open()的返回值,如果是null,就是屏蔽了

33.对于大流量的网站,您采用什么样的方法来解决访问量问题

答:首先,确认服务器硬件是否足够支持当前的流量

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn