如何让 PHP 包含函数使用代理设置


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

上传.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);
?>

代理.php文件:

auto_prepend_file=proxy.php
allow_url_include=1

PHP.ini:

我浏览到 http://testexample.com/upload.php?file=http://example.com/file.php 但 http://example.com/file.php 超时并显示错误警告:include((:无法打开流:连接超时。我玩了回声file_get_contents并使用了 URL 路径,它工作正常,因为它似乎遵循代理设置。那么有谁知道使用 include 可能有什么问题,或者为什么它不使用我的代理设置?

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

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

这样做的问题是它在PHP中以字符串而不是整个文件的形式读取。所以我必须删除 PHP 开始和结束标签,这会更改 GET 请求正文,从而影响我的结果。因此,即使它有效,包含功能也是我真正需要的。

所以你需要你的 http 请求来 example.com 去通过 proxy.example.com。简单地覆盖DNS是否足以使 example.com 指向此开发服务器上的 proxy.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

相关内容

  • 没有找到相关文章

最新更新