Autor Zpráva
Martin0005
Profil
Ahoj,

mám takový zřejmě začátečnický problém, nicméně pro mě klíčový. Ve své PHP aplikaci (primárně určené pro spouštění ze svého localhost) volám API funkce. Vždy, když se načítá skript tak se v úvodu vytvoří instance klienta SOAP a následně dle algoritmu se volá příslušná API funkce - například:

$BFGlobalSoapClient = new SoapClient('https://api.......wsdl' ,array("connection_timeout"=>5));

$result = $BFGlobalSoapClient->getEvents(array("reque....

Můj problém spočívá v tom, že vytvoření SOAP klienta trvá minimálně 10 vteřin a hlavně se tento klient vytváří pokaždé, když načítám stránku.

De facto bych potřeboval si toho klienta (resp jeho instanci) jakoby schovat pro příští načítání, aby jsem se pak nemusel zdržovat vytvářením jeho instance.

Zkusil jsem na to jít použitím dvojice funkcí serialize/unserialize. Výsledným bytestringem byl následující řádek:
O:10:"SoapClient":3:{s:19:"_connection_timeout";i:5;s:13:"_soap_versio n";i:1;s:3:"sdl";i:0;}

Bohužel pak při dalším volání mi to padalo na chybu, že daný klient nezná atribut URI a LOCALS.

Prosím, poradíte mi někdo, jak takový objekt si schovat se vším všudy například do databáze pro opětovné využití?

Děkuji
bukaj
Profil
no jelikož PHP pokaždé, kdy je na server odeslán požadavek, skripty kompiluje nanovo, tak to asi nepůjde.
jediné, co mě napadá je uložit si onu instanci do session. ale upozorňuji, že mě to jen tak napadlo a nejspíš to nebude fungovat.
Martin0005
Profil
Díky, zkoušel jsem to do Session uložit a z výsledku jsem pochopil, že to uložení do session proběhlo automaticky za pomoci serialize/unserialize neboť to pak házelo stejné chyby. A nešlo by celý ten klient uložit v binárním kódu a stejně tak si ho pak i znovuvytvořit?
bukaj
Profil
A nešlo by celý ten klient uložit v binárním kódu a stejně tak si ho pak i znovuvytvořit?
nevím o takové možnosti.
Martin0005
Profil
Ahoj, pro ty z vás, kteří by náhodou chtěli řešení, tak stačí si pohlídat nastavení PHP.ini umožňující cacheování WSDL:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used
; instead of original one.
soap.wsdl_cache_ttl=86400

Přičemž největší problém, který se může ukázat je neexistující adresář, neexistující oprávnění do něj zapsat a doporučuji soap.wsdl_cache_dir="/tmp" zapsat jako soap.wsdl_cache_dir="C:/Program Files/PHP/WSDL Cache".

Děkuji za snahu a snad to někomu bude užitečné.

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