21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
quatzael
Profil
Dejme tomu, že mám v proměnné nějaký hodně složitě strukturovaný objekt.
Jde nějak celý tento objekt jak je uložit do databáze, případně do souboru. Abych si ho mohl nějak jednoduše zase rovnou stáhnout do nějaké proměnné a pracovat s ním úplně stejně jako byl předtím?
Jan Tvrdík
Profil
Viz serialize a unserialize.
quatzael
Profil
Jan Tvrdík:
Aha, jenže mi to vyhodilo tuhle chybu:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 7307454 bytes)

To moc nedává smysl.. nevíš prosímtě kde by mohla být chyba?


Jan Tvrdík:
Co musím mít v tabulce nastavený za typ dat? Dal jsem text.
MONTYCEK
Profil
quatzael:
Jak moc velký je ten objekt?
quatzael
Profil
MONTYCEK:
No velkej. Když jsem zkopíroval výpis z var_dump do textovýho dokumentu, tak ten má 11M.
Hází to teda tu chybu už na to serialize.. K zápisu do databáze to ještě ani nedošlo..

Jde mi čistě jen o jednorázové řešení. Potřebuju ten objekt prozkoumat. Takže ho potřebuju mít už nějak v proměnný a ne pořád to tahat z webové služby..
juriad
Profil
quatzael:
Ta serializovaná reprezentace má alespoň 130MB. Nezapomínáš náhodou na to, že ten objekt se odkazuje na další objekty? Opravdu chceš takového otesánka načítat ze souboru? var_dump některé atributy nevypisuje, takže proto může dát kratší výstup.

K datovému typu:
Note that this is a binary string which may include null bytes, and needs to be stored and handled as such. For example, serialize() output should generally be stored in a BLOB field in a database, rather than a CHAR or TEXT field.
quatzael
Profil
juriad:
Ta serializovaná reprezentace má alespoň 130MB.
Jak jsi přišel na tohle číslo?

Nezapomínáš náhodou na to, že ten objekt se odkazuje na další objekty?
Jak to myslíš? Psal jsem přece, že se jedná o "hodně složitě strukturovaný objekt". To znamená hafo vnořených objektů kominovaných s poli, až po xx úrovní..

Opravdu chceš takového otesánka načítat ze souboru?
Já hledám nejrychlejší provizorní řešení. Jde jen o testování. Načítání ze souboru/databáze mi připadá rychlejší než to tahat z jiného serveru přes SOAP..
juriad
Profil
quatzael:
OK, zmýlil jsem se; ~130MB je paměť celého procesu. Ta samotná serializovaná reprezentace má méné. Měřit pamět jde jen nepřímo.

Nevěděl jsem, co myslíš tím „hodně složitě strukturovaný objekt“.

Testovat to můžeš na PC, které má povoleno více než 130MB paměti na PHP proces. Nemůžeš si náhodou v tom SOAP requestu požádat jen o nějakou část (vyfiltrovat nějakou podmínkou)?
quatzael
Profil
juriad:
Testovat to můžeš na PC, které má povoleno více než 130MB paměti na PHP proces.
Já to testuju na hostingovým serveru. Kdysi jsem si instaloval XAMPP, ale nedokázal jsem to propojit s databází na tom hostingovým serveru.

Nemůžeš si náhodou v tom SOAP requestu požádat jen o nějakou část (vyfiltrovat nějakou podmínkou)?
To obecně ani není možný tam podle mě cpát nějaký vlastní podmínky. Nevím o tom. Tohle je funkce, která vrací celý tento objekt. Nemá tam žádný parametry na vyfiltrování položek..


No pokud to nejde, tak se nedá nic dělat. Jde skutečně jen o testování jak z toho objektu vytáhnout potřebná data. Za chvíli to snad budu mít i bez toho uložení do databáze..
aDAm
Profil
Když to teda je jen na testovaní, tak proč si ten objekt negeneruješ sám?
quatzael
Profil
aDAm:
Jak si mám generovat?? Píšu tady přece, že ho tahám z webový služby, čili z jinýho serveru..
aDAm
Profil
Ale píšeš že si jej chceš uložit abys jej pro testování nemusel stále tahat z té webové služby. Takže pokud tomu tak je, tak si ten objekt můžeš generovat pro testy sám. Jak myslíš že se píšou testy pro webové služby? Jejich odpověď se simuluje aby tester nemusel dělat nesmyslné požadavky na službu.
quatzael
Profil
aDAm:
Takže abych si ušetřil 2 hodiny práce, tak budu vymýšlet nějakej simulátor, který mi zabere XX hodin?

Už to skoro mám.. Už to není třeba řešit..
aDAm
Profil
no zajímavý pohled na věc ale budiž je to tvůj boj
quatzael
Profil
aDAm:
Já nevím co máš na mysli. Už jsem to dokončil. Nevím jak bych složitě generoval objekt, který je tak obrovský, že to ani php nemůže zpracovat.

Já jsem potřeboval znát stejnou strukturu objektu jakou mi vyhazovala ta webová služba. Asi by se dalo nějak přeparsovat ten var_dump výpis, ale s tím jsem se opravdu nechtěl trápit..
juriad
Profil
quatzael:
Existuje způsob programování, které předpokládá, že napřed napíšeš test (tedy vygeneruješ data, která se pokusíš zpracovat a zkontroluješ výsledek po zpracování). A až pak programuješ samotnou funkci, která zpracování provádí. Programování se tak mění v opravu chyb ze začátku triviální funkce, která nic nedělá.
Pokud napíšeš dostatek testů (pokrývající všechny možné vstupy), máš jistou, že tvůj kód bude fungovat.
Později při jakékoli úpravě spustíš všechny testy a zkontroluješ výsledek. Podle potřeby přidáš nové testy.

Na první pohled to vypadá časově náročné. A také to je. Ale ohromně se to vyplatí v projektech, které se postupně rozvíjí a přidávají se nové funkcionality. Tam se nesmí stát, že se po cestě něco starého a do té doby funkčního rozbije.

Problém s tvým přístupem je, že teď vypadá, že funguje, ale vlastně si nemůžeš být jistý. Co když přijde jiný vstup, funkce neselže, ale vrátí chybný výstup?
Neprovádíš žádnou analýzu. Měl bys zdokumentovat formát vstupu a klidně napsat funkci, která zkontroluje, zda reálný vstup splňuje to, co od něj očekáváš (tedy to, co tvá funkce na zpracování umí zpracovat).
quatzael
Profil
juriad:
Tak zaprvé tohle byla opravdu čistě jednorázová záležitost.. Už je to hotový a už to nepotřebuju dál řešit.
Za druhé co si mám proboha vygenerovávat? Pořád tady píšu, že se jednalo o data vrácená webovou službou, ke který nemám pořádně ani dokumentaci. Byl to šíleně velkej objekt (asi 8 MB) s neskutečným množstvím vnořených objektů a polí do nespočet úrovní. A já jsem z toho potřeboval vytáhnout několik konkrétních hodnot. Čili k nim najít správnou cestu.

Co jaký testovací objekty si mám generovat? Já jsem potřeboval zjistit jak se jmenujou ty jednotlivý vnořený objekty, abych mohl zadat správnou cestu k těm konkrétním datům. To je všechno. Nevím jak bych nějakým generováním testovacích objektů zjistil správnou cestu (všechny názvy jednotlivých položek) v tom objektu, který získávám webovou službou.

Má to asi takovou logiku, jako by jste mi tady říkali, že na to, abych se naučil používat jazyk C#, tak si mám zkoušet vytvářet vlastní programovací jazyky..

Každopádně díky všem, kteří jste se mi tady snažili poradit. Hlavně teda s tím řešením mého konkrétního dotazu.
_es
Profil
quatzael:
Pořád tady píšu, že se jednalo o data vrácená webovou službou, ke který nemám pořádně ani dokumentaci.
Nepíšeš to „pořád“, hlavne nie v prvom príspevku ([#1]), kde to malo byť, kde je len „hodně složitě strukturovaný objekt“, pod čím sa dá predstaviť hocičo, aj v súvislosti s PHP, keďže „webová služba“ nemusí vôbec používať PHP, a preto si zbytočne mrhal úsilím diskutujúcich, čo sa ti snažili poradiť. Rada by mohla byť, nech si tie „data“ najprv zanalizuješ, čo je asi vyriešenie problému.
Keeehi
Profil
_es:
Vždyť o to se celou dobu snažil. Aby ta data mohl analyzovat, tak je musel nejdříve vypsat a to nevěděl jak, aby při tom zároveň nenarážel na memory limit.

quatzael:
Tvoje metoda s XAMPem by byla podle mého názoru vhodná. Získal bys tím vlastní server který si můžeš libovolně nastavovat. A to že jsi nerozchodil databázi by přece nemělo vadit, když jsi byl ochotný uložit výsledek do souboru.
_es
Profil
Keeehi:
Aby ta data mohl analyzovat, tak je musel nejdříve vypsat a to nevěděl jak, aby při tom zároveň nenarážel na memory limit.
A prečo by ich mal analyzovať prostredníctvm webhostingu („memory limit“)? Mohol ich predsa analyzovať hocijako.
quatzael
Profil
_es:
Nepíšeš to ‚pořád‘, hlavne nie v prvom príspevku
1. příspěvek: Tak především tady jsem řešil jak obecně ukládat objekt z proměnné do databáze a posléze ho z ní zase získávat. Netušil jsem, že tam bude problém s nedostatkem paměti, takže jsem přesně nespecifikoval jak "velký" objekt je. Každopádně ale myslím že hodně složitě strukturovaný objekt, by mohlo vystihnout podstatu problému. Mimochodem Jan Tvrdík mi tady odpověděl přesně na co jsem se ptal, takže asi dotaz byl dostatečně srozumitelný.

2. příspěvek: Uvedl jsem, že mi to hází chybu, protože se to neúspěšně snaží alokovat "7307454 bytes", z čehož se dá usoudit, že ten objekt moc malej nebude. Spíš mě zaráželo, proč vzniká problém, když má php k dispozici nesrovnatelně víc paměti.

3. příspěvek: Na otázku jak velkej,píšu: No velkej. Když jsem zkopíroval výpis z var_dump do textovýho dokumentu, tak ten má 11M.

Další příspěvky už nejsou o ničem jiným, než že píšu, že je to giganticky obrovský a řeším reakce, proč neuvádím od začátku že se jedná o velký objekt.

Keeehi:
XAMPP jsem jednou zkoušel, ale nějak jsem se nemohl připojit k databázi na hostingu (povolení k přístupu z cizích serverů jsem nastavený měl). No a bez toho by byla veškerá práce a testování nefunkční. Tak jsem se na to vyprdl a testoval jsem to zase klasicky přímo na hostingu.
Po finálním spuštění projektu to budu muset nějak vyřešit, ale zatím na to nebyl čas..

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:

0