<?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 но http://example.com/file.php Тайм-аут с ошибкой Предупреждение: include (): не удалось открыть поток: Превышено время ожидания соединения. Я поиграл с echo file_get_contents и использовал URL-путь, и он отлично работает, так как кажется, что он соблюдает настройки прокси. Так кто-нибудь знает, в чем проблема с использованием include или почему он не использует мои настройки прокси?
Изменить: В качестве обходного пути я использовал этот код ниже:
<?php
$incfile = $_REQUEST["file"];
$filecontent = file_get_contents($incfile);
eval($filecontent);
?>
Однако проблема в том, что он читает в PHP как строку, а не весь файл. Поэтому я должен удалить начальный и конечный теги PHP, которые изменяют тело запроса GET, что влияет на мои результаты. Так что, несмотря на то, что это работает, функция include — это то, что мне нужно.
Так что вам нужны ваши http запросы для example.com, чтобы перейти на proxy.example.com. Будет ли достаточно просто переопределить DNS для example.com, чтобы он указывал на proxy.example.com — возможно, в файле hosts — на этом сервере разработки? Тогда вы могли бы
include 'http://example.com/file.php';
Если вы хотите ограничить решение PHP, вы можете определить специальную потоковую оболочку для вашего прокси.
http://php.net/manual/en/function.stream-wrapper-register.php
Других решений пока нет …