Почему не работает file_get_contents () ; для внешних файлов или как перекинуть код страниц

maximkob maximkob

<?php
echo file_get_contents('http://www.google.ru/');
?>
… Так выдает ошибку.

Задача поместить код Googl'а ко мне на страницу

Дополнено (1). если таким способом не как нельзя, то как обойти это и добиться требуемого результата?
Дополнено (2). "google.com" -  это пример

none7 none7

У меня три варианта:
php собран без поддержки сетевого доступа
ini переменная allow_url_fopen установлена в false
хостинг не даёт доступа к сети

Гость Гость

Получайте данные функцией fopen

Гость Гость

Если хостер запретил (например если бесплатный хостинг), то никак не обойти. Купите дешёвый платный хостинг, например, http://jino.ru/?par=services

Вообще лучше всего вытягивать Html-страницы используя cURL.

zerohold zerohold

Да все куда банальнее и прозаичнее.
file_get_contents не обрабатывает редирект 301 302, которые установлены сейчас на google.ru.
Чтобы их корректно обрабатывать требуется обрабатывать такую хрень:
$options=curl_init();// инициализация опций для корректного скачивания файла
curl_setopt($options, CURLOPT_URL,$_url);// прописываем нужный url
curl_setopt($options, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');// каким браузером представляться
curl_setopt($options, CURLOPT_TIMEOUT, 60);// максимальное время выполнения операции в секундах
curl_setopt($options, CURLOPT_MAXCONNECTS, 1);// Максимальное количество постоянных соединений
// curl_setopt($options, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/logs/cookie');
// curl_setopt($options, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/logs/cookie');
curl_setopt($options, CURLOPT_AUTOREFERER, 1);// автоматически ставить REFERER
curl_setopt($options, CURLOPT_SSL_VERIFYPEER, 0);// отключить подстановку сертификатов
curl_setopt($options, CURLOPT_SSL_VERIFYHOST, 0);// отключение проверки ssl хоста
и так далее

RR42 RR42

Однозначно curl. Читай. Может делать всё, любую работу в интернете.
Вот все, что мне нужно было для нормальной работы бота:

function easy_curl_exec($url, $postdata = null)
{
   $curl = easy_curl_init($url, $postdata);
   $result = curl_exec($curl);
   curl_close($curl);
   return $result;
}

function easy_curl_init($url, $postdata = null)
{
   $cookie = get_cookie($url);
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_USERAGENT, 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)');
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   if ($postdata ≠ null) curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
   curl_setopt($curl, CURLOPT_TIMEOUT, 30);
   if ($cookie ≠ null) curl_setopt($curl, CURLOPT_COOKIE, $cookie);
   return $curl;
}

Там у меня еще куки брались из конфига. Можешь удалить эту строчку.

Пример (хз работает сейчас или нет):

function vk_set_status($status) {
   if (strlen($status) > 0) {
       $sniffer = easy_curl_exec('http://vkontakte.ru/profile.php');
       preg_match('#sh\' value=\'(.*?)\'#i', $sniffer, $activityhash);
       $postdata = array(
           "setactivity" => $status,
           "activityhash" => $activityhash[1]
       );
       easy_curl_exec('http://vkontakte.ru/profile.php', $postdata);
   }
}

Гость Гость

А никто даже и не догадывался, что file_get_content не работает для внешних ссылок при стандартной настройке веб сервера…
Попробуйте воспользоваться следующей функцией:

function curl_get_file_contents($URL)
   {
       $c = curl_init();
       curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($c, CURLOPT_URL, $URL);
       $contents = curl_exec($c);
       curl_close($c);

       if ($contents) return $contents;
           else return FALSE;
   }

Добавить комментарий | Похожие обсуждения

Вопросы и ответы по Вконтакте
Вопросы и ответы

Популярные вопросы и ответы о социальной сети www.vkontakte.ru (vk.com)