Вопрос по file-get-contents, simple-html-dom, html-parsing, php – Простой HTML-файл file_get_html не работает - есть ли обходной путь?

8
<?php
// Report all PHP errors (see changelog)
error_reporting(E_ALL);

include('inc/simple_html_dom.php');

    //base url
    $base = 'https://play.google.com/store/apps';

    //home page HTML
    $html_base = file_get_html( $base );

    //get all category links
    foreach($html_base->find('a') as $element) {
        echo "<pre>";
        print_r( $element->href );
        echo "</pre>";
    }

    $html_base->clear(); 
    unset($html_base);

?>

У меня есть приведенный выше код, и я пытаюсь получить определенные элементы страницы Play Store, но она ничего не возвращает. Возможно ли, что некоторые функции PHP могут быть отключены на сервере, чтобы остановить это?

Приведенный выше код отлично работает на других сайтах.

Есть ли обходной путь?

Работает нормально для меня, хотя ... Enissay

Ваш Ответ

4   ответа
1
$post = curl_init(); 
curl_setopt($post, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($post, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($post, CURLOPT_HEADER, 0);
curl_setopt($post,CURLOPT_RETURNTRANSFER, true);
curl_setopt($post,CURLOPT_URL,$website);
curl_setopt($post,CURLOPT_POST,1);
curl_setopt($post,CURLOPT_POSTFIELDS,"regno=$Number");
curl_setopt($post, CURLOPT_FOLLOWLOCATION, True);
curl_getinfo($post, CURLINFO_HTTP_CODE);
$curlresponse = curl_exec($post);
curl_close($post);  
$dom = new DOMDocument();
$dom->loadHTML($curlresponse);

: loadHTML () [domdocument.loadhtml]: htmlParseStartTag: неуместно ЭТОТ URL:http://www.annauniv.edu/cgi-bin/result/cgrade.pl?regno=11210104001

30

ваш пример работает хорошо для меня ... Но попробуйте этот способ, используя вместо этого curl:

//base url
$base = 'https://play.google.com/store/apps';

$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_REFERER, $base);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$str = curl_exec($curl);
curl_close($curl);

// Create a DOM object
$html_base = new simple_html_dom();
// Load HTML from a string
$html_base->load($str);

//get all category links
foreach($html_base->find('a') as $element) {
    echo "<pre>";
    print_r( $element->href );
    echo "</pre>";
}

$html_base->clear(); 
unset($html_base);

Он получает все ссылки, как и ожидалось:

И убедитесь, что у вас естьphp_openssl а такжеphp_curl установлен...

вау спасибо, как вы сказали, мне просто нужно было активировать расширение "php_openssl", и оно теперь работает :) Я использую WAMP Server в Windows, и он был неактивен по умолчанию. Спасибо чувак! Albo Best
3

чтобы включить настройку модуля php

; Windows Extensions
...
;extension=php_openssl.dll
...
2

чтобы разрешить доступ к файлам через HTTP или FTP.
Некоторые хостинг-провайдеры отключают флаг PHP «allow_url_fopen» из-за проблем безопасности.

Похожие вопросы