[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