【问题标题】:Failed to open stream error : Http request failed无法打开流错误:Http 请求失败
【发布时间】:2025-12-14 02:45:01
【问题描述】:

在发布这个之前,我已经浏览了这个论坛上的所有主题。没有一个解决方案能够解决我的问题,所以我不得不打开一个新线程。

我的代码中有以下include,但出现“无法打开流:HTTP 请求失败!”错误。我已经在php.ini 有这个设置了:

allow_url_include = On and 
allow_url_fopen = On 

但还是失败了。

1.下面是/test/foo.php中定义的include,包含/test/bar.php下同一服务器上的文件

<div class="tab-content" style=''>
<div class="tab-pane active" id="my1"><?php include('http://'. $_SERVER['SERVER_NAME'] . ':' .
$_SERVER['SERVER_PORT'] . "/bar.php?env=test1&days=3&start=$start&end=$end");?></div>
</div>

2.目录结构如下:

a) /test/foo.php --> 这包含在我自己的服务器中。 b) /test/bar.php

3.Apache文档根目录指向/testlike

/var/www/html --> /test

4.echo __DIR__ 向我显示“/test”,因此它肯定指向正确的目录。

5.我已授予此目录的完全权限以防万一,但没有运气。

6. Apache 错误日志中包含上述内容之一的确切错误。它不适用于上述任何一项。服务器名称和端口被有意从下面的日志中删除。

[Sun Jul 07 15:01:47 2013] [error] [client] PHP 警告:include(http://:/bar.php?env=my1&days=3&start=2013-06-07&end=2013-07 -07):打开流失败:HTTP 请求失败!在第 36 行的 /test/foo.php
[Sun Jul 07 15:01:47 2013] [error] [client ] PHP 警告:include(): Failed opening 'http://:/bar.php?env=my1&days=3&start=2013-06-07&end=2013 -07-07' 在第 36 行的 /test/foo.php 中包含 (include_path='.:/usr/share/pear:/usr/share/php')

【问题讨论】:

  • 那么,对于初学者来说,foo.php 第 36 行的代码是什么?
  • 这通常是由于服务器位于路由器后面,该路由器具有 DNS 名称的实际 IP 地址,但是更常见的是包含本地 files 而不是 url ...
  • 感谢大家的回复。如果我包含本地文件而不是 URL,关于如何添加查询参数的任何想法?

标签: php


【解决方案1】:

如果

 include('http://'. $_SERVER['SERVER_NAME'] . ':'
     . $_SERVER['SERVER_PORT'] 
     . "/bar.php?env=test1&days=3&start=$start&end=$end");

正在尝试从

获取
 http://:/bar.php?env=my1&days=3&start=2013-06-07&end=2013-07-07

这意味着 $_SERVER['SERVER_NAME'] 和 $_SERVER['SERVER_PORT'] 是空白的。你是从命令行运行的吗?

(我假设您知道,即使使用文字值,您也已经在系统中创建了一个很大的安全漏洞,生成的脚本运行速度要比直接包含文件慢得多,并且即使填充了变量,它也不会意味着许多主机上的路由/DNS将允许您以这种方式访问​​代码)

【讨论】:

    最近更新 更多