Простой html-файл dom, чтобы html не работал - есть ли обходной путь?


<?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 могут быть отключены на сервере, чтобы остановить это?

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

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

Author: JasonMArcher, 2013-09-07

4 answers

Как я уже сказал, ваш пример отлично работает для меня... Но попробуйте сделать это, используя вместо этого 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);

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

enter image description here

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

 28
Author: Enissay, 2013-09-07 00:45:03

Удалите точку с запятой из php.ini и перезапустите сервер Apache, чтобы включить настройку модуля php

; Windows Extensions
...
;extension=php_openssl.dll
...
 3
Author: Chitsai Yeh, 2016-08-23 02:05:09

Вы должны установить "allow_url_fopen" как TRUE в "php.ini", чтобы разрешить доступ к файлам через HTTP или FTP.
Некоторые поставщики хостинга отключают флаг PHP "allow_url_fopen" для проблем безопасности.

 2
Author: shahil, 2015-01-07 23:01:25
$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);

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

 1
Author: mr.buzz, 2014-03-31 08:37:26