- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
есть большой xml на 837 000 записей (увеличивал память до 1024 на вдс - не помогло)
как бы его обуздать?
куда, как, чем загрузить?
837 записей - ни о чем
куда, как, чем загрузить?
837 записей - ни о чем
в бд
скриптом пхп используя SimpleXML
837 тысяч записей
как бы его обуздать?
Не использовать средства, которые будут пытаться грузить его целиком в память.
Сам я с большими xml на php не работал, но беглый гуглеж выдает вот такой пример: Парсинг XML с помощью XMLReader на PHP
сколько весит?
Использую http://php.net/manual/ru/function.simplexml-load-string.php для разбора XML файлов около 30-50 мегабайт на 1 млн элементов с 10-15 атрибутами у большинства элементов. Проблем нет, PHP 5.6, лимит памяти 256-512 мегабайт.
Можно взглянуть на код разбора XML? Какой размер XML файла?
сколько весит?
под 300 метров
под 300 метров
странно, с таким и simplexml без проблем справлялся
---------- Добавлено 27.12.2016 в 11:40 ----------
какая ошибка?
какая ошибка?
сначала писало, что памяти не хватает
увеличил
начало что-то другое писать
уже не помню
начал с XMLReader переписывать
---------- Добавлено 27.12.2016 в 14:30 ----------
Контент
while($reader->read()) {
if($reader->nodeType == XMLReader::ELEMENT) {
if($reader->localName == 'offer') {
$k++;
$data[$k]['id'] = $reader->getAttribute('id');
}
}
if($reader->localName == 'article') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['article'] = $reader->value;
}
}
while ($reader->localName == 'param') {
$reader->read();
if($reader->nodeType == XMLReader::ELEMENT) {
$data[$k]['param'].= $reader->getAttribute('name')."!";
}
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['param'].= ":".$reader->value."|";
}
}
if ($k==10) break;
}
print_r($data);
Результат
(
[id] => O13121909413
[article] => 879200102010
[param] => :Мужской|Цвет!:меланж|Размер!:L/6|!
)
Не берет первого атрибута
Не видит его
Не понимаю почему
while ($reader->localName == 'param') {
$reader->read();
после while $reader->read(); не нужно
Что то не то
while($reader->read()) {
if($reader->nodeType == XMLReader::ELEMENT) {
if($reader->localName == 'offer') {
$k++;
$data[$k]['id'] = $reader->getAttribute('id');
}
}
if($reader->localName == 'article') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['article'] = $reader->value;
}
}
if($reader->localName == 'categoryId') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['categoryId'] = $reader->value;
}
}
if($reader->localName == 'currencyId') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['currencyId'] = $reader->value;
}
}
if($reader->localName == 'description') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['description'] = $reader->value;
}
}
if($reader->localName == 'model') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['model'] = $reader->value;
}
}
if($reader->localName == 'name') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['name'] = $reader->value;
}
}
if($reader->localName == 'oldprice') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['oldprice'] = $reader->value;
}
}
while ($reader->localName == 'param') {
if($reader->nodeType == XMLReader::ELEMENT) {
$data[$k]['param'].= "*".$reader->getAttribute('name').":";
}
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['param'].= $reader->value."";
}
}
if($reader->localName == 'picture') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['picture'] = $reader->value;
}
}
if($reader->localName == 'price') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['price'] = $reader->value;
}
}
if($reader->localName == 'url') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['url'] = $reader->value;
}
}
if($reader->localName == 'vendor') {
$reader->read();
if($reader->nodeType == XMLReader::TEXT) {
$data[$k]['vendor'] = $reader->value;
}
}
if (count($data[$k])>=11) print $k."-".$data[$k]['id']."\n";
if ($k==12) break;
}
Выдает
1-0247453
1-0247453
1-0247453
1-0247453
1-0247453
1-0247453
2-0680064
2-0680064
2-0680064
2-0680064
2-0680064
2-0680064
3-0852793
3-0852793
3-0852793
3-0852793
3-0852793
3-0852793
3-0852793
4-0854905
4-0854905
4-0854905
4-0854905
4-0854905
4-0854905
4-0854905
5-0872678
5-0872678
5-0872678
5-0872678
5-0872678
5-0872678
6-0919188
6-0919188
6-0919188
6-0919188
6-0919188
6-0919188
6-0919188
7-0953103
7-0953103
7-0953103
7-0953103
7-0953103
7-0953103
7-0953103
8-0967998
8-0967998
8-0967998
8-0967998
8-0967998
8-0967998
8-0967998
9-0982546
9-0982546
9-0982546
9-0982546
9-0982546
9-0982546
9-0982546
10-1418332
10-1418332
10-1418332
10-1418332
10-1418332
10-1418332
10-1418332
11-1812662
11-1812662
11-1812662
11-1812662
11-1812662
11-1812662
11-1812662
по 7 раз один и тот же элемент "видит"
Что не так?