西部数码网站管理助手v3.1,网页页面设计图片教程,免费咨询法律服务,网站域名如何使用文章目录 参考环境allow_url_fopenallow_url_fopen 配置项操作远程文件file 协议 allow_url_includeallow_url_include 配置项 allow_url_include 与 allow_url_fopen区别联系默认配置配置项关闭所导致异常运行时配置ini_set()限制 参考
项目描述搜索引擎Bing、GoogleAI 大模型… 文章目录 参考环境allow_url_fopenallow_url_fopen 配置项操作远程文件file 协议 allow_url_includeallow_url_include 配置项 allow_url_include 与 allow_url_fopen区别联系默认配置配置项关闭所导致异常运行时配置ini_set()限制 参考
项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 官方filesystem.configuration.phpPHP 官方PHP Manual
环境
项目描述PHP5.5.0、5.6.8、7.0.0、7.2.5、7.4.9、8.0.0、8.2.9PHP 编辑器PhpStorm 2023.1.1专业版
allow_url_fopen
allow_url_fopen 配置项
allow_url_fopen 是 PHP 中的一个配置选项它决定了 PHP 是否能够通过 URL 而非本地文件路径 来打开文件。这个配置选项的值会影响到一些 PHP 中与文件操作相关的函数的行为例如 fopen() 和 file_get_contents() 。具体来说当 allow_url_fopen 被设置为 On开启时这些函数可以用来打开、读取、或者写入 远程文件。而当该配置项被设置为 Off关闭时这些函数 只能用于操作本地文件。
操作远程文件
当 allow_url_fopen 选项被设置为 On 时目前allow_url_fopen 选项在每一个 PHP 版本中都是 默认开启 的PHP 能够访问和处理远程文件。例如你可以使用 file_get_contents() 函数来读取一个远程网站的 HTML 内容。对此请参考如下示例
?php# 通过 file_get_contents() 函数获取
# 百度页面的 HTML 内容。
$content file_get_contents(http://www.baidu.com);
var_dump($content);执行效果
上述示例的部分输出内容如下
string(9508) !DOCTYPE htmlhtmlheadmeta http-equivContent-Type contenttext/html; charsetUTF-8meta http-equivX-UA-Compatible contentIEedge,chrome1meta contentalways namereferrermeta namedescription content全球领先的中文搜索引擎、致力于让网民更便捷地获取信息找到所求。百度超过千亿的中文网页数据库可以瞬间找到相关的搜索结果。link relshortcut icon href//www.baidu.com/favicon.ico typeimage/x-iconlink relsearch typeapplication/opensearchdescriptionxml href//www.baidu.com/content-search.xml title百度搜索
title百度一下你就知道/titlestyle ...file 协议
在 PHP 中file 协议的使用不受 allow_url_fopen 配置项的控制。对此请参考如下示例
?php# 通过 allow_url_fopen 函数获取
# allow_url_fopen 配置项的值。
var_dump(ini_get(allow_url_fopen));# 尝试使用 file_get_contents 获取当前主机路径
# C:\Users\Public\Documents\index.php 中的内容
var_dump(file_get_contents(file:///C:\Users\Public\Documents\index.php));执行效果
由于 allow_url_fopen 配置项在 PHP 中默认是开启的故在执行上述示例前请将 allow_url_fopen 配置关闭可通过修改 PHP 配置文件 php.ini 实现。 由于 allow_url_fopen 配置已被关闭故首个 var_dump 语句的输出为 string(0) 。在 allow_url_fopen 配置被关闭的状况下file_get_contents 等函数仍能通过 file 协议对本机文件进行操作。
string(0)
string(35) ?phpvar_dump(Hello World);allow_url_include
allow_url_include 配置项
allow_url_include 是 PHP 的一个配置指令与 allow_url_fopen 类似但 allow_url_include 配置专门针对 PHP 的 include、include_once、 require 及 require_once 语句。当 allow_url_include 被设置为 On 时PHP 允许通过 URL 的形式从远程服务器 包含和执行 PHP 文件。对此请参考如下示例
http://192.168.1.8/target
首先我在 IP 地址为 192.168.1.8 的服务器中准备了文件 target在当前主机中通过浏览器访问该页面的效果如下 开启 allow_url_include 选项
由于在 PHP8.0.0 版本中allow_url_include 选项默认是关闭的故需要通过修改配置文件来开启该选项。将 php.ini 配置文件中的
allow_url_include Off修改为如下内容并对其进行保存。
allow_url_include On执行如下示例代码
?phpinclude(http://192.168.1.8/target);执行效果
由于 allow_url_include 配置项在 PHP7.4.0 版本被废弃故在开启并使用到 allow_url_include 时PHP 将输出提示信息 PHP Deprecated: Directive allow_url_include is deprecated in Unknown on line 0。 在执行上述示例代码后target 文件中的内容被 包含至当前文件且被作为 PHP 代码进行执行。
PHP Deprecated: Directive allow_url_include is deprecated in Unknown on line 0
string(11) Hello World若在执行上述示例代码前未将 allow_url_include 配置项开启则执行结果将为如下内容
PHP Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include0 in C:\index.php on line 4
PHP Warning: include(http://192.168.1.8/target): Failed to open stream: no suitable wrapper could be found in C:\index.php on line 4
PHP Warning: include(): Failed opening http://192.168.1.8/target for inclusion (include_path.;C:\php\pear) in C:\index.php on line 4allow_url_include 与 allow_url_fopen
区别
在开启 allow_url_include 配置项后PHP 仅能够对远程文件进行读写等文件操作。 在开启 allow_url_fopen 配置项后PHP 将能够通过 include 等函数 将远程文件包含至当前文件并将其作为 PHP 代码进行执行。
举个栗子
?php$target_url http://192.168.1.8/target;var_dump(file_get_contents($target_url));
include($target_url);执行效果
在执行上述示例代码前请将 allow_url_fopen 与 allow_url_include 配置项开启。 由于被 allow_url_fopen 配置项影响的 file_get_contents() 函数仅能够对远程文件执行读写等文件操作故 http://192.168.1.8/target 中的代码仅被执行了一次。
PHP Deprecated: Directive allow_url_include is deprecated in Unknown on line 0
string(33) ?phpvar_dump(Hello World);string(11) Hello World联系
allow_url_include 的生效依赖于 allow_url_fopen 配置项的开启。具体而言当 allow_url_include 与 allow_url_fopen 两个配置项均被开启时allow_url_include 才能够发挥作用。若仅有 allow_url_include 配置项被开启则无法发挥 allow_url_include 配置项所起到的功能。 默认配置
自 PHP5.2 版本开始allow_url_include 配置项的默认配置均为 Off而 allow_url_fopen 配置项的默认配置始终为 On。 在 PHP 的实际应用中推荐将 allow_url_include 与 allow_url_fopen 配置项进行关闭这两个配置项通常用于从远程服务器 获取和执行文件但在某些情况下它们可能会被恶意利用导致安全漏洞和风险。 配置项关闭所导致异常
allow_url_include 与 allow_url_include 配置项的关闭导致 file_get_contents 与 inlcude 等函数无法访问远程文件而引发的问题都将使 PHP 引发 Warning 异常。Warning 异常的产生并不会导致 PHP 程序的立即终止。 运行时配置 ini_set()
除了 php.ini 文件之外PHP 还允许 在脚本运行过程中通过 ini_set() 函数来动态修改某些配置选项的值这些更改只在 当前脚本运行时生效并不会影响全局配置。这为开发者提供了在单个脚本或应用的执行过程中调整配置的灵活性。
限制
在 PHP 中不同配置项所能够采取的配置方法可能是不同的并不是所有的选项都可以在运行时通过 ini_set() 函数来修改。ini_set() 函数允许你在脚本运行时动态地设置配置选项但有些选项可能由于 安全或系统级别的限制 而不能通过 ini_set() 来修改。allow_url_include 与 allow_url_fopen 就是这样的配置项。
如果您需要查看某个配置项所 允许的配置方式请访问由 PHP 官方提供的 ini.list.php 页面。