首页 > 程序人生 > 程序员面试技艺 > 新浪PHP笔试题及答案解析
2014
11-11

新浪PHP笔试题及答案解析

1.cookie、session的联系和区别,多台web服务器如何共享session?

cookie在客户端保存状态,session在服务器端保存状态。但是由于在服务器端保存状态的时候,在客户端也需要一个标识,所以session也可能要借助cookie来实现保存标识位的作用。

cookie包括名字,值,域,路径,过期时间。路径和域构成cookie的作用范围。cookie如果不设置过期时间,则这个cookie在浏览器进程存在时有效,关闭时销毁。如果设置了过期时间,则cookie存储在本地硬盘上,在各浏览器进程间可以共享。

session存储在服务器端,服务器用一种散列表类型的结构存储信息。当一个连接建立的时候,服务器首先搜索有没有存储的session id,如果没有,则建立一个新的session,将session id返回给客户端,客户端可以选择使用cookie来存储session id。也可以用其他的方法,比如服务器端将session id附在URL上。

两者区别:

1)cookie在本地,session在服务器端

2)cookie不安全,容易被欺骗,session相对安全

3)session在服务器端,访问多了会影响服务器性能

4) cookie有大小限制,为3K

多服务器共享session可以尝试将session存储在memcache中

2.http协议中的postget有何区别?

1)GET用于获取信息,不应该用于修改信息,POST可用于更新修改信息。

2)GET可传输数据大小和URL有关,而POST没有限定大小,大小和服务器配置有关。

3)GET放在URL中,因此不安全,而POST传输数据对于用户来说是不可见的,所以相对安全。

4)在ajax中:post不被缓存,get被缓存所以一般在请求结尾加Math.random();

5)SERVER端接收:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接收。

6)编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理!

3.requireinclude都可包含文件,二者的区别何在?

require在包含文件出错之后返回致命错误,跳出运行,而include 在包含文件出错之后返回警告信息,继续运行。

4.php中web上传文件的原理是什么,如何限制上传文件的大小?

PHP上传文件默认大小为2M,设置上传大小的配置项是upload_max_filesize,post_max_size设置一次,POST中PHP能接收的最大数据量,应该比upload_max_filesize大。

5.写一个函数,可以遍历文件夹下的所有文件和文件夹

代码如下:

<?php
/**********************
一个简单的目录递归函数
第一种实现办法:用dir返回对象
***********************/
function tree($directory) 
{ 
    	$mydir = dir($directory); 
    	echo "<ul>\n"; 
    	while($file = $mydir->read())
    	{ 
        		if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!="..")) 
        		{
            			echo "<li><font color=\"#ff00cc\"><b>$file</b></font></li>\n"; 
            			tree("$directory/$file"); 
        		} 
        		else 
		            echo "<li>$file</li>\n"; 
    	} 
    	echo "</ul>\n"; 
    	$mydir->close(); 
} 
//开始运行

echo "<h2>目录为粉红色</h2><br>\n"; 
tree("./nowamagic"); 

/***********************
第二种实现办法:用readdir()函数
************************/
function listDir($dir)
{
    	if(is_dir($dir))
   	 {
     	   if ($dh = opendir($dir)) 
        		{
        	    while (($file = readdir($dh)) !== false)
            			{
                			if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
                				{
                   				echo "<b><font color='red'>文件名:</font></b>",$file,"<br><hr>";
                   				listDir($dir."/".$file."/");
                			}
                				else
                				{
         			            if($file!="." && $file!="..")
                     					{
         				                echo $file."<br>";
                     				}
                 			}
             	}
            	closedir($dh);
     	    }
   	    }
    }
    //开始运行
    listDir("./nowamagic");
?>

6.有mail.log的一个文档,内容为若干邮件地址,其中用’\n’将邮件地址分隔。要求从中挑选出sina.com的邮件地址(包括从文件读取、过滤到列印出来)。

$mail = file_get_contents('mail.log');
$pattern = "/\S+sina\.com/";
$rpattern = "/\\n/";
preg_filter($rpattern,"",$mail);
if(preg_match_all($pattern,$mail,$matches))
{
    print_r($matches);
}

编程技巧