Opprette en aktivitetslytter i PHP, venter XML-innhold

stemmer
18

Jeg trenger å opprette en hendelse lytteren. Jeg er en nybegynner så være snill :)

I utgangspunktet er jeg på page1.php (php-fil); Jeg vil ha inne i en løkke å gå sjekke page2.xml (xml-fil) for noen informasjon som bør bli mottatt på enkelte punkt. Enten sjekke det hele tiden, eller vente og hvert 5 minutt eller så for å se om noen informasjon har blitt mottatt der. Hver av dem fungerer for meg.

Hvis ingen info er mottatt etter noen minutter, så jeg ønsker å kjøre igjen loop (før den er mottatt), ellers, gå videre og gjøre noe med min nylig mottatt informasjon. Denne delen har jeg ikke noe problem med, bare arrangementet lytteren selv. Jeg kunne ikke finne den funksjonen jeg skal bruke hvor som helst. :( Jeg trenger bare å sjekke og hente innholdet i xml filen hver så ofte.

Jeg er ikke så sikker på hvordan jeg skal gå om dette hvis det er ikke bare en funksjon som gjør dette, men jeg kunne ikke finne mye når jeg søkte på hendelse lytteren php.

Eventuelle hjelpe ville være verdsatt: referanse til tutorials / eksempelkode / selv bare fortelle meg hvilke søkeord jeg skal være på utkikk etter eller hva jeg trenger å lære først for å gjøre dette.

Takk!

Publisert på 21/12/2011 klokken 22:17
bruker
På andre språk...                            


3 svar

stemmer
1

Vel, først bør du forstå terminologien du bruker. PHP er ikke en hendelse-drevet språk, det er en forespørsel drevet språk. En forespørsel kommer inn på web-server, PHP analyserer det, og et svar sendes tilbake til forespørselen. Ikke på noe punkt er det hendelser utløst at du kan behandle eller håndtere. Du kan implementere din egen "event system", men til syvende og sist dette er mye mer arbeid enn hva din bruk-saken innebærer.

Det beste alternativet er trolig benytte AJAX og kontinuerlig gjøre forespørsler til din PHP-script til du kommer tilbake dataene du leter etter. Til syvende og sist må du lære om XMLHttpRequestJavascript objekt. Etter at du forstår hvordan du gjør asynkrone forespørsler utnytte Java du kan se på setInterval()metoden for hvordan å gjentatte ganger gjøre en forespørsel.

Når du kan gjentatte ganger gjøre asynkrone forespørsler bør det være en relativt enkel prosess med å lage en nettside hvor du kan utløse AJAX forespørsler om å bli sendt.


Det er ikke behov for en loop i din PHP-kode. Sløyfen er effektivt gjøres på den andre enden. Her er en tekstlig arbeidsflyt som du kan følge:

  1. Gå til et nettsted designet for å utløse AJAX samtaler og utløse dem.
  2. Gjør din asynkron forespørsel til PHP script.
  3. Inni PHP-script åpne opp XML-fil og se etter den nødvendige innhold.
  4. Returnere en respons i form av en JSON objekt. Ett svar kan bety dataene ikke ble oppdatert, den andre responsen betyr dataene ble oppdatert.
  5. Analysere svaret, dersom dataene ikke ble oppdatert gjenta fra trinn (2). Hvis dataene ble oppdatert fortsette til trinn (6).
  6. Vis en feirende hilsen at dataene ble oppdatert eller et varsel om at vi fortsatt venter på dataene som skal oppdateres. Kanskje du kan ha antall prøver også, ut til siden.
Svarte 21/12/2011 kl. 22:57
kilden bruker

stemmer
0

Jeg gjorde noe som dette å skrive en innboks parser i PHP. Du er det beste alternativet er å:

Kode page1.phpsom du bare trenger å gjøre 2 ting: lese XML fra page2.xml, og hvis det er noe "nytt" bare utføre data-analyse kode.

Sette opp en Cron jobb (hvis du er under linux) for å utføre hvert 5. minutt eller så (Cron kommandoen er noe sånt som: php /path/to/page1.php). På samme måte, hvis du kjører Windows kan du sette opp en planlagt oppgave og utføre samme kommando. Vær oppmerksom på at hele banen til PHP installasjonen skal være i PATHmiljøvariabelen.

Svarte 21/12/2011 kl. 23:20
kilden bruker

stemmer
1

Jeg gjorde følgende:

Automatisk lagret i databasen hver gang noe nytt kom inn.

Deretter kjørte en php loop som med få minutters mellomrom sjekket for å se om det er noe nytt i databasen som passer parametrene for denne nye hendelsen (herunder at det happenned innenfor tidsrammen av de siste minuttene). Jeg brukte flush();og deretter sleep(120);i loop for å få sløyfe for å holde i gang med noen minutter, før den nye info kom inn i så fall vil det break();eller die();.

Svarte 03/01/2012 kl. 22:57
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more