首页 > Web开发 > 详细

php常见面试题(未完待更)

时间:2016-03-11 23:46:59      阅读:403      评论:0      收藏:0      [点我收藏+]
一、    时间
1.获取当前时间
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’);
 
2.获取前一天此时时间
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
 
3.cookie和seeion的区别与联系
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。
如果访问量大,可能产生的SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中
 
cookie 和session 的联系:
session是通过cookie来工作的
session和cookie之间是通过$_COOKIE[‘PHPSESSID‘]来联系的,通过$_COOKIE[‘PHPSESSID‘]可以知道session的id,从而获取到其他的信息。
在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。
存储session id的方式:1.get或post   2.cookie(应用广泛)
Session数据保存在服务器端的文件(默认保存)或数据库中
客户端通过访问cookie或者URL来获得session id ,之后通过它来获得服务端的数据
 
4.多台web服务器如何共享session?
多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION数据。
方法一:
A.共享客户端的session id,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。
B.共享服务器端的session数据实现方式
1. 将session数据存放到数据库中,使得各个服务器可以对其访问
2. 注意:由于经常会对表删除操作,所以要使用optimize table table_name 命令,进行sql优化,对表进行碎片整理,去除空洞
3.问题:如果网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,这样效率就会明显降低。考虑到 SESSION 数据一般不会很大,可以尝试用C/Java 写个多线程的程序,用 HASH 表保存 SESSION 数据,并通过 socket 通信进行数据读写,这样 SESSION 就保存在内存中,读写速度应该会快很多。另外还可以通过负载均衡来分担服务器负载。(用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。)
方法二:
在获取session数据将其放到cookie中,其他服务器使用时先检查客户端是否存在该session,若有取出(该方法容易被用户禁用且容易被伪造存在安全隐患)
方法三:(推荐使用)
    利用memacache同步session,它把web服务器的内存组合为一个内存池,这样其他的服务器都可以访问(缺点:内存块有大小之分,容易产生内存碎片)
 
5.http协议中的post和get有何区别?
GET用于获取信息,pOST可用于更新修改信息。
GET放在URL中,因此不安全,而pOST传输数据对于用户来说是不可见的,所以相对安全。
在ajax: post不被缓存,get被缓存所以一般在请求结尾加Math.random();
SERVER端接受:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接受!
编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理!
 
6.php中web上传文件的原理是什么,如何限制上传文件的大小?
打开php.ini,
参数 设置 说明
file_uploads on 是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir — 文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize 8m 望文生意,即允许上传文件大小的最大值。默认为2M
post_max_size 8m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
 
说明
一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。
max_execution_time 600 每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time 600 每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit 8m 每个PHP页面所吃掉的最大内存,默认8M
把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了
 
7.遍历一个文件夹下所有文件夹与文件
<html>
    <head>
        <title>遍历文件夹及文件</title>
        <meta http-equiv="Content-type"content="text/html;charset=utf-8">
    </head>
<?php
 function showDirectoryFile($path){
    $handle = opendir($path);
    while($file = readdir($handle)){
        if($file=="."||$file=="..") continue;
        $newFilePath = $path.DIRECTORY_SEPARATOR.$file;
        if(is_dir($newFilePath)){
 
            echo "文件夹:".$newFilePath."<br>";
            showDirectoryFile($newFilePath);
        }
        if(is_file($newFilePath))
            echo ‘文件‘.$newFilePath."<br>";
            echo ‘<br>‘;       
    }
    closedir($handle);
}
showDirectoryFile("C:\wamp\www");
?>
</html>
 
8.计算两个日期的时间差
$a=‘2012-12-31‘;
    $b=‘2013-1-3‘;
    echo floor((strtotime($b)-strtotime($a))/(24*60*60));
 
9.取出路径后缀
    //方法一:explode(分隔符,字符串)
    $url=‘www.test.com/index.php‘;
    $arr=explode(‘.‘,$url);
    $postion=count($arr)-1;
    echo $arr[$postion].‘<br>‘;
    echo end($arr);
 
    //方法二:pathinfo() 返回一个关联数组包含有 path 的信息,包括以下的数组单元:dirname,basename 和 extension。
    print_r(pathinfo($url,PATHINFO_EXTENSION ));//能处理特殊情况
    $info=pathinfo($url);
    echo $info[‘extension‘];
    //方法三:strrchr()函数的作用是:
    //查找一个字符串在另一个字符串中 末次 出现的位置,并返回从字符串中的这个位置起,一直到字符串结束的所有字符;
    //如果未能找到指定字符,那么函数将返回False。
    echo substr(strrchr($url,‘.‘),1);//echo substr($url,strrpos($url,‘.‘)+1);
    echo substr($url,strrpos($url,‘.‘)+1);
 
9.PHP如何防止sql注入
方法一:使用预编译语句,绑定变量
$query=”insert into myCity  (Name, CountryCode, District) values(?,?,?)”;
$stmt=$mysqli->prepare($query);
$stmt->blind_param(“sss”,$var1,$var2,$var3);
$var1=’jack’;
$var2=’china’;
$var3=’sdkjfdd’;
$stmt->execute();
 
方法二:使用存储过程(先将sql语句定义在数据库中且尽量避免存储中使用动态的sql)
 
方法三:输入过滤和编码处理
 
方法四:检查数据类型
 
方法五:使用安全编码函数
 
方法六:从数据库角度来说,要使用最小权限原则
 
10.简述MVC
    MVC设计模式:
M 模型 是应用程序中用于处理数据逻辑的那部分,V视图 是应用程序中用于处理数据显示的那部分,C控制器 是应用程序中用于处理用户交互的那部分
MVC框架:
强制使应用程序的的输入、处理、输出分开,M 表示企业数据和业务逻辑,多个视图可以同一个模式,减少了代码的重复性。V 表示用户交互的界面,是一种输出方式且能有用户操作。C 表示接受用户的输入并调用模型和视图完成用户的需求。
 
11.echo(),print(),print_r()的区别
echo 可以打印多个字符串类型
print()只能打印一个字符串类型
print_r() 可以打印复合型 数组,对象等
其中echo与print是PHP语句没有返回值,print_r是PHP函数有返回值
 
12.字符串反转strrev
 
13.复选框的type属性值:checkbox
 
14. mysql_info() 函数返回最近一条查询的信息。
 
15.array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
 
 
 
 

php常见面试题(未完待更)

原文:http://www.cnblogs.com/lantian00/p/5267573.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!