PHP开发面试深度解析:正则、安全模式、魔术方法与实战题
需积分: 10 85 浏览量
更新于2024-09-15
收藏 53KB DOC 举报
"这是一份关于PHP面试题目的集合,主要涵盖了PHP的基础知识、安全配置、面向对象编程、脚本执行、垃圾回收、并发处理、数据结构实现、正则表达式应用以及网络通信等方面,适合准备PHP面试的开发者参考学习。"
1. **POSIX风格与兼容Perl风格正则表达式**
- **POSIX风格** 的正则表达式函数包括`ereg`和`ereg_replace`,它们是PHP较早版本中使用的函数,不支持PCRE(Perl Compatible Regular Expressions)特性,如前瞻和后瞻断言、命名捕获组等。
- **兼容Perl风格** 的正则表达式函数是`preg_match`和`preg_replace`,它们基于PCRE库,提供了更强大的正则表达式支持,包括支持Unicode字符集、模式修饰符等。
2. **PHP配置中的safe_mode**
- 当`safe_mode`在`php.ini`中开启时,PHP会限制某些系统函数的使用,以提高安全性。例如,它可能不允许执行系统命令(`exec`, `system`),限制文件操作(`include`, `require`),以及对文件所有者进行权限检查等。
3. **PHP5中的魔术方法**
- PHP5引入了一些特殊的函数,当特定情况发生时自动调用,称为魔术方法,例如:
- `__construct` 和 `__destruct` 分别用于对象创建和销毁时执行的代码。
- `__toString` 让对象能像字符串一样被打印。
- `__set_state` 用于序列化和反序列化对象状态。
- `__call` 处理未定义的方法调用。
- `__get` 和 `__set` 用于访问未定义的属性。
- `__isset` 和 `__unset` 对未定义的属性进行isset()和unset()操作。
- `__sleep` 和 `__wakeup` 在序列化和反序列化对象时调用。
- `__clone` 在克隆对象时调用。
- `__autoload` 自动加载未定义的类。
4. **在命令行下运行PHP脚本**
- 方式一:直接执行PHP文件,如 `php filename.php arg1 arg2`,参数通过空格分隔。
- 方式二:使用`-r`选项运行PHP代码片段,如 `php -r "代码"`。
5. **PHP的垃圾收集机制**
- PHP的垃圾收集(GC)机制主要用于回收不再使用的对象,防止内存泄漏。它采用引用计数和周期性GC策略,当对象的引用计数变为0且无法通过任何可达对象访问时,垃圾收集器会回收该对象占用的内存。
6. **实现Iterator接口**
- 在PHP5中,可以通过实现`Iterator`接口使对象像数组一样遍历。需要定义`rewind()`, `current()`, `key()`, `next()`, 和 `valid()` 方法来遵循迭代器协议。
7. **多进程同时写入文件**
- 实现多进程同时写入文件通常需要使用锁机制,如`flock()`,确保同一时间只有一个进程在写入,避免数据冲突。
8. **双向队列实现**
- 双向队列可以通过继承`SplQueue`并扩展其`enqueue`和`dequeue`方法来实现,使其支持前后插入和删除元素。
9. **正则表达式提取属性值**
- 使用正则表达式提取HTML或XML标签的属性值,需考虑到各种边界条件,如大小写、空格、引号类型等。例如,提取`test`标签的`attr`属性值的正则表达式可能如下:
```regex
<test[^>]*attr\s*=\s*[‘"]([^‘"]+)[‘"]\s*>.*
```
10. **使用socket实现POST请求**
- 使用PHP的`socket`函数来构造POST请求,需要创建套接字连接到指定服务器,然后发送HTTP头和POST数据。例如:
```php
$host = 'www.example.com';
$port = 8080;
$path = '/test';
$data = array(
'username' => '温柔一刀',
'pwd' => '&123=321&321=123&',
'intro' => 'Helloworld!',
);
$cookie = array(
'cur_query' => 'you&me',
'last_tm' => time() - 600,
);
$headers = [
"POST $path HTTP/1.1",
"Host: $host",
"Cookie: " . http_build_query($cookie),
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: " . strlen(http_build_query($data)),
];
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp) {
// 错误处理
} else {
fputs($fp, implode("\r\n", $headers) . "\r\n\r\n" . http_build_query($data));
// 读取响应
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
```
这段代码创建了一个HTTP POST请求,并设置了所需的cookies。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2008-10-22 上传
2013-01-08 上传
2010-08-24 上传
2009-07-14 上传
2013-08-13 上传
lazzer
- 粉丝: 0
- 资源: 1
最新资源
- 仿7881触屏版游戏交易平台手机wap游戏网站模板.rar_网站开发模板含源代码(css+html+js+图样).zip
- sugoifit-system:这是为小型企业建立业务管理系统的重要项目
- STC12_mcu_ucos_source,遗传算法源码c语言,c语言
- exp-compression-test-experiment-iiith:该实验属于基础工程力学和材料强度实验室的全名
- 用于 MATLAB 的视频适配器设备(网络摄像头)设置:用于 MATLAB 的视频适配器设备设置-matlab开发
- SnapperML:SnapperML是用于机器学习的框架。 它具有许多功能,包括通过docker实例的可伸缩性和可再现性
- Data-Structures-and-Algorithms-Python:理解和实践python中的数据结构和算法所需的所有基本资源和模板代码,很少有小项目来演示其实际应用
- 有用的参考书
- code-learn:框架源码学习笔记
- CPU控制的独立式键盘扫描实验_单片机C语言实例(纯C语言源代码).zip
- FDNPKG:FreeDOS一个启用网络的软件包管理器-开源
- arduinolearn,ios的c语言源码,c语言
- 华硕主板Intel 网卡(I225V 网卡)固件更新 版本1.5,解决老版本固件断网问题。
- 迷失财富:通过创建一个小游戏来学习C ++:迷失财富
- webBasic
- crawler:中大型爬行动物