[Помогите] Из XML собрать в массив

MilkeyWay

Постоялец
Регистрация
11 Июл 2011
Сообщения
142
Реакции
10
Всем привет!

Ребят,помогите дособрать данные в массив из XML,у меня произошел клин...походу утечка памяти...возможно в голове моей))

Код:
$xml = new SimpleXMLElement($dat->xml,LIBXML_NOCDATA);
      
        $data = array();
        $img = array();

  $y = 0;

foreach ($xml as $item) {

  $x = 0;
foreach ($item->images->item as $i) {  //тут происходит касяк,либо памяти не хватает(выделил 6гб),либо времени не хватает на обработку (1мин),если больше времени,то все зависает
         $q = (string) $i->attributes()->type;
           $img[$y][$q][$x] = $i;
           $x++;
}
      
  $y++;

$data[] = array(
         'product_id' => (int) $item->attributes()->id,
         'images'  => $img,  //проблема с добавлением картинок в массив
         'name'  => (string) $item->name,
         'price_retail' => (float) $item->attributes()->price_retail,
         'price_wholesale' => (float) $item->attributes()->price_wholesale,
         'price_retail_stock' => (float) $item->attributes()->price_retail_stock,
         'price_wholesale_stock' => (float) $item->attributes()->price_wholesale_stock,
         'date_change' =>  (string) $item->attributes()->date_change,
         'datetime_release' =>  (string) $item->attributes()->datetime_release,
         'archive' => (int) $item->attributes()->archive,
         'publication' => (int) $item->attributes()->publication,
         'available' => (int) $item->attributes()->available,
         'release' => (int) $item->attributes()->release,
         'description' => (string) $item->description
    );
}

или получаю такое в логах:

Код:
child pid 12177 exit signal Segmentation fault (11), possible coredump in /etc/apache2


xml:

Код:
[xml] => <?xml version="1.0" encoding="UTF-8"?><products><item id="407" date_change="2016-10-24 18:20:43" datetime_release="2014-09-19 00:00:00" price_retail="100" price_wholesale="50" price_retail_stock="0" price_wholesale_stock="0" release="1" archive="0" publication="1" available="1">
  <name><![CDATA[название]]></name>
  <name_eng><![CDATA[]]></name_eng>
<description><![CDATA[Описание]]></description>
<images>
  <item type="screenshot"><![CDATA[0.jpg]]></item>
  <item type="screenshot"><![CDATA[1.jpg]]></item>
  <item type="screenshot"><![CDATA[2.jpg]]></item>
  <item type="screenshot"><![CDATA[3.jpg]]></item>
  <item type="screenshot"><![CDATA[4.jpg]]></item>
  <item type="screenshot"><![CDATA[5.jpg]]></item>
  <item type="main"><![CDATA[6.jpg]]></item>
  </images>

Объясните на пальцах,что не так делаю?(как картинки закинуть в массив,с учетом type?)
 
Последнее редактирование:
тут происходит касяк,либо памяти не хватает(выделил 6гб),либо времени не хватает на обработку (1мин),если больше времени,то все зависает
Тебе нужно поделить запрос на маленькие порции.
Где то видел тему на nulled.cc, только не помню как называлась, где твой вопрос (похожий) ранее уже обсуждался и там советовали разбить запрос JS на маленькие порции.

Если найду тему, скину ссылку.

попробуй вывести значение $i, если значение больше 1000 - вывести сообщение с ошибкой и прервать цикл, может цикл вечный и т д.
 
Тебе нужно поделить запрос на маленькие порции.
Где то видел тему на nulled.cc, только не помню как называлась, где твой вопрос (похожий) ранее уже обсуждался и там советовали разбить запрос JS на маленькие порции.

Если найду тему, скину ссылку.

попробуй вывести значение $i, если значение больше 1000 - вывести сообщение с ошибкой и прервать цикл, может цикл вечный и т д.
мне бы на PHP(SimlpeXML). товаров более 2000,где-то картинки есть,где-то нет

зы надеюсь,что найдешь тему,с радостью глянул бы,т.к с XML знакомлюсь 3дня,все бы ничего,а уже 2 дня мозг ломаю,на ютубе видео в основном зарубежное((
 
ни у кого нет мыслей на этот счет?
 
за 1к руб. ктонить сможет дособрать картинки в массив,с видом:

array:
[screenshot]=[0]=>[http...][1]=>[http...]
[main]=[0]=>[http...]
и т.д

как-то так
 
Последнее редактирование:
Можно не сохранять все данные в массив, ведь их придётся потом в БД загружать. Не так ли?
А если скинешь файл, то я готов в течение пары дней "потыкать в него палкой" и предложить решение.
 
Можно не сохранять все данные в массив, ведь их придётся потом в БД загружать. Не так ли?
А если скинешь файл, то я готов в течение пары дней "потыкать в него палкой" и предложить решение.
потом,да,в бд. но не уловил смысл-почему не стоит добавлять все данные в массив?

файла нет,данные от поставщика по товарам получаю через curl,в ответ xml. структура xml пойдет?

зы хотя структура xml в 1м сообщении,далее после картинок идут файлы на скачку...видео и т.д,но на данный момент важны картинки
 
Через curl получаете xml. Разве его нельзя сохранить в файл. Заодно узнать его размер.

но не уловил смысл-почему не стоит добавлять все данные в массив?
А не проще ли не забивать память, а сразу добавлять в БД. Хотя бы даже во временную таблицу, а потом согласовать, если не просто замена.
 
Через curl получаете xml. Разве его нельзя сохранить в файл. Заодно узнать его размер.

А не проще ли не забивать память, а сразу добавлять в БД. Хотя бы даже во временную таблицу, а потом согласовать, если не просто замена.
смысл уловил вроде,картинки лишние в массиве...просто изначально,как планировалось-полученные данные будут сначала выводиться,потом выбранные товары или все будут добавляться в бд,но,понял,в картинках смысла нет в массиве-просто смотреть на них,проще сразу добавлять в бд(но сначала нужно видеть,что добавлять,а что нет)

зы в файле получится более 2000 товаров,мб есть варианты еще?

зыы и мб дело не в памяти?-просто посмотрел на полученные данные,предыдущие картинки почему-то прибавлятся к новым в сл. итерации(дублируются как бы)...

зыыы 12гб памяти,2000товаров,в товаре 5-10 картинок и то не во всех,думаю дело не в массиве,а в фориче скорее...что скажите?
 
Последнее редактирование:
Вот приставь. В памяти xml, размер которого так и не озвучили, а только количество записей. Кроме этого xml кода ещё и SimpleXMLElement объект на основе него. К ним добавляем ещё и массив. Это ещё не понятно что там кроме этого.

С другой стороны - да возможно не память. Нужно настроить правильно логирование в php и точно увидеть в логе реальные ошибки. Что превышение памяти, что превышение времени выполнения - всё это можно узнать из лога.
 
Назад
Сверху