Intereting Posts
Запретить пользователям открывать несколько экземпляров одного и того же веб-сайта WordPress использует UTF-8, а остальная часть моего сайта использует ISO-8859-1 – кодировку символов Классы PHP: когда использовать :: vs. ->? Как обновить / расширить токены доступа к Facebook с помощью PHP? Отправлять данные от android на сервер через JSON Как установить тайм-аут для fread при доступе к соке? Передача URL-адреса URL-адреса в форму symfony2 с методом get Как поместить окно предупреждения с помощью PHP? Как сбросить автоматическое приращение при удалении пользователя laravel? CakePHP – запрос возвращает пустое поле, если в нем есть специальный символ Ошибка возврата файла загрузки 302 Vim inoremap для определенных типов файлов Facebook PHP SDK Бросает непонятное исключение OAuthException Java-клиент PHP-сервер UDP Hole Punching пример кода Длинные запросы блокируют другие запросы в Apache и PHP

создание «простого» php url proxy

Мне нужно реализовать простой PHP-прокси в веб-приложении, которое я создаю (его флеш-интерфейс и поставщик услуг назначения не разрешают редактировать их файл crossdomain.xml)

Могут ли любые php-гуру дать рекомендации по следующим двум вариантам? Кроме того, я думаю, но не уверен, что мне нужно также включить информацию о заголовке.

Спасибо за любую обратную связь!

Опция 1

$url = $_GET['path']; readfile($path); 

option2

  $content .= file_get_contents($_GET['path']); if ($content !== false) { echo($content); } else { // there was an error } 

Прежде всего, никогда не включайте файл, основанный только на пользовательском вводе. Представьте, что произойдет, если кто-нибудь вызовет ваш скрипт следующим образом:

http://example.com/proxy.php?path=/etc/passwd

Затем на вопрос: какие данные вы проксируете? Если какой-либо вид вообще, то вам нужно определить тип контента из контента и передать его, чтобы получающий конец знал, что он получает. Я бы предложил использовать что-то вроде HTTP_Request2 или что-то похожее на Pear (см. http://pear.php.net/package/HTTP_Request2 ), если это вообще возможно. Если у вас есть доступ к нему, вы можете сделать что-то вроде этого:

 // First validate that the request is to an actual web address if(!preg_match("#^https?://#", $_GET['path']) { header("HTTP/1.1 404 Not found"); echo "Content not found, bad URL!"; exit(); } // Make the request $req = new HTTP_Request2($_GET['path']); $response = $req->send(); // Output the content-type header and use the content-type of the original file header("Content-type: " . $response->getHeader("Content-type")); // And provide the file body echo $response->getBody(); 

Обратите внимание, что этот код не был протестирован, это только для того, чтобы дать вам отправную точку.

Вот еще одно решение, использующее завиток. Кто-нибудь может комментировать ???

 $ch = curl_init(); $timeout = 30; $userAgent = $_SERVER['HTTP_USER_AGENT']; curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); $response = curl_exec($ch); if (curl_errno($ch)) { echo curl_error($ch); } else { curl_close($ch); echo $response; }