Het creëren van een Event Listener in PHP, in afwachting van XML-inhoud

stemmen
18

Ik moet een evenement luisteraar. Ik ben een beginner zo vriendelijk te zijn :)

In principe ben ik op page1.php (php-bestand); Ik wil in een lus te gaan controleren page2.xml (xml-bestand) voor een aantal gegevens die op een bepaald punt moet worden ontvangen. Ofwel controleert het de hele tijd, of wacht en elke 5 minuten of zo om te zien of wat informatie aldaar is ontvangen. Elk van hen werken voor mij.

Als er geen informatie is ontvangen na een paar minuten, dan wil ik opnieuw uit te voeren de lus (totdat het wordt ontvangen), anders verder te gaan en iets te doen met mijn nieuw ontvangen informatie. Dit deel Ik heb geen probleem met, maar het evenement luisteraar zelf. Ik kon de functie ik moet overal worden met behulp van niet vinden. :( Ik hoef alleen maar te controleren en de inhoud van het XML-bestand op te halen om zo vaak.

Ik ben er niet zo zeker van hoe ik zou moeten gaan over dit als er niet alleen een functie die dit doet, maar ik kon het niet vinden veel toen ik zocht naar event listener php.

Alle hulp zou worden gewaardeerd: verwijzing naar tutorials / voorbeeldcode / even me gewoon vertellen wat zoekwoorden die ik zou moeten zijn op zoek naar of wat ik moet eerst leren om dit te doen.

Bedankt!

De vraag is gesteld op 21/12/2011 om 23:17
user
In andere talen...                            


3 antwoorden

stemmen
1

Nou, ten eerste moet je de terminologie die u gebruikt te begrijpen. PHP is niet een event-driven taal, het is een verzoek gestuurd taal. Een verzoek komt in de web-server, PHP ontleedt het en een reactie wordt teruggestuurd naar de aanvrager gestuurd. Op geen enkel moment zijn er gebeurtenissen geactiveerd die u kunt verwerken of te behandelen. U kunt uw eigen "event systeem" uit te voeren, maar uiteindelijk dit is veel meer werk dan wat uw use-case met zich meebrengt.

U kunt het beste is waarschijnlijk het gebruik van AJAX en voortdurend maken van verzoeken om uw PHP-script totdat u de gegevens die u op zoek bent naar terug te keren. Uiteindelijk moet je leren over de XMLHttpRequestJavaScript-object. Nadat u begrijpen hoe je een asynchrone verzoeken gebruik te maken van javascript kunt u kijken naar de setInterval()methode voor het maken van een verzoek herhaaldelijk te maken.

Zodra u herhaaldelijk kan maken asynchrone verzoeken moet het een relatief eenvoudig proces van het creëren van een webpagina waar u de AJAX verzoeken te worden verzonden kan leiden zijn.


Er is geen noodzaak voor een lus in uw PHP-code. De lus wordt effectief uitgevoerd op het andere uiteinde. Hier is een tekstuele workflow die je zou kunnen volgen:

  1. Ga naar een site ontworpen om uw AJAX oproepen activeren en leiden hen.
  2. Maak uw async verzoek om uw PHP-script.
  3. Binnen uw PHP-script openstellen van de XML-bestand en controleer of de benodigde content.
  4. Retourneren een reactie in de vorm van een JSON object. Één antwoord kunnen de gegevens betekenen is niet bijgewerkt, de andere reactie: de gegevens zijn bijgewerkt.
  5. Parse het antwoord, als de gegevens niet herhalen van stap (2) is bijgewerkt. Als de gegevens zijn bijgewerkt verder met stap (6).
  6. Geef een feestelijke groet die uw gegevens zijn bijgewerkt of een bericht dat we nog steeds wachten op de gegevens die moeten worden bijgewerkt. Misschien kunt u het aantal pogingen als goed, aan de zijkant.
antwoordde op 21/12/2011 om 23:57
bron van user

stemmen
0

Ik heb zoiets als dit het schrijven van een inbox parser in PHP. Je bent de beste optie is om:

Code page1.phpwaarin je je 2 dingen doen: lezen XML uit page2.xmlen als er iets "nieuws" just the-data parsing code uit te voeren.

Setup een Cron job (als je onder linux) om de 5 minuten of zo uit te voeren (Cron commando is iets als: php /path/to/page1.php). Op dezelfde manier, als u werkt onder Windows kunt u opstelling een geplande taak en voer hetzelfde commando. Wees ervan bewust dat het volledige pad naar uw PHP-installatie moet in PATHomgevingsvariabele.

antwoordde op 22/12/2011 om 00:20
bron van user

stemmen
1

Ik heb de volgende:

Automatisch opgeslagen in de database elke keer iets nieuws kwam.

Toen rende een php lus die om de paar minuten gecontroleerd om te zien of er iets nieuws in de databank waarin de parameters van dit nieuwe evenement (met inbegrip van dat het happenned binnen het tijdsbestek van de laatste paar minuten) past. Ik gebruikte flush();en vervolgens sleep(120);in de lus om de lus krijgen te blijven draaien om de paar minuten, totdat de nieuwe informatie kwam in welk geval het zal break();of die();.

antwoordde op 03/01/2012 om 23:57
bron van user

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