如何获得 PHP include 函数来处理代理设置?

How to get the PHP include function to work with proxy settings?

<?php
$incfile = $_REQUEST["file"];
include($incfile);
?>

upload.php 文件:

<?php
$context = array(
    'http' => array(
        'proxy' => "tcp://proxy.example.com:80",
        'request_fulluri' => true,
        'verify_peer'      => false,
        'verify_peer_name' => false,
    )
);
stream_context_set_default($context);
?>

proxy.php 文件:

auto_prepend_file=proxy.php
allow_url_include=1

php.ini:

我浏览到 http://testexample.com/upload.php?file=http://example.com/file.php but http://example.com/file.php 超时并出现错误警告:包含 ():无法打开流:连接超时。我玩过 echo file_get_contents 并使用了 URL 路径并且工作正常,因为它似乎符合代理设置。那么有谁知道使用 include 可能会出现什么问题,或者为什么它不使用我的代理设置?

编辑:作为解决方法,我使用了以下代码:

<?php
$incfile = $_REQUEST["file"];
$filecontent = file_get_contents($incfile);
eval($filecontent);
?>

虽然这个问题是它读入 PHP 作为一个字符串而不是整个文件。因此,我必须删除 PHP 开始和结束标记,这些标记会更改 GET 请求正文,从而影响我的结果。因此,尽管它可以正常工作,但 include 函数确实是我所需要的。

因此您需要 example.com 的 http 请求通过代理。example.com。简单地覆盖 example.com 的 DNS 以指向代理就足够了吗?example.com - 可能在主机文件中 - 在这个开发服务器上?那么你可以

include 'http://example.com/file.php';

如果您想将解决方案限制为 PHP,您可以为您的代理定义一个自定义流包装器。

http://php.net/manual/en/function.stream-wrapper-register.php

http://php.net/manual/en/stream.streamwrapper.example-1.php