2016-05-18 6 views
0

я пишу веб-искатель на PHP, я использую следующий метод:быстрый способ загрузить HTML-файл в PHP скрипт

Текущий метод

function getPublicationData($url){ 
    static $seen = array(); 
    if (isset($seen[$url])) { 
     return; 
    } 
    $seen[$url] = true; 

    $cURL = curl_init($url); 
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true); 
    $htmlDoc = curl_exec($cURL); 

    $dom= new DOMDocument('1.0'); 
    libxml_use_internal_errors(true); 
    $dom->loadHTML($htmlDoc); 
    $dom_xpath = new DOMXPath($dom); 

    $strongElements = $dom_xpath->query("//strong[@class='publication-meta-type']"); 
    foreach($strongElements as $strongElement){ 
     echo $strongElement->nodeValue; 
    } 
} 

Проблема заключается в том, что PHP имеет 30-секундный временной интервал, и мне нужно получить доступ к довольно большому числу страниц (мой хост не позволяет мне изменить срок).

Было бы неплохо иметь возможность получить только несколько конкретных узлов со страницы или что-то в этом роде.

Может ли кто-нибудь дать мне решение?

+0

@Martin Я подозреваю, что OP находится на общедоступном хостинге. Хосты, которые ограничивают время выполнения PHP («Мой хост не позволяет мне изменить срок»), вряд ли позволят вам отредактировать php.ini, чтобы удалить эти ограничения. – ceejayoz

+1

@ceejayoz Я только что прочитал это и так удалил свой комментарий :-p – Martin

+0

Как работает этот метод? Вы запускаете его из браузера или из какого-то скрипта cron? – moscar

ответ

1

Относящаяся к работе часть - это почти наверняка HTTP-запросы. Не так много вы можете сделать, чтобы ускорить это.

Решение? Время получить новый хост.

1

Сделайте асинхронный вызов в вашу базу данных с помощью html.

ЧАСТЬ I

static $seen = array(); 
if (isset($seen[$url])) { 
    return; 
} 
$seen[$url] = true; 

$cURL = curl_init($url); 
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true); 
$htmlDoc = curl_exec($cURL); 
//save in file, database, whatever 

ЧАСТЬ II

Создать хроны, или другой способ для вызова вашей функции для анализа данных и сохранять в базе данных:

$htmlDoc = //get data from whatever you decided to save 
$dom= new DOMDocument('1.0'); 
libxml_use_internal_errors(true); 
$dom->loadHTML($htmlDoc); 
$dom_xpath = new DOMXPath($dom); 

$strongElements = $dom_xpath->query("//strong[@class='publication-meta-type']"); 
foreach($strongElements as $strongElement){ 
    echo $strongElement->nodeValue; 
.... 

 Смежные вопросы

  • Нет связанных вопросов^_^