abcd423417984 Skrevet 30. juli 2008 Del Skrevet 30. juli 2008 Hei Er det på noen som helst måte mulig å opprette ett eller flere objekter som lever på tvers av sessions? i.e. tilgjengelig for scriptet uavhengig av hvem som besøker (dvs ikke knyttet mot en bestemt session id). Takker så mye for evt svar. Lenke til kommentar
Jonas Skrevet 30. juli 2008 Del Skrevet 30. juli 2008 (endret) Du leter etter et alternativ til å lagre de i sessions? Istedenfor å lagre selve objektet, kan en kanskje lagre alt det innholder, dersom det lar seg gjøre, i destructern og hente i constructern. Med en veldig generisk kode kan det gjøres like lett som med sessions. PS: Jeg tenker bare litt høyt her, har ikke testet koden på noen måte. <?php class Foo { var $firstProperty = 'testafkijsg'; var $secondProperty = 'aeredaraergae'; var $thirdProperty = 'aes<adadad'; function __construct () { $file = unserialize ( file_get_contents ( 'cache.tmp' ) ); $this -> setData ( $file ); } function __destruct () { $file = serialize ( $this -> getData () ); file_put_contents ( 'cache.tmp', $file ); } public function setData ( $data ) { if ( is_array ( $data ) && count ( $data ) ) { $valid = get_class_vars ( get_class ( $this ) ); foreach ( $valid as $var => $val ) { if ( isset ( $data[$var] ) ) { $this -> $var = $data[$var]; } } } } public function getData () { $me = new ReflectionClass ( $this ); $vars = $me -> getDefaultProperties (); foreach ( $vars as $var => $val ) { $return[$var] = $this -> $var; } return $return; } } ?> Endret 30. juli 2008 av Jonas Lenke til kommentar
Per Kristian Skrevet 30. juli 2008 Del Skrevet 30. juli 2008 (endret) Synes Jonas er inne på noe her, men er det ikke bare å bruke serialize() og unserialize()? Disse funksjonene konverterer et objekt (og alle data som finnes i det) til en tekst-streng (og med unseriaize, tilbake til objektet igjen). Du kan så lagre strengen i en tekstfil/database etter behov, og dermed hente opp objektet igjen. Eksempel: // Objektet ditt $yourObject=new objectOfSomeSort(); // Gjøre om til en tekst-streng $objectAsString=serialize($yourObject); // // Så lagrer du objektet, f.eks. i en fil. // // Vekke objektet tilbake til live $yourObject=unserialize($objectAsString); Endret 30. juli 2008 av Per Kristian Lenke til kommentar
Jonas Skrevet 30. juli 2008 Del Skrevet 30. juli 2008 Ah, ser nå at en kan leke med serialize og objekter sammen. Dette blir jo da naturligvis svææært mye enklere. Lenke til kommentar
abcd423417984 Skrevet 31. juli 2008 Forfatter Del Skrevet 31. juli 2008 Nei, det jeg mente var at jeg ønsker å lagre objektet i minnet slik at alle lokale ressurser tilknyttet objektet (åpne filer, nettverks sockets, db connections etc...) forblir åpne mellom sessions. Er dette mulig? Lenke til kommentar
Ernie Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Både ja og nei. Forutsatt at du har memcache kjørende på serveren har man memcache for PHP (pecl). Med det kan man lagre unna slike ting. Problemet er at såvidt jeg veit er du ikke garantert at den fortsatt er der neste gang. Dvs. hvis memcache-sesjonen går tom for minne vil den dumpe det som det har gått mest tid siden har vært i bruk. Mao., du får cachet tilkoblingen, men kan risikere at du må koble til på nytt hvis det fortsatt ikke er cachet. Lenke til kommentar
Per Kristian Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Men, hvorfor minnet? En enkel løsning ville være å lagre serialized versjon i en fil, så kan alle relevante script unserialize filen og så bruke den. Dermed unngår du problemer med at den forsvinner fra minnet. Men, pass på: 1. Åpne filer vil antakeligvis lukkes når et script avsluttes (autmoatisk garbage collecting), dvs. en åpen fil i objektet vil lukkes når scriptet som bruker objektet avslutter. 2. Sockest/database-connections vil lide samme skjebne. 3. Hva skjer dersom flere script leser til objektet samtidig? Du må passe på at kun ett script har skrive-tilgang til objektet. Vil vel igrunn foreslå at du vurderer en annen løsning. Det er ganske mange problemer med denne. Lenke til kommentar
Ernie Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Hvorfor minnet? Det burde da være ganske åpenbart! Hastighet såklart. At det «forsvinner» er som regel ikke et problem da, det er jo tross alt caching. Man må bare være klar over det og ta hensyn til det. Lenke til kommentar
abcd423417984 Skrevet 31. juli 2008 Forfatter Del Skrevet 31. juli 2008 Ok da får jeg ta en annen tilnærming til problemet. Neste spørsmål blir da: Er det noen enkel metode for interprocess communication i php standardbiblioteket? Gitt at jeg har en bakgrunnsprosess kjørende som gjør en del ting, og en rekke php-scripts som oppdaterer/henter informasjon fra denne prosessen. Er det noen enkelt "php måte" å gjøre det på, eller må jeg da grave meg ned i platformspesifikke teknologier som COM/Unix pipes/dbus ? Lenke til kommentar
Ernie Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 Finnes såvidt jeg veit ikke noe slikt. PHP er såpass bygget opp rundt nettsider og det man trenger til slikt at ting som innebærer prosesser, minne etc. er tilnærmet fraværende. Mulig det finnes en utvidelse som kan være brukbar (sjekk pecl.php.net), men utover det må man ev. lage utvidelsen selv, kommunisere via socket e.l., eller bruke et bedre egnet språk. Lenke til kommentar
Jonhoo Skrevet 1. august 2008 Del Skrevet 1. august 2008 Hoeres ikke helt ut som om PHP er det riktige spraaket for noe saant nei... Perl kan sikkert fikse biffen, men det kan vel kanskje ogsaa Python som er litt enklere i bruk. Begge er rimelig like PHP i syntaks (dog med litt forvirrende unntak her og der) Lenke til kommentar
hallegyn Skrevet 2. august 2008 Del Skrevet 2. august 2008 Gitt at jeg har en bakgrunnsprosess kjørende som gjør en del ting, og en rekke php-scripts som oppdaterer/henter informasjon fra denne prosessen. Er det noen enkelt "php måte" å gjøre det på, eller må jeg da grave meg ned i platformspesifikke teknologier som COM/Unix pipes/dbus ? Ja, gitt at du har en bakgrunnsprosess noe som du kan kommunisere med over socket, så burde vel det være lett? http://docs.php.net/manual-lookup.php?patt...ket&lang=en Lenke til kommentar
Kimble Skrevet 5. august 2008 Del Skrevet 5. august 2008 Se på php5 sine "magiske metoder" __sleep og __wakeup http://no.php.net/manual/en/language.oop5.magic.php. I disse metodene kan du putte kode som lagrer og gjenoppretter objektets tilstand. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå