PHP面试题整理
hanpy

常见的面试题整理,来源是各个地方…

基础篇

1. 表单提交中的Get和Post的异同点

1
2
3
4
5
6
7
8
语义不同:
get请求一般情况多用于请求数据,post请求一般多用于新增或者修改数据

传输大小限制:
get传参是在url上,有大小限制,post请求是在请求体中没有大小限制

安全性:
post安全性相对高一下

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

1
2
3
// 使用超全局变量$_SERVER
$_SERVER['REMOTE_ADDR'] // 客户端
$_SERVER['SERVER_ADDR'] // 服务器IP

3. include和require的区别是什么?

1
2
3
两个函数都是包含引入的文件
include在引入不存在的文件时,产生一个警告且脚本还会继续执行
require则会导致一个致命性错误且脚本停止执行

4. PHP 不使用第三个变量实现交换两个变量的值

1
2
3
$a = 1;
$b = 2;
list($a, $b) = [$b, $a];

5. 取文件的扩展名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getExt1($fileName)
{
$ext = "";
if (empty($fileName)) return $ext;
return pathinfo($fileName, PATHINFO_EXTENSION);
}

function getExt2($fileName)
{
$ext = "";
$pathArr = explode(".", $fileName);
if (count($pathArr) == 1) return $ext;
return end($pathArr);
}

function getExt3($fileName)
{
return substr(strrchr($fileName, '.'), 1);
}

6. 用PHP header()函数实现页面404错误提示功能

1
Header("HTTP/1.1 404 Not Found");

7. 约瑟夫环 n 只猴子,数m踢出一只,最后的就是大王

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function king($n, $m)
{
$monkey = range(1, $n);

$i = 0;
while (count($monkey) > 1) {
$i++;
$head = array_shift($monkey);
if ($i % $m != 0) {
array_push($monkey, $head);
}
}

return current($monkey);
}

8. 文件加锁写入

1
2
3
4
5
6
7
8
9
10
11
// w+ : 读写方式打开
// LOCK_EX 写锁,LOCK_SH 读锁
// 文件加锁
$file = fopen('test.log', 'w+');
if (flock($file, LOCK_EX)) {
fwrite($file, 'test content');
flock($file, LOCK_UN);
} else {
// 文件已经被锁定
}
fclose($file);

9. 遍历文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function myDir($path)
{
$files = [];
if (is_dir($path)) {
if ($handle = opendir($path) ) {
while (($file = readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
$files[$file] = myDir($path . '/' . $file);
} else {
$files[] = $path . '/' . $file;
}
}
}
}
}
return $files;
}

10. 单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class DB
{
private static $db = null;
private function __construct(){
// 连接数据库
}
private function __clone(){}
public function getDb()
{
if (!self::db instanceof self) {
self::db = new self();
}
return self::db;
}
}