Autor Zpráva
jefitto44
Profil
Mám vygenerovaný subor.xml a potrebujem sa pomocou php do neho dostať (asi fopen?), následne ho pomocou str_replace prezrieť a povymiňať znaky ako &, " a pod. za entity. Aký je postup? Ktoré funkcie použijem? Pri fopen práve čítam, ak udám mod "w", že to už vytvorený súbor zmaže a vytvorí miesto neho nový prázdny. Ja však chcem, aby ostal pôvodný súbor
Joker
Profil
jefitto44:
Aký je postup?
1. Načíst původní obsah souboru,
2. sestavit v paměti nový obsah,
3. vymazat původní obsah souboru,
4. uložit do souboru nový obsah.

Žádný běžný souborový systém neumožňuje přímo měnit obsah souboru (maximálně jde přidat nový obsah na konec), pokud se nějaká funkce tváří, že to umí, dělá to tak, jak jsem popsal.
juriad
Profil
Nesouvisí ten problém s Výpis do súboru? To mé navrhované řešení totiž všechny tyto problémy (uvozovky, apostrofy, entity) řeší samo. S tím xml pak již není třeba vůbec nic dělat.
jefitto44
Profil
Juriad, tvoje riešenie už nemôžem použiť... ale v predchádzajúcom prípade pomohlo... teraz ide o nové xml.

Problém tkvie v tom, že str_replace akoby tam ani nebolo... nič nerobí... a ak to spravím tak, že by priamo načítalo celý súbor do premennej, tak samozrejme, zruší ma obmedzená operačná pamäť
juriad
Profil
Pokud je to XML tak velké, tak můžeš leda přejmenovat soubor třeba na subor.xml.orig a ten otevřít fopen zároveň otevřít ještě nový soubor a procházet ten originální po nějakých úsecích (třeba 1000 znaků).
Načteš 1000 znaků, spravíš entity, uložíš ~1000 znaků. Problém je v tom, že je to extrémně náročné na udržování kontextu. Musíš totiž ty náhrady provádět jen v textech atributů a tělech elementů.

Jedná se o periodickou činnost, nebo to potřebuješ jednorázově?
Raději bych omlátil ten soubor o hlavu tomu, kdo jej vytvořil, protože to není validní XML a není přece tvoje práce opravovat chyby po dodavateli.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: