php高级面试题及答案
PHP高级面试题如果你有做好准备,面试中你就会轻松应对了,以下是小编帮你们整理的php高级面试题及答案,一起来学习啦。
php高级面试题及答案(一)
1.nginx使用哪种网络协议?
nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程
2. 没有输出结果, 可能是什么原因, 简述的解决此问题的过程(提示: 语法没有问题)
可能服务器上面没有开启短标签short_open_tag =设置为Off,,php.ini开启短标签控制参数: short_open_tag = On
3. 简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题?
$tmp = 0 == "a"? 1: 2;
echo $tmp;
?>
结果 1 int和string类型强制转换造成的,0==="a"
0 == 0 肯定是true啊
PHP是弱类型。。
$tmp = 0 === "a"? 1: 2;
echo $tmp; 这样就是2
4. 已知一个字符串如下: $str = "1109063 milo 1";
用一行代码将该字符串里面的1109063赋值给$uid, milo赋值给$user, 1赋值给$type
空格如下
list($uid, $user, $type) = explode(" ", $str);
\t如下
list($uid, $user, $type) = explode("\t", $str);
list($uid, $user, $type) = sscanf($str, "%d %s %d");
$n = sscanf($auth, "%d\t%s %s", $id, $first, $last);
5. 分别列出如下类型的有符号和无符号范围 TINYINT SMALLINT MEDIUMINT INT
TINYINT-2^7 - 2^7-10 ~ 2^8-1
SMALLINT-2^15 - 2^15-1 0 ~ 2^16-1
MEDIUMINT-2^23 - 2^23-1 0 ~ 2^24-1
INT-2^31 - 2^31-1 0 ~ 2^32-1
6. 将下面的数组用一行拼装成一个字符串i am milo! day day up!
$arr = array(
'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!'
);
?>
$str = strtolower(implode(" ",$arr));
php高级面试题及答案(二)
1. echo count(“abcd”);输出多少?
int count(mixed var)
返回单元数目,通常是一个array,任何其他类型都只有一个单元,有一个例外, 如果var是null结果是0
2.
$a=$b=$c=0;
$a=$b && $c;
运行以上代码后$a $b $c 分别是?
$a=false
$c=0
$b=0
2. PHP打印出前一天的时间,格式是-12-29 22:21:21
echo date('Y-m-d H:i:s',strtotime('-1 day'));
strtotime 将任何英文文本的日期时间解析成时间戳
4. 请用php的heredoc语法格式输出:hello world!
echo <<
hello world!
EOT;
5. $string = "abcdefg",那么$string{4}的值是?
$string{4}=e
因为PHP是弱类型语言,可以将字符串“视为数组”,当做字符集合看待,字符串中的字符可以在字符串之后用花括号指定所要字符从零开始的偏移量来访问和修改。
6. 简述echo(),print(),print_r()的区别。
echo,print是PHP语言结构, print_r是函数,语言结构没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)
7.用PHP写出显示客户端IP与服务器IP的代码。
客户端: $_SERVER[REMOTE_ADDR]
服务器: $_SERVER[SERVER_ADDR]
php高级面试题及答案(三)
1. 调用如下函数获取函数并获取count的值
function get_list($cnd = array(), &$count = false)
{
// 伪代码 处理$cnd 并赋值datas
$datas = 'i am call back';
$count && $count = rand(1, 10000);
return $datas;
}
?>
$count=1;
$data = get_list($cnd,&$count);
echo $count;
2. 几种方式去取代session机制, 简单描述各自的优劣
mysql、memcache、cookie保持一种唯一状态标识码
3. 下列HTTP状态码出现的可能原因, 如何处理
200, 301, 404, 502, 503
200
请求已成功,请求所希望的响应头或数据体将随此响应返回。
301
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。 新的永久性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。 如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止
自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。 注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。
404
请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状 态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请 求被拒绝或者没有其他适合的响应可用的情况下。
502
作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503
由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。如果没有给出这个 Retry-After 信息,那么客户端应当以处理500响应的方式处理它。 注意:503状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是希望拒绝客户端的连接。
200 OK 一切正常,对GET和POST请求的应答文档跟在后面。
301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL
404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。
502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。