Неустранимая ошибка: недостаточно памяти (выделено 377487360) (попытка выделить 371200000 байт) - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу очистить данные от URL, который содержит другие URL, содержит сведения о каждом элементе, используя simple_html_dom.php

<?php
include 'simple_html_dom.php';
// Create DOM from URL or file
$url='www.example.com';
$count=0;
$Links_Array = array();
$ArrayOfDomHtml=array();

// Find all links in the first page
if(!empty($url))
{
    $html = file_get_html($url);
    foreach($html->find('.li_subject .item_link') as $element) 
    {
             $Links_Array[$count]=$element->href;
             $count++;    
    }
}


// Get  details information from every item

//  Create DOM from URLS


if(!empty($Links_Array))
{
    $count=0;
    foreach($Links_Array as $element) 
            {
                 $ArrayOfDomHtml[$count] = file_get_html($element);
                 $count++;    
            }
}

// Get the title

if(!empty($ArrayOfDomHtml))
{
    $count=0;
    foreach ($ArrayOfDomHtml as  $value) 
    {

          $array2[$count] = array('title' => $value->find('.item_subject') );
          $count++;
    }
}
foreach ($array2 as $value) {
    print_r( $value);
}
?>

Я использую сервер xampp. Я хочу напечатать значение $ array2. У меня естьпроблема памяти Я искал проблему, я нашел несколько ответов, таких как установка в файле php.ini

  • set memory_limit = -1

  • uncomentrealpath_cache_size = 4096k

  • uncoment realpath_cache_ttl = 120

я сделал все эти операции, но он все еще не работает

Error

строка 49 - это print_r ($ value);

Edit

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

<?php
include 'simple_html_dom.php';
// Create DOM from URL or file

// Find all links in the first page
if(!empty($url))
{
    $html = file_get_html($url);
    foreach($html->find('.li_subject .item_link') as $element) 
    {
             $Links_Array[$count]=$element->href;
             $count++;    
    }
}


// Get  details information from every item

//  Create DOM from URLS

if(!empty($Links_Array)) {
    $count=0;
    foreach($Links_Array as $url) {
          $html = file_get_html($url);
          $DetailItem[$count] = array('title' => $html ->find('.item_subject') );
          $count++;
    }
}
print_r($DetailItem);
?>

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

То, что вы должны делать сначала пытается заставить вашу программу использовать меньше памяти.

Вместо очистки всего HTMLна планете в память, и затем анализирует один конкретный бит нужной вам информации, объединяет их и сохраняет только тот бит, который вам действительно нужен.

if(!empty($Links_Array)) {
    $count=0;
    foreach($Links_Array as $element) {
          $html = file_get_html($element);
          $array2[$count] = array('title' => $value->find('.item_subject') );
          $count++;
    }
}
0 голосов
/ 14 декабря 2018

Что я должен сделать, так это найти файл php.ini, найти строку, в которой написано memory_limit, и установить его на 2048M на всякий случай, чтобы выяснить, если это из-за памяти.

Тогда вам следуетсохраните это изменение и перезапустите сервер (в зависимости от того, какой сервер вы используете apache или nginx).

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