开发者

PHP parse GZ file as XML

I have the file "filmsdb-full.gz".

Weight "filmsdb-full.gz" is 5 mb, In it there is a file weight of 17 mb.

I use this code for extract...

$file = gzfile('filmsdb-full.gz');

BUT!!! This file is 111 000 lines.

File format:

<?xml version="1.0" encoding="utf-8" ?><movie_list count="8427"><movie>
        <id>1</id>
        <title_en><![CDATA[Alice in Wonderland (1951)]]></title_en>
        <title><![CDATA[Алиса в стране чудес]]></title>
        <description><![CDATA[Убежав из дома, Алиса увидела под старой яблоней большого белого кролика, одетого в куртку и жилет. Достав из кармана часы, кролик торопливо скрылся в подозрительно темной норе. Набравшись смелости, Алиса шагнула вслед за ним…и попала в чудесный сказочный мир, где сбываются самые несбыточные фантазии. <br><br>Чтобы попасть обратно домой, Алисе придется совершить путешествие через весь этот странный и причудливый мир, в котором ее поджидают совершенно невероятные приключения и совершенно фантастические существа…]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/2495121131.4383_09014500260082001215017400185150597625_0/9261551.jpg]]></movie_img>
        <movie_uri><![CDATA[alice_in_wonderland_1951]]></movie_uri>
        <movie_add_ts>1246629600</movie_add_ts>
        <year><![CDATA[1951]]></year>
        <actors><![CDATA[Катрин Бомонт, Эд Винн, Ричард Хейдн, Стерлинг Холлоуэй, Джерри Колонна, Верна Фелтон, Дж. Пэт О`Мэлли, Билл Томпсон, Джозеф Кернс, Ларри Грэй, Куеени Леонард, Dink Trout, Дорис Ллойд, Джеймс МакДональд, Билл Ли, Thurl Ravenscroft, Макс Смит, Боб Хэмлин, Дон Барклай, Стэн Фреберг:озвучка, в титрах не указан]]></actors>
        <director><![CDATA[Хэмильтон Ласки, Уилфред Джексон, Клайд Джероними]]></director>
        <type><![CDATA[фэнтези, мюзикл, приключения, семейный, мультфильм]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>2</id>
        <title_en><![CDATA[Bring It On]]></title_en>
        <title><![CDATA[Добейся успеха / Заводилы]]></title>
        <description><![CDATA[Эти девчонки из группы поддержки университетской футбольной команды знают, как привлечь к себе внимание. При взгляде на них у ребят резко повышается кровяное давление. Они просто обворожительны, сногсшибательны, их энергичные танцы приводят в возбуждение толпы болельщиков.<br><br>Они пользуются бешеным успехом, ведь их упругие молодые тела вырабатывают такое количество сексуальной энергии, что зрители, позабыв про футбол, приходят на стадион только ради них.<br><br>Но, поскольку, такая группа поддержки есть почти у каждого университета, между девчонками из разных команд разгорается нешуточная борьба за звание лучшей в своем роде.<br><br>В ход идут самые неожиданные приемы и ухищрения, и порой дело близится к рукопашной. Но, чтобы действительно считаться лучшей командой, надо победить в национальном чемпионате, а этого смогут добиться только самые красивые, самые талантливые, самые задорные и сексуальные.  ]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/3323121.3215921_000276001900740018450112004529811875_939/194529.jpg]]></movie_img>
        <movie_uri><![CDATA[bring_it_on]]></movie_uri>
        <movie_add_ts>1246618800</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Кирстен Данст, Элиза Душку, Джесси Брэдфорд, Гэбриэл Юнион, Клер Крамер, Николь Бильдербак, Цианина Джоелсон, Рини Белл, Натан Уэст, Хантли Риттер, Shamari Fears, Natina Reed, Брэнди Уильямс, Линдсэй Слоун, Бьянка Кайлич, Холмс Осборн, Шерри Херси, Коди МакМейнс, Йен Робертс, Дэвид Э. Тейлор, Эшли Ховард, Nikole Lee Amateau, Клементайн Форд, Грант Томпсон, Леонард Клифтон, Мари Коул, Дрю Маузер, Alicia Michelle Sassano, Natasha Soll, Райан Драммонд, Paullin Wolff, Дэвид Э. Уиллис, Бет Ламюр, Энн Флетчер, Даг Уальдо, Энни Хинтон, Луиз Галлахер, Эдмонд Клэй, Даниелла Кун, Ал开发者_运维技巧ома Райт, Пол Блум, Melanie Atmadja, Пейтон Рид, Джоди Харрис, Нэктар Роуз, Хилари Сальваторе, Элизабет Джонсон, Райли Смит, Anna Lisa Mendiola, Алекс Фергюсон, Руби Гонзалез, Lisel M. Gorell, Brandon Henschel, Ричард Хиллман, Робби Дживс, Майкл МакКафферти, Келли Милнер, Джейсон Торнтон:Guy Cheerleader, в титрах не указан]]></actors>
        <director><![CDATA[Пейтон Рид]]></director>
        <type><![CDATA[комедия, спорт]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>3</id>
        <title_en><![CDATA[6th Day, The / The Sixth Day]]></title_en>
        <title><![CDATA[Шестой день / 6ой день]]></title>
        <description><![CDATA[В начале третьего тысячелетия самым суровым законом стал &laquo;закон Шестого дня&raquo;. Он&nbsp;запрещал клонирование людей и&nbsp;создание искусственных копий человека. Но&nbsp;огромная подпольная империя вопреки запрету выращивает человечество нового будущего, сотни управляемых теней.<br><br>Налаженная машина преступления не&nbsp;давала сбоев, пока в&nbsp;ее совершенный механизм не&nbsp;вмешалась случайность: пилот вертолета Адам Гибсон неожиданно приоткрыл непроницаемую завесу заговора. Теперь он&nbsp;&#151; последний рубеж обороны, отделяющий цивилизацию от&nbsp;общества зомби.]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/311512266.15446_08035345390018000072017400126954086_7258/8397269.jpg]]></movie_img>
        <movie_uri><![CDATA[6th_day_the_the_sixth_day]]></movie_uri>
        <movie_add_ts>1246645219</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Арнольд Шварценеггер, Майкл Рапапорт, Тони Голдуин, Майкл Рукер, Сара Уайнтер, Родни Роулэнд, Роберт Дювалл, Марк Брэндон, Бен Басс:Bodyguard]]></actors>
        <director><![CDATA[Роджер Споттисвуд]]></director>
        <type><![CDATA[фантастика, боевик, триллер]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie><movie>
        <id>5</id>
        <title_en><![CDATA[The Cell]]></title_en>
        <title><![CDATA[Клетка]]></title>
        <description><![CDATA[Главная героиня фильма, психиатр, проникает в&nbsp;сознание серийного убийцы, находящегося в&nbsp;коме. На&nbsp;его счету уже&nbsp;почти десяток жертв, а&nbsp;жертвами, как&nbsp;правило, становятся молодые привлекательные девушки, которых маньяк истязает самым нечеловеческим образом, прежде чем&nbsp;лишить их&nbsp;жизни.<br><br>Последнюю похищенную им&nbsp;девушку пока так&nbsp;и не&nbsp;нашли, но&nbsp;есть надежда, что&nbsp;ее еще&nbsp;можно спасти. Однако для&nbsp;этого сначала надо внедриться в&nbsp;темные мозги психопата и&nbsp;выяснить, где&nbsp;же находится страшная камера пыток.]]></description>
        <movie_img><![CDATA[http://ext-1.24videodirect.com/2231121801.7527_010500459700180074310182001201136856_211/1973101.jpg]]></movie_img>
        <movie_uri><![CDATA[the_cell]]></movie_uri>
        <movie_add_ts>1246645219</movie_add_ts>
        <year><![CDATA[2000]]></year>
        <actors><![CDATA[Винс Вон, Джейк Уэбер, Дилан Бейкер:Henry West]]></actors>
        <director><![CDATA[Тарсем Синх]]></director>
        <type><![CDATA[фэнтези, фантастика, триллер, ужасы, драма, криминал]]></type>
        <has_online_cast_files>0</has_online_cast_files>
    </movie>

I need to parse this XML file into the MySQL database..

How to parse the file with a large given that it is XML?

Sorry for bad english.


You can use BULK load on the decompressed file itself.

CREATE TABLE movies (
    id INT NOT NULL PRIMARY KEY,
    title_en VARCHAR(40) NULL,
    title VARCHAR(40) NULL,
    description TEXT,
    etc......
);

LOAD XML LOCAL INFILE 'movies.xml'
INTO TABLE movies
ROWS IDENTIFIED BY '<movie>';


Don't use gzfile(), which populates an in-memory array, use gzread() instead (which simply reads the file as a string, and pass it directly to simpleXML for parsing

$xml = new SimpleXMLElement(gzread('filmsdb-full.gz'),MAX_INT);

EDIT

If the file is larger than MAX_INT bytes of uncompressed data, then this won't work


Seems to me like the shortest route would be to implode the array into a string and then throw that string to simplexml.

$string = implode($file);
$xmlObj = new SimpleXMLElement($string);

That should then give you a working php object to use in your database insertions.

  • http://php.net/manual/en/function.implode.php
  • http://us2.php.net/manual/en/book.simplexml.php

As for the filesize, you most likely just need to make sure that you have enough memory allocated to the PHP process in the php.ini file.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜