【PHP面试知识点详解】
1. **SESSION与COOKIE**:禁用COOKIE后,SESSION仍然可以使用。SESSION基于服务器端存储,不依赖于客户端的COOKIES。服务器通过在HTTP头中设置一个唯一标识(session_id)来跟踪用户状态。
2. **抓取远程图片**:在PHP中,可以使用`file_get_contents`或`curl`函数抓取远程图片并保存到本地。
3. **CGI与FastCGI**:CGI(Common Gateway Interface)是Web服务器与脚本语言交互的一种标准协议。FastCGI是CGI的高性能版本,它保持进程常驻,提高了处理效率。php-fpm(FastCGI Process Manager)是PHP的一个FastCGI管理器,负责管理和调度PHP进程,Nginx通过FastCGI与php-fpm通信,实现动态内容处理。
4. **GET与POST传输容量**:理论上,GET方法的最大容量受限于URL长度,一般浏览器限制在2KB到8KB之间;POST方法无此限制,但受服务器接收数据量的限制,通常在几MB左右。
5. **HTML与PHP分离**:常用的PHP模板引擎有Smarty、Twig、Laravel的Blade等,它们能将PHP代码与HTML结构分离,提高代码可读性和维护性。
6. **字符串转换函数**:可以编写一个函数,利用`str_replace`和`ucwords`结合实现字符串首字母大写的转换。
7. **Echo、Print、Print_r**:`echo`用于输出多个变量,速度最快;`print`只能输出一个变量,效率略低于`echo`;`print_r`用于打印变量的结构,便于调试。
8. **Isset、Empty、Is_null**:`isset`检查变量是否已设置且非NULL;`empty`检查变量是否为空,包括0、空字符串等;`is_null`专门判断变量是否为NULL。
9. **_FILE_**:在PHP中,`$_FILES`用于接收上传文件的相关信息。
10. **获取客户端IP**:通过`$_SERVER['REMOTE_ADDR']`获取,若通过代理,可能需要结合其他`$_SERVER`变量。
11. **Header跳转**:使用`header('Location: index.php');`实现页面跳转,需在任何输出之前调用。
12. **去除数组空值**:使用`array_filter()`函数配合自定义回调函数可以移除数组中的空值。
13. **CSRF与XSS攻击**:CSRF(跨站请求伪造)攻击通过让用户执行非预期的操作;XSS(跨站脚本)攻击是注入恶意脚本到网页上。防范措施包括验证码、Token、输入过滤、输出编码等。
14. **MySQL索引类型**:索引提高查询速度,主键是唯一且非空的索引;唯一索引不允许重复;联合索引是多个字段的组合索引。索引影响读写性能,读操作加快,写操作可能会慢,因为需要更新索引。
15. **MyISAM与InnoDB**:MyISAM不支持事务,适合读操作频繁的场景;InnoDB支持事务,适合并发高和有事务需求的环境。
16. **Memcache与Redis**:Memcache是内存键值对存储,适用于简单缓存;Redis提供丰富的数据结构,支持持久化。Redis的QPS通常高于Memcache,Redis有更丰富的功能,但内存占用相对较高。
17. **日期差计算**:使用PHP的`DateTime`类,通过`diff`方法可以计算两个日期之间的差值。
18. **验证邮箱格式**:使用`filter_var`函数配合`FILTER_VALIDATE_EMAIL`过滤器验证邮箱格式。
19. **去除HTML中的JS脚本**:使用正则表达式`/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/i`匹配并替换掉。
20. **遍历目录**:使用`scandir`或`glob`函数遍历目录,递归处理子目录。
21. **static与global**:`static`关键字用于在函数内部保留变量的状态,每次调用不会重新初始化;`global`用于在函数内部引用全局变量。
22. **重写protected方法**:子类可以重写父类的protected方法,无特殊限制,但应遵循方法签名的一致性。
23. **PHP文件末尾的?>**:PHP文件末尾的?>不是必需的,省略可以避免不必要的空格或换行符导致的问题。
24. **PHP框架比较**:
- CI(CodeIgniter)轻量级,易于学习,但功能相对较少。
- ThinkPHP面向国内开发者,文档完善,适合快速开发。
- Laravel功能强大,设计优雅,适合大型项目。选择依据通常包括项目规模、团队技术栈和开发效率。
25. **jQuery选择器效率**:`$("#content").find(".abc")`比`$(".abc", "#content")`效率更高,因为它避免了两次DOM遍历。
26. **AJAX跨域**:通过设置`xhrFields: {withCredentials: true}`和服务器设置CORS头实现跨域。同子域可通过JSONP方式实现,不同子域需要CORS支持。
以上知识点涵盖了PHP面试中的常见问题,包括基础语法、Web安全、数据库、模板引擎、文件操作、网络请求等多个方面,对于准备PHP面试的开发者具有很高的参考价值。