Как использовать функцию file get contents() с неанглийскими символами в URL?
Я получаю эту ошибку, когда пытаюсь получить доступ к неанглийским (Unicode) URL-адресам с помощью функции PHP file_get_contents()
. URL-адрес был: http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF
У меня есть такая ошибка:
Предупреждение: file_get_contents(http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF) [функция.file-get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.0 403 запрещено..
Фатальная ошибка: вызов функции-члена find() на не-объекте в G:xampphtdocscodeshtmlParse1.php в строке 8
Существует ли какое-либо ограничение для функции file_get_contents()
? Принимает ли он только английские URL-адреса?
2 ответа:
Вы пропускаете информацию заголовка, как агент пользователя. Я бы посоветовал вам просто использовать просто использовать
curl
$url = 'http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF'; $ch = curl_init($url); // initialize curl handle curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"); curl_setopt($ch, CURLOPT_REFERER, "http://ml.wikipedia.org"); curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); $data = curl_exec($ch); print($data);
Если вы должны использовать
file_get_content
$options = array( 'http'=>array( 'method'=>"GET", 'header'=>"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" . "Cookie: centralnotice_bucket=0-4.2; clicktracking-session=M7EcNiC2Zcuko7exVGUvLfdwxzSK3Boap; narayam-scheme=ml\r\n" . "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" ) ); $url = 'http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF'; $context = stream_context_create($options); $file = file_get_contents($url, false, $context); echo $file ;
Если есть
403 Forbidden
, соединение должно работать. Это просто предупреждение, что веб-сервер ответил кодом состояния 403. Википедия запрещает загрузку без действительного агента пользователя:Вторая ошибка должна быть из следующих строк, которые обрабатывают результат (строковый объект) вашего вызоваСкрипты должны использовать информативную строку User-Agent с контактной информацией, иначе они могут быть заблокированы IP-адресом без предварительного уведомления.
file_get_contents(...)
.Edit: Вы должны попробуйте настроить агент пользователя, например, с помощью
ini_set('user_agent', 'wikiPHP');
Перед выполнением запроса. Это должно сработать нормально.