Hallo,
ich habe vor einiger Zeit ein kleines Tool gebastelt, dass es den Spielern eines Browser-Spiels ermöglichen soll, ein paar organisatorische Aufgaben u erledigen.
Dazu wird der Inhalt einer Website manuell in ein textarea kopiert und dann ausgewertet.
Bisher hat das mit Firefox und IE ganz gunt funktioniert.
Nach dem Start einer neuen Runde des Spiels wurden scheinbar ein paar Ausgaben verändert und das Such-muster passt nicht mehr ganz genau.
Interessant ist aber, was nun passiert. Statt einfach nichts zu finden, kehr preg_match_all scheinbar nicht mehr zurück und die Bearbeitng des Scripts wird abgebrochen.
Hier mal die Nachrichten, die zu parsen sind:
Hier der relevante Teil des Scripts (gekürzt):
Egal, was preg_match_all so findet oder nicht, sollte oben HALLO ausgegeben werden. Außerdem sollte "Eingegebene Berichte: ..." erscheinen.
Was statt dessen passiert ist folgendes:
Im TaskManager sehe ich, dass nach Absenden des Formulars die CPU-Auslastung für einige Sekunden merklich ansteigt. Von 3%-4% auf 60%-70%. Danach fällt sie wieder ab auf den vorherigen Wert.
In der Prozessansicht ist im gleichen Zeitraum ein Anstieg des Rechenzeitanteils des Apachen festzustellen.
Irgendwas macht das Script also.
Aber auch wenn wieder alles auf Ruheniveau ist, kommt keine Ausgabe im Browser heraus.
Lasse ich den zweiten Teil der Eingabe weg, so wird zwar kein gültiger Bericht erkannt, aber immerhin erfolgen die Ausgaben wie erwartet.
Woran kann das liegen?
Das exit() habe ich nur eingefügt, um den Fehler im preg_match_all zu lokalisieren.
Bei einer ganz anderen Gelegenheit ist mir dieses Verhalten auch schon aufgefallen. Statt einfach nur nichts zu parsen, erfolgte keine Ausgabe des Scripts.
Das Problem tritt sowohl lokal (PHP 5.1.4), als auch bei meinem Hoster (PHP 4.4.2) auf.
Bei größeren Eingebamengen würde ich noch verstehen, dass die Suche etwas aufwändiger wird und evtl. Speicher in Anspruch nimmt. Aber bei den derart reduzierten Mengen sollte das doch kein Problem sein.
Hat irgendwer Erfahrungen mit derart seltsamen Verhaltensweisen?
ich habe vor einiger Zeit ein kleines Tool gebastelt, dass es den Spielern eines Browser-Spiels ermöglichen soll, ein paar organisatorische Aufgaben u erledigen.
Dazu wird der Inhalt einer Website manuell in ein textarea kopiert und dann ausgewertet.
Bisher hat das mit Firefox und IE ganz gunt funktioniert.
Nach dem Start einer neuen Runde des Spiels wurden scheinbar ein paar Ausgaben verändert und das Such-muster passt nicht mehr ganz genau.
Interessant ist aber, was nun passiert. Statt einfach nichts zu finden, kehr preg_match_all scheinbar nicht mehr zurück und die Bearbeitng des Scripts wird abgebrochen.
Hier mal die Nachrichten, die zu parsen sind:
Alle Nachrichten vernichten: Nachricht verbrennen | Alle markierten Nachrichten löschen:
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 200 Holz für 20 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 150 Holz für 15 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 200 Holz für 20 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 150 Holz für 15 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
PHP-Code:
<?php
echo "HALLO!!!!
\n"; // DAS sollte eigentlich immer ausgegeben werden!
...
if (isset($_POST['berichte']))
{
echo 'Eingegebene Berichte:
'.$_POST['berichte'].'
';
$Suchmuster1 = '#' .
'Botschaft von: Eurer Handelsniederlassung (.|\n)+' .
'.*Wurde Euch überbracht am: \d+\. [^ ]+ \d+ \d+\:\d+ Uhr' .
'#U';
preg_match_all($Suchmuster1, $_POST['berichte'], $Ergebnis, PREG_PATTERN_ORDER);
exit();
?>
Was statt dessen passiert ist folgendes:
Im TaskManager sehe ich, dass nach Absenden des Formulars die CPU-Auslastung für einige Sekunden merklich ansteigt. Von 3%-4% auf 60%-70%. Danach fällt sie wieder ab auf den vorherigen Wert.
In der Prozessansicht ist im gleichen Zeitraum ein Anstieg des Rechenzeitanteils des Apachen festzustellen.
Irgendwas macht das Script also.
Aber auch wenn wieder alles auf Ruheniveau ist, kommt keine Ausgabe im Browser heraus.
Lasse ich den zweiten Teil der Eingabe weg, so wird zwar kein gültiger Bericht erkannt, aber immerhin erfolgen die Ausgaben wie erwartet.
Alle Nachrichten vernichten: Nachricht verbrennen | Alle markierten Nachrichten löschen:
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 200 Holz für 20 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
Botschaft von: Eurer Handelsniederlassung
Eines Eurer Handelsangebote wurde angenommen.
Grimbart der Schlaechter bezahlte 200 Holz für 20 Gold.
Wurde Euch überbracht am: 19. November 06 13:21
Nachrichten
Nachricht verbrennen Diese Nachricht archivieren
Das exit() habe ich nur eingefügt, um den Fehler im preg_match_all zu lokalisieren.
Bei einer ganz anderen Gelegenheit ist mir dieses Verhalten auch schon aufgefallen. Statt einfach nur nichts zu parsen, erfolgte keine Ausgabe des Scripts.
Das Problem tritt sowohl lokal (PHP 5.1.4), als auch bei meinem Hoster (PHP 4.4.2) auf.
Bei größeren Eingebamengen würde ich noch verstehen, dass die Suche etwas aufwändiger wird und evtl. Speicher in Anspruch nimmt. Aber bei den derart reduzierten Mengen sollte das doch kein Problem sein.
Hat irgendwer Erfahrungen mit derart seltsamen Verhaltensweisen?

Kommentar