ОШИБКА Доступ запрещен при использовании php file_get_content

Я использую php file_get_contents для получения веб-страницы.
Когда я делаю это с моего локального хоста, все работает хорошо.
Но как только я делаю это с моего общего хостинга, я получаю это сообщение об ошибке:

ОШИБКА
Доступ запрещен
Доступ запрещен политикой безопасности
В настоящее время политика безопасности вашей сети не позволяет разрешить ваш запрос. Пожалуйста, свяжитесь с вашим администратором, если вы считаете, что это неправильно.

это заголовок, который я возвращаю

array(4) { [0]=> string(22) "HTTP/1.0 403 Forbidden" [1]=> string(23) 
"Content-Type: text/html" [2]=> string(17) "Connection: close" [3]=> string(19) 
"Content-Length: 353" }

код простой

$page = file_get_contents('http://www.somedomain.com/');

если я попытаюсь перейти на текущую страницу, это сработает

 $page = file_get_contents('http://stackoverflow.com/questions/10565054/error-access-denied-when-using-php-file-get-content');

Любые идеи ?


person yossi    schedule 12.05.2012    source источник
comment
У вашего общего хоста такие же настройки php и включены обертки URL-адресов fopen?   -  person Explosion Pills    schedule 12.05.2012
comment
когда я читаю из другого домена, он работает   -  person yossi    schedule 12.05.2012
comment
проверьте, отключен ли allow_url_fopen на вашем общем хостинге, я предполагаю, что это вызывает проблему.   -  person Ibrahim Azhar Armar    schedule 12.05.2012
comment
Он не возвращает false, он возвращает действительный ответ HTTP; это действительно работает. Проблема в том, что веб-сервер возвращает 403 запрещено. Нам нужно выяснить, почему. Можете ли вы опубликовать код? Мне любопытно, устанавливаете ли вы какой-либо контекст в этом вызове file_get_contents.   -  person Tremmors    schedule 12.05.2012


Ответы (2)


Удаленный веб-сервер отклоняет ваш запрос. Там не говорят конкретно, почему он отказывает вам. Возможно, сервер настроен на запрет диапазона IP-адресов, который включает в себя местонахождение вашего общего хостинга. Возможно, серверу требуется определенная информация заголовка (например, запись хоста, определенный user_agent или что-то в этом роде). Попробуйте настроить некоторые элементы контекста HTTP, чтобы успокоить сервер, с которым вы пытаетесь связаться. Вот пример со страницы file_get_contents.

function file_get_contents_utf8($fn) { 
    $opts = array( 
        'http' => array( 
            'method'=>"GET", 
            'header'=>"Content-Type: text/html; charset=utf-8" 
        ) 
    ); 

    $context = stream_context_create($opts); 
    $result = @file_get_contents($fn,false,$context); 
    return $result; 
}  

Если вы можете получить доступ к цели из своего браузера, попробуйте продублировать все заголовки, которые отправляет ваш браузер. В большинстве браузеров есть какой-то плагин, который точно показывает, какие заголовки выводятся по запросу.

person Tremmors    schedule 12.05.2012
comment
я пробовал это, но это не помогло, я пробовал с VPS без установки каких-либо заголовков, и это сработало, я предполагаю, что мой общий IP-адрес хоста запрещен в домене, с которого я пытаюсь читать. - person yossi; 12.05.2012
comment
... или есть прокси-сервер, который мешает вам добраться до места назначения. - person Tremmors; 13.05.2012

Так что веб-сервер проверил браузер и отклонил ваше соединение. Вы должны попробовать функции fsock.

person Minh Nguyen    schedule 12.05.2012