PHP文件包含:include, require及安全注意事项
"这篇文章主要介绍了如何在PHP中获取和包含网站文件的方法,特别是涉及到了`include()`, `require()`, `include_once()`, 和 `require_once()` 这四个函数的使用,以及`allow_url_fopen`配置选项的重要性。" 在PHP编程中,获取和包含网站的PHP文件是构建动态网站的基础。当需要在多个页面中重用代码或引入外部资源时,这些函数显得尤为重要。以下是关于这些函数的详细说明: 1. **`include()` 和 `require()`**: 这两个函数都是用于在当前PHP脚本中插入另一个文件的内容。`include()` 在找不到被包含文件时会发出一个警告,并继续执行脚本,而 `require()` 如果找不到文件,则会抛出一个致命错误并停止脚本执行。因此,当你希望在文件缺失时立即停止程序,应使用 `require()`;反之,如果希望在错误发生后仍然尝试执行其他代码,可以选择 `include()`。 2. **`include_once()` 和 `require_once()`**: 这两个函数与 `include()` 和 `require()` 类似,但它们会检查目标文件是否已经被包含过。如果已经包含过,那么就不会再次包含。这防止了同一文件被多次引入,减少了重复执行代码的可能性。例如,如果你有一个包含全局变量或类定义的文件,确保它们只被包含一次是非常重要的,以避免命名冲突或重复初始化。 3. **`allow_url_fopen` 配置选项**: 在默认情况下,PHP的 `allow_url_fopen` 配置选项通常是关闭的,这意味着你不能直接通过URL(如HTTP)来包含文件。为了能够通过网络加载远程文件,你需要在php.ini配置文件中开启这个选项。然而,这样做可能会增加安全风险,因为恶意用户可能会利用它来执行远程代码注入攻击。因此,除非有特定需求,否则不建议开启此选项。 4. **动态包含文件**: 示例代码展示了如何通过`$_GET`变量动态地包含页面。这是一种灵活的方法,允许用户通过URL参数改变要加载的页面。例如,通过访问 `http://www.example.com/index.php?page=about.php` 可以加载 `about.php` 的内容。然而,这种做法也有安全隐患,因为用户可以直接控制要加载的文件,所以必须进行严格的输入验证和过滤,以防止任意文件包含漏洞。 总结来说,正确使用PHP的文件包含函数和理解 `allow_url_fopen` 的作用是构建安全、可维护的网站的关键。在实际开发中,务必注意潜在的安全风险,并采取适当的措施来防止恶意攻击。同时,合理规划代码结构,避免不必要的动态包含,可以提高代码的可读性和可维护性。
一、涉及到的危险函数〔include(),require()和include_once(),require_once()〕
include() && require()语句:包括并运行指定文件。
这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。
如果"allow_url_fopen"在 PHP 中被激活(默认配置),也可以用 URL(通过 HTTP 或者其它支持的封装协议)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为 PHP 代码解释,则可以用适用于 HTTP GET 的 URL 请求字符串来向被包括的文件传递变量。
详细参考:http://www.phpe.net/manual/function.include.php
require_once() && include_once()
require_once()和include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
详细参考:http://www.phpe.net/manual/function.require-once.php
二、为什么要包含文件
程序员写程序的时候,不喜欢干同样的事情,也不喜欢把同样的代码(比如一些公用的函数)写几次,于是就把需要公用的代码写在一个单独的文件里面,比如 share.php,而后在其它文件进行包含调用。在php里,我们就是使用上面列举的那几个函数来达到这个目的的,它的工作流程:如果你想在 main.php里包含share.php,我将这样写include("share.php")就达到目的,然后就可以使用share.php中的函数了,像这个写死需要包含的文件名称的自然没有什么问题,也不会出现漏洞,那么问题到底是出在哪里呢?
有的时候可能不能确定需要包含哪个文件,比如先来看下面这个文件index.php的代码:
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
if ($_GET[page]) {
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ExtJS 2.0 入门教程与开发指南
- 基于TMS320F2812的能量回馈调速系统设计
- SIP协议详解:RFC3261与即时消息RFC3428
- DM642与CMOS图像传感器接口设计与实现
- Windows Embedded CE6.0安装与开发环境搭建指南
- Eclipse插件开发入门与实践指南
- IEEE 802.16-2004标准详解:固定无线宽带WiMax技术
- AIX平台上的数据库性能优化实战
- ESXi 4.1全面配置教程:从网络到安全与实用工具详解
- VMware ESXi Installable与vCenter Server 4.1 安装步骤详解
- TI MSP430超低功耗单片机选型与应用指南
- DOS环境下的DEBUG调试工具详细指南
- VMware vCenter Converter 4.2 安装与管理实战指南
- HP QTP与QC结合构建业务组件自动化测试框架
- JsEclipse安装配置全攻略
- Daubechies小波构造及MATLAB实现