Autor | Zpráva | ||
---|---|---|---|
Martin0005 Profil |
#1 · Zasláno: 2. 7. 2007, 12:19:44
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 |
#2 · Zasláno: 2. 7. 2007, 12:42:54
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 |
#3 · Zasláno: 2. 7. 2007, 12:51:59
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 |
#4 · Zasláno: 2. 7. 2007, 14:09:41
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 |
#5 · Zasláno: 2. 7. 2007, 16:25:06
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é. |
||
Časová prodleva: 17 let
|
0