сканер моего сайта умер во время работы - PullRequest
0 голосов
/ 27 июня 2011

Я написал сканер сайта, чтобы получить ссылки и изображения для создания карты сайта, но он убил во время работы!так что это не весь мой класс

class pageCrawler {

    .......

    private $links = array();

    public function __construct ( $url ) {

    ignore_user_abort ( true );
    set_time_limit ( 0 );
    register_shutdown_function ( array ( $this, 'callRegisteredShutdown' ) );
    $this->host = $urlParts [ 'host' ];
    $this->crawlingUrl ( $url );
    $this->doCrawlLinks ();

}

$this->crawlingUrl ( $url ): в начале основной адрес, установленный для этого метода (например, http://www.mysite.com)
getUrl(): подключиться к URL-адресу с помощью fsockopen, затем получить URL-адрессодержимое
findLinks(): вернуть a href и img src, а затем сохранить возврат ссылок в $this->links[], затем я выведу что-нибудь, чтобы очистить вывод и вставить после этого следующий код:

echo str_pad ( " ", 5000 );
flush ();

$this->doCrawlLinks(): это проверка $this->links и выполнение того же процесса, который я описал сверху для первого элемента $this->links
, затем снова сдвинем первый элемент doCrawlLinks() запустим и получим URL-адрес первого элемента, затем сдвинем первый элемент$this->links до $this->links становится пустым


это общая тенденция моего класса, это работа, но внезапно она внезапно рухнула. Я установил set_time_limit(0), чтобы сделать навсегда, но мой процесс не закончился, потому что мой shoutdoownфункция не выполняется, я запутался, где моя проблема

1 Ответ

1 голос
/ 27 июня 2011

Дикая догадка - у вас есть рекурсия в doCrawlLinks ()?Глубокая рекурсия может просто привести к сбою процесса.Или может произойти сбой из-за ограничения памяти на процесс.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...