Простое объяснение того, что такое Исключение из связанного исключения:
Подумайте, что в одном из поездов есть его отсеки: D1, D2, D3. Один пассажир пришел, чтобы войти в поезд, и у него есть билет на D4. теперь, что будет. пассажир хочет войти в отсек, который не существует, поэтому явно возникнет проблема.
Тот же сценарий: всякий раз, когда мы пытаемся получить доступ к списку массивов и т. д., мы можем получить доступ только к существующим индексам в массив. array[0]
и array[1]
. Если мы попытаемся получить доступ к array[3]
, его там не будет, поэтому появится индекс из связанного исключения.
Это не проблема с вашим скриптом, а с ресурсом, который вы запрашиваете. Веб-сервер возвращает «запрещенный» код состояния.
Возможно, он блокирует PHP-скрипты, чтобы предотвратить очистку, или ваш IP-адрес, если вы сделали слишком много запросов.
Вы вероятно, следует поговорить с администратором удаленного сервера.
Проверяли ли вы свои права на файл? Я установил 777 в свой файл (в localhost, очевидно), и я исправил проблему.
Я понимаю, что это старый вопрос, но ...
Просто настройте мою локальную песочницу на linux с php7 и пробежав по ней. Используя сценарии запуска терминала, php вызывает php.ini для CLI. Я обнаружил, что опция user_agent была закомментирована. Я раскоментировал его и добавил пользовательский агент Mozilla, теперь он работает.
Вы можете изменить его, как это, в классе парсеров из строки 35 и дальше.
function curl_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function file_get_html()
{
$dom = new simple_html_dom;
$args = func_get_args();
$dom->load(call_user_func_array('curl_get_contents', $args), true);
return $dom;
}
Вы пробовали другой сайт?
Я получил тот же pb. Я только что активировал Youtube API от разработчиков консоли Google ... и он работал (не более запрещен: -)
Я не знаю, обесценен ли предмет, я думал просто поделиться идеей С наилучшими пожеланиями
Запишите это в simple_html_dom.php для меня это сработало
function curl_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
$dom = new simple_html_dom;
$args = func_get_args();
$dom->load(call_user_func_array('curl_get_contents', $args), true);
return $dom;
//$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
}
Кажется, что на удаленном сервере есть некоторый тип блокировки. Это может быть пользователь-агент, если это так, вы можете попробовать использовать завиток для имитации пользовательского агента веб-браузера следующим образом:
$url="http://www.example.com/viewProperty.html?id=".$id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);
curl_close($ch);
В моем случае сервер отклонил протокол HTTP 1.0 через его конфигурацию .htaccess. Кажется, file_get_contents
использует версию HTTP 1.0.
Я знаю, что это довольно старый поток, но подумал о том, чтобы поделиться некоторыми идеями.
Скорее всего, если вы не получите какой-либо контент во время доступа к веб-странице, возможно, он не хочет, чтобы вы могли получить контент. Итак, как он идентифицирует, что скрипт пытается получить доступ к веб-странице, а не человеку? Как правило, это заголовок User-Agent
в HTTP-запросе, отправленном на сервер.
Итак, чтобы веб-сайт подумал, что скрипт, обращающийся к веб-странице, также является человеком , вы должны измените заголовок User-Agent
во время запроса. Большинство веб-серверов, вероятно, разрешают ваш запрос, если вы установите заголовок User-Agent
на значение, которое используется некоторым обычным веб-браузером.
Список общих пользовательских агентов, используемых браузерами, приведен ниже:
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0'
$context = stream_context_create(
array(
"http" => array(
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
)
)
);
echo file_get_contents("www.google.com", false, $context);
Этот фрагмент кода подделывает пользовательский агент и отправляет запрос на https://google.com .
Ссылки:
Приветствия!
"header" => "User-Agent: <signature>"
, либо "user_agent" => "<signature>"
будут делать .
– Sz.
27 March 2018 в 11:06
403 forbidden
явно находится на удаленном сервере. Соединение работает нормально - попробуйте другой IP-адрес для проверки. Возможно, IP-адрес вашего сервера заблокирован на удаленном сервере – Pekka 웃 28 December 2010 в 12:50