[Allegro] rset.php hat einen fehler, der nur unter php 5.x sichtbar wird
Thomas Berger
ThB at Gymel.com
Di Nov 15 10:08:11 CET 2011
Lieber Herr Lehmann, lieber Herr Oberfell,
ich habe mir die Sache in rset.php einmal angesehen:
Der Test auf "-1" klappt dann, wenn es ein Verbindungsproblem
beim Senden des Jobs gegeben hat.
Gibt es hingegen eines beim Empfang des Ergebnisses, oder ist
das Ergebnis (bis auf evtl. "AVANTI:EOR" leer), dann ist $k = 0,
aber dennoch ist das Ergebnis leer. Der Kommentar
/* $k = Anzahl Zeilen der Ausgabe */
ist also korrekt, d.h. $k ist eins groesser als der maximal
definierte Index des Arrays $erg und insbesondere darf man
nichts mit $erg[0] machen, wenn $k == 0.
Im Kontext von rset.php scheint mir $k == 0 ein Fehlerfall zu
sein, der abgefangen werden sollte.
Insgesamt ist es vermutlich einer der ueblichen Fehler, die mit
"Child exited" korrelieren, also ein acon-Problem, das zu einem
leeren Ergebnis fuehrt. Ursache kann so ziemlich alles sein,
gestern z.B. bei mir:
- Server hat keine Leserechte auf die Parameterdatei
- "dow a" gegeben, aber die Default-Parameterdatei e-w.apr nicht
im Pfad: Nach "zu vielen" dieser Problem im gleichen Job
Crash
viele Gruesse
Thomas Berger
Am 12.11.2011 11:55, schrieb Jörg Oberfell:
> Lieber Herr Lehmann,
>
>>> Feldelement meint hier $erg[0], also das erste Element im Array $erg.
>>> Die PHP-Meldung lässt sich mit folgendem PHP-Skript reproduzieren:
>>> $erg = array(); // LEERES Array
>>> if(substr($erg[0],0,2)=="i="){}
>>>
>>> Mit einem einelementigen Array, z. B.
>>> $erg = array(""); // Array mit einem Element (leerer String)
>>> if(substr($erg[0],0,2)=="i="){}
>>> ist die Meldung dann weg.
>
>> also löst ihre zusätzliche zeile das problem?!
>> es gilt es auszuprobieren.
>
>
> Das war nicht(!) als Lösung gedacht, sondern als Test, um die Fehlermeldung zu
> provozieren bzw. um zu zeigen, dass die Meldung im zweiten Beispiel [$erg =
> array("")] nicht mehr auftritt, denn im einelementigen Array kann problemlos auf
> das erste Element zugegriffen werden.
>
>
>> ich rate/interpretiere: kommt ein "i="irgendwas oder kommt eben als
>> nur mögliche alternative eben NICHTS, ist $erg leer. zu einfach?
>
> Ich kann nicht beurteilen, was von acon zurückkommt, wenn KEIN Datensatz
> gefunden wird. Kommt dann wirklich nichts? Das ist natürlich Job-abhängig (mein
> rset.php sieht etwas anders aus), aber meistens steht in den Jobs doch
> irgendetwas wie "Nichts gefunden", und zumindest das müsste nachher in $erg stehen.
>
>
>> ein anderer ansatz ist auch:
>> wir geben explicit an dieser stelle gar keine fehlermeldungen raus!
>> und zwar so: (seit gestern abend getestet)
>>
>> in der rset.php um ein "@" ergänzt
>> if(substr(@$erg[0],0,2)=="i=").
>> ~
>> ist das "kopf in den wüstensand stecken"?
>
>
> Man müsste zunächst prüfen, ob semantisch gesehen eine leere Antwort gültig ist,
> oder aus semantischer Sicht einen Fehler bedeutet. Dann würde ich Folgendes vor
> die problematische Zeile setzen:
>
> if (count($erg) == 0) { // Ergebnis-Array ist leer
> //entweder leere Antwort oder aber Fehlermeldung ausgeben
> }
> else if (substr(@$erg[0],0,2)=="i="))
> ...
>
>
> Viele Grüße,
> Jörg Oberfell
>
>
>
> _______________________________________________
> Allegro mailing list
> Allegro at biblio.tu-bs.de
> http://sun250.biblio.etc.tu-bs.de/mailman/listinfo/allegro
Mehr Informationen über die Mailingliste Allegro