2

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

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

allow_url_include = On and 
allow_url_fopen = On 

但它仍然失败。

1.下面是include定义的,/test/foo.php其中包含同一服务器下的文件/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' 用于包含 (include_path='.:/usr/share/pear:/usr/share/php') 在第 36 行的 /test/foo.php

4

1 回答 1

0

如果

 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 将允许您以这种方式访问​​代码)

于 2013-07-08T20:58:58.913 回答