Проблемы с PHP file_get_contents() в RHEL 6

Хорошо, у меня есть два Linux-бокса, работающих за прокси-сервером. Оба ящика настроены на обход фильтрации путем подключения к порту 801.

Вставка A — Fedora Core 12 / PHP 5.3.1

Вставка B — RHEL 6/PHP 5.3.3

В поле A я могу использовать file_get_contents() для подключения к внешнему сайту.

<?php
$opts = array(
              'http' => array(
                              'proxy' => 'tcp://10.136.132.1:801',
                              'request_fulluri' => true
                             )
             );

$cxContext = stream_context_set_default($opts);
echo file_get_contents("http://www.google.com");

В результате отображается домашняя страница Google.

В поле B я запускаю тот же код, но получаю эту ошибку:

Warning: file_get_contents(http://www.google.com): failed to open stream: Permission denied

Оба ящика находятся в одной сети и за одним и тем же прокси-сервером. Есть ли параметр, которого мне не хватает в Apache или PHP, который позволит file_get_contents работать с Box B?


person amburnside    schedule 01.05.2012    source источник
comment
Что вам говорит print_r($http_response_header)?   -  person Ja͢ck    schedule 01.05.2012
comment
В поле B $http_response_header является неопределенной переменной. На Box A он выдавал информацию заголовка в массиве. Что-то нужно включить, чтобы это заработало?   -  person amburnside    schedule 01.05.2012
comment
Если заголовки ответов указывают на ошибку 4xx, вероятно, это не проблема PHP.   -  person Ja͢ck    schedule 01.05.2012
comment
Я ничего не получаю в ответ - в поле B PHP не видит $http_response_header как системную функцию. Он думает, что это переменная, которая не была объявлена   -  person amburnside    schedule 01.05.2012


Ответы (2)


Похоже, у вас включен SELinux, он по умолчанию блокирует любые исходящие соединения Apache. Попробуйте запустить это в своей оболочке от имени пользователя root:

setsebool -P httpd_can_network_connect on

Дополнительную информацию о логических значениях SELinux можно найти здесь: http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

person Kaivosukeltaja    schedule 01.05.2012
comment
Это работает. SELinux действительно был проблемой. Спасибо за помощь, Кайвосукельтая. Очень признателен! - person amburnside; 01.05.2012

Это может быть связано с тем, что Google блокирует запросы, которые, кажется, исходят от бота или скрипта. Возможно, потому что Box A устанавливает дополнительные заголовки при запросе к google.

Попробуйте открыть другой веб-сайт на Box b

person dynamic    schedule 01.05.2012