新浪PHP开发工程师笔/面试总结六·零碎的

这个系列要加快完结了…大概还有SQL limit的用法和PHP实现几种排序两篇,今天就把一些零碎的功能说一下。awk和sed以后有机会再看好了…正则也是…

1、error reporting的用法

error_reporting() 函数能够在运行时设置 error_reporting 指令。 PHP 有诸多错误级别,使用该函数可以设置在脚本运行时的级别。 如果没有设置可选参数 level, error_reporting() 仅会返回当前的错误报告级别。

感觉直接贴样例已经足够直观:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 关闭所有PHP错误报告
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// 报告 E_NOTICE也挺好 (报告未初始化的变量
// 或者捕获变量名的错误拼写)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// 除了 E_NOTICE,报告其他所有错误
// 这是在 php.ini 里的默认设置
error_reporting(E_ALL ^ E_NOTICE);

// 报告所有 PHP 错误 (参见 changelog)
error_reporting(E_ALL);

// 报告所有 PHP 错误
error_reporting(-1);

// 和 error_reporting(E_ALL); 一样
ini_set('error_reporting', E_ALL);

2、include和require的区别

includerequire的区别,手册里有官方说明。

require 和 include 几乎完全一样,除了处理失败的方式不同之外。 require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。

这大概就是为什么引用html多用include,引用php多用require的原因吧。当时我只猜到了结局,没猜到原因。

此外include竟然是可以返回值的,比如

1
$foo = include('bar.php')

此时bar.php里面如果有:

1
2
return "success"
`

那么

1
$foo = "success"

如果没有返回语句并且引用成功的话,则返回1。

3、PHP遍历文件夹

PHP 5 引入了一个新函数scandir,输入一个目录,可以返回一个包含目录下所有文件的数组,形式如下:

1
array scandir ( string $directory [, int $sorting_order [, resource $context ]] )

其中,$sorting_order如果是1,那么输出的文件就是按字母降序的,不填时默认按字母顺序升序。$context感觉好复杂…就先不看了。

要想遍历,就需要迭代,控制是否打开下一级目录可以借助is_dir()函数来判断给定文件名是否为目录。使用方法如下:

1
bool is_dir ( string $filename )

了解了上述两个函数之后,遍历文件夹就没问题了。

吐槽一下…要不是朋友提醒我wordpress不能换主题,我还不知道scandir是个危险的函数呢…默认被lnmp一键安装包禁用了…

具体的就是些拼接的工作…有空再写好了!

4、查看客户端IP和服务端IP

查看客户端和服务端ip,有个超全局变量$_SERVER

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$_SERVER['REMOTE_ADDR']//客户端
$_SERVER['SERVER_ADDR']//服务器
```

真是太容易了…

5、==和===的区别

就是===要求类型也一样,比如
```php
$a = 3;
$b = '3';

echo $a == $b;//1
echo $a === $b;//没有输出
echo $a === 3;//1

不知道为啥第二行没有输出…今天困了,就睡了吧…