DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 24. 03. 2008.   #1
duki
novi član
Na probnom radu
 
Avatar duki
 
Datum učlanjenja: 01.08.2007
Lokacija: Beograd
Poruke: 10
Hvala: 1
0 "Hvala" u 0 poruka
duki is on a distinguished road
Pošaljite ICQ poruku za duki Pošaljite poruku preko MSN za duki
Question XML Parser - parsiranje više fajlova i destruktor

Pozdrav svima...
Napravio sam XML parser koji obrađuje svašta, ali ga koristim za FXClient bankarske izvode, snimljene u XML format, i njihovo pakovanje u bazu. E sad, kako izvoda u direktorijumu ima stotinak, a svi se obrađuju po istom principu napravio sam petlju koja čita fajl po fajl i okida parser. Kada učitam drugi fajl u isti parser, parser pukne.
Ispod je uprošćeni primer:

PHP kôd:
<?php
<?php
// Error reporting ---------------
error_reporting (E_ALL);
ini_set("display_errors""1");
//--------------------------------

    //=== XML Data =======================================================================
    
$XMLData1 "<A><B>Neki tekst</B><C><D>jos neki tekst</D><E>i opet tekst</E></C></A>";
    
$XMLData2 "<TAG1><Tag2>Peskir</Tag2><T3><D>Traal</D><E>Vodic</E></T3></TAG1>";

    
//=== XML Handlers ==========================
    
function XMLStartHandler($Parser$Tag$aTagAttrib)
    {
        echo 
"Open: [$Tag]\n";
    }

    function 
XMLEndHanler($Parser$Tag)
    {
        echo 
"Close: [/$Tag]\n";
    }

    function 
XMLDataHandler($Parser$Data)
    {
        
trim($Data);
        echo 
"Data: $Data\n";
    }

    
//=== XML Parser ============================
    
$XMLParser xml_parser_create();
    
xml_set_element_handler($XMLParser"XMLStartHandler""XMLEndHanler");
    
xml_set_character_data_handler($XMLParser"XMLDataHandler");

    
//=== Parse problem =========================
    // Ovo radi
    
xml_parse($XMLParser$XMLData1) or die (sprintf("Nece! XML error: %s at line %d code %d\n"xml_error_string(xml_get_error_code($XMLParser)), xml_get_current_line_number($XMLParser), xml_get_error_code($XMLParser)));

    
// Skini komentar od ispod i nece odraditi parse $XMLData2
    //xml_parse($XMLParser, $XMLData2) or die (sprintf("Nece! XML error: %s at line %d code %d\n", xml_error_string(xml_get_error_code($XMLParser)), xml_get_current_line_number($XMLParser), xml_get_error_code($XMLParser)));

    //=== Cleanup ===============================
    
xml_parser_free($XMLParser);
?>
Pitanje 1:
Mogu li da učinim da se za više fajlova koristi isti parser, ili svaki put moram da kreiram novi parser za svaki fajl posebno?

Pitanje 2:
Ako već moram da kreiram parser za svaki fajl posebno (što mi se ne dopada), zašto onda ne radi destruktor u okviru petlje, po principu:
[petlja]
new parser
...nešto...
free parser
[kraj petlje]
Nego PHP napravi onoliko instanci parsera koliko fajlova treba da obradi, pa ih po izlazu iz skripte sve poubija.

Evo opet primera:
PHP kôd:
//Problem sa destruktorom u loop=u?
//Zasto mora da kreira 5 instanci pa posle sve da ubije a ne moze jednu po jednu?

include("Parser_Class.php");

    for (
$Cnt 0$Cnt 5$Cnt++)
    {
        
$MyParser = new XMLParser();
        echo 
"Before destruction $Cnt\n";
        
$MyParser->__destruct();
    } 
Mogu da pošaljem i Parser_Class, mada nije bitno šta ona radi.
Probajte samo da kreirate parser na početku petlje i da ga ubijete na kraju petlje - i to ne radi kako valja.

Ako pak izbacite destruktor iz petlje, po izlazu iz skripte PHP uredno pobije instance, ali to znači da u toka rada pojede mnogo memorije pa je svu oslobodi, što može da ubije server ako se alocira previše memorije.
Onda moram da podešavam memory_limit u php.ini pa...
Sve u svemu ne ide u dobrom pravcu

Hvala unapred na odgovoru ili hintu!

Poslednja izmena od nixa : 24. 03. 2008. u 15:37.
duki je offline   Odgovorite uz citat
Staro 25. 03. 2008.   #2
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

mozda da iskoristis 'is_final' (3-ci po redu) parametar u xml_parse(), pa da parsiras sve dokumente kao deo jednog velikog dokumenta? Samo bi morao da skines prvu liniju svakog fajla da se resisi xml deklaracije, i da dodas jedan bogus root elemnat oko svih dokumenata da bi xml bio validan
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 01. 04. 2008.   #3
duki
novi član
Na probnom radu
 
Avatar duki
 
Datum učlanjenja: 01.08.2007
Lokacija: Beograd
Poruke: 10
Hvala: 1
0 "Hvala" u 0 poruka
duki is on a distinguished road
Pošaljite ICQ poruku za duki Pošaljite poruku preko MSN za duki
Cool

Citat:
Originalno napisao ivanhoe Pogledajte poruku
mozda da iskoristis 'is_final' (3-ci po redu) parametar u xml_parse(), pa da parsiras sve dokumente kao deo jednog velikog dokumenta? Samo bi morao da skines prvu liniju svakog fajla da se resisi xml deklaracije, i da dodas jedan bogus root elemnat oko svih dokumenata da bi xml bio validan
Rezultat toga je da opet dobijam u zbiru jedan veliki dokument koji jede RAM umesto više malih. Ako ništa drugo bar štedim na instancama parsera...
Hvala na pokušaju, ali nije to ono što meni treba.
Zanima me postoji li "clean solution" za ovo...
duki je offline   Odgovorite uz citat
Staro 01. 04. 2008.   #4
kodi
133t
Master
 
Avatar kodi
 
Datum učlanjenja: 08.01.2006
Lokacija: Beograd
Poruke: 714
Hvala: 16
37 "Hvala" u 28 poruka
kodi is on a distinguished road
Pošaljite ICQ poruku za kodi
Default

mozda neko prljavo resenje , da napravis CLI skriptu i da je pozivas preko exec, ili system u petlji
a ime fajla prosledjujes kao parametar?
__________________
kodi je offline   Odgovorite uz citat
Staro 01. 04. 2008.   #5
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

Citat:
Originalno napisao duki Pogledajte poruku
Rezultat toga je da opet dobijam u zbiru jedan veliki dokument koji jede RAM umesto više malih. Ako ništa drugo bar štedim na instancama parsera...
Hvala na pokušaju, ali nije to ono što meni treba.
Zanima me postoji li "clean solution" za ovo...
pa ne, bas naprotiv... xml parser je baziran na Expat parseru, on ne cuva DOM strukturu, nego samo sekvencijalno parsira ono sto mu poturis (i pamti stanje, odnosno polozaj u DOM-u pomocu steka). Znaci ti mu dajes fajl po fajl, on to parsira, i ti trosis relativno malo memorije...
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
"Hvala" ivanhoe za poruku:
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
Tema Početna poruka teme Forum Odgovori Poslednja poruka
RSS parsiranje nikolam (X)HTML, JavaScript, DHTML, XML, CSS 4 02. 10. 2009. 22:27
MySQL: Više tabela, više baza ili? Ilija Studen SQL baze podataka - Sponzor: Baze-Podataka.net 22 23. 10. 2007. 00:24
Apache log parser Nemanja Avramović Web Hosting, web serveri i operativni sistemi 5 11. 10. 2007. 22:14
rss parser Blood PHP 2 01. 09. 2006. 12:09


Vreme je GMT +2. Trenutno vreme je 01:59.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.