За последние 24 часа нас посетили 93580 программистов и 5638 роботов. Сейчас ищут 1709 программистов ...

file_get_html переполняет память. Парсер.

Тема в разделе "PHP для новичков", создана пользователем karama23, 30 окт 2016.

  1. karama23

    karama23 Новичок

    С нами с:
    29 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте.

    Имею парсер, в парсере использую конструкцию:

    $perem1 = file_get_html('https://www.link.tld');
    foreach($perem1->find('span.breadcrumbs-link-count') as $perem2)
    echo "$perem2->plaintext" . '<br>';

    В парсере таких запросов много. И получается, что переменные вида $perem1, содержащие целые страницу в себе, не очищаются и забивают всю память. Соответственно скрипт не отрабатывает до конца.

    Мне нужно как-то очистить переменную $perem1 после того как отработает find и запишет данные в переменную $perem2.

    За ранее спасибо.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Только в правилах запрещено обсуждение парсеров. Используй API сайта вместо парсинга.
    --- Добавлено ---
    link.tld так круто, но можно по рекомендациям IANA использовать специальные домены для примеров: example.com, example.org, example.net https://ru.wikipedia.org/wiki/Домены_для_примеров
     
    karama23 нравится это.
  3. karama23

    karama23 Новичок

    С нами с:
    29 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Насчет IANA я понял.

    Насчет парсера - у сайта нет своего API. По другому не получить данных.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    unlink() ?
     
  5. karama23

    karama23 Новичок

    С нами с:
    29 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Но у меня не создается никакого файла. Все в памяти.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    туплю с утра... попил кофе - unset() конечно же
     
  7. karama23

    karama23 Новичок

    С нами с:
    29 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Получается вот что:

    $perem1 = file_get_html('https://www.link.tld');
    foreach($perem1->find('span.breadcrumbs-link-count') as $perem2)
    unset ($perem1);
    echo "$perem2->plaintext" . '<br>';

    При количестве таких конструкций более 20 получаю ошибку:
    Fatal error: Allowed memory size of ...

    Как и без unset ($perem1);
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    я подсказал...
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    А может быть они просто не хотят, чтобы кто-то получал их данные? Может нужно сначала поговорить с разрабами сайта, прежде, чем тащить у них контент, в который они вкладывали труд?