如何获得 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
<?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