Probleme mit leeren Zeichenketten in PHP

Bugreports und Updatewünsche an die Firma contronics
Keine allgemeinen Fragen!

Moderator: Co-Administratoren

Antworten
tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Probleme mit leeren Zeichenketten in PHP

Beitrag von tsa » 25.04.2008, 13:02

Hallo Contronics,

Bümpi und ich sind beim "Erlernen" der PHP-Programmierung fast verzweifelt - wir dachten immer es liegt an unserer Dummheit...
So jedenfalls sind wir auf ein Problem bei der Verarbeitung von leeren Zeichenketten durch PHP-Scripts gestossen - und zwar dann, wenn diese leeren Zeichenketten Studio-Objekten bzw. Studio-Objekt-Variablen zugewiesen werden.

Am Ende des PHP-Scripts werden diese Variablen ja bekanntlich zu den "richtigen" Studio-Objekten zurückübertragen. Wenn einem Objekt vom Typ Zeichen jedoch ein leerer String übergeben werden muß, gibt es Probleme. Die Rückübertragung aller Werte wird komplett abgebrochen, nicht einmal scriptoutput erhält den richtigen Wert. Man kann dann also nicht mal "Debug"-Ausgaben oder PHP-Fehlermeldungen über scriptoutput einsehen!

Es erscheint nur die lapidare Fehlermeldung "Error executing PHP-Script in <Objektname>" in der Statuszeile des Visualisierungsfensters - und zwar nur für kurze Zeit.
(...hat das gedauert, bis ich darauf gekommen bin...)

Ansonsten wird das Script aber sauber bis zur letzten Zeile abgearbeitet (Dateiausgaben etc. funktionieren - nur eben die Rückgabe der Werte an Studio nicht).

Hier ein Beispiel, bei dem das Verhalten gut reproduzierbar ist:
(a1, a2, a3 sind Variablen vom Typ Zeichen innerhalb des Objektes Anzeige vom Typ Zeichen)

Code: Alles auswählen

Anzeige := "abc#def#geh"

a1 := "123"
a2 := "456"
a3 := "789"

<?
  $array = explode("#", $Anzeige);
  $V_Anzeige_a1 = $array[0];
  $V_Anzeige_a2 = $array[1];
  $V_Anzeige_a3 = $array[2];
?>

Anzeige := a1 + "-" + a2 + "-" + a3
Dieser Code funktioniert und liefert das korrekte Ergebnis "abc-def-geh" in der Anzeige.

Mit der folgenden Änderung in der ersten Zeile allerdings, funktioniert das Makro nicht mehr:

Code: Alles auswählen

Anzeige := "abc##geh"

a1 := "123"
a2 := "456"
a3 := "789"

<?
  $array = explode("#", $Anzeige);
  $V_Anzeige_a1 = $array[0];
  $V_Anzeige_a2 = $array[1];
  $V_Anzeige_a3 = $array[2];
?>

Anzeige := a1 + "-" + a2 + "-" + a3
Dieser Code liefert das falsche Ergebnis "123-456-789" in der Anzeige. Ausserdem erscheint kurz die o.g. Fehlermeldung.

Bei der Gelegenheit auch gleich noch eine Bitte von Bümpi, die mir auch sehr sinnvoll erscheint:
könnte man nicht...
Bümpi hat geschrieben:...die Meldungen in der Statuszeile mit Zeitstempel versehen und stehen lassen, bis sie überschrieben werden. Wer sitzt schon 24 Stunden am
PC und schaut alle 5 Sekunden in diese Statuszeile?????
Vielen Dank im Voraus für die Anteilnahme, :wink:
allen ein schönes Wochenende
Thomas

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von contronics-RK » 08.05.2008, 13:55

Danke für den Hinweis, wir werden versuchen dieses Problem mit dem nächsten Update zu beseitigen.
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von contronics-RK » 15.08.2008, 16:42

Hallo,

wir haben das jetzt mal geprüft. Der Fehler liegt nicht daran, dass ein leerer String im php-Code erzeugt bzw. übergeben wird. Der Fehler ist, dass im php-Code auf einen nicht existenten array-Index zugegeriffen wird (array[3]), der durch die explode-Anweisung nicht erzeugt wurde. Das verursacht einen Abbruch des php-Interpreters. Daher ist die Fehlermeldung korrekt, könnte allerdings wirklich mehr zum Fehler aussagen.
Wir haben daher jetzt folgende Änderung gemacht:
Die Fehlermeldung bei Abbruch des php-Interpreters wird auch angezeigt und in die Meldungsliste geschrieben. Diese lautet in dem Fall:
List index out of bounds(3)

Hier noch der Code, wenn einfach nur ein String leer ist, das funktioniert:

Code: Alles auswählen

**Anzeige := "abc##geh" ergibt als explode-Ergebnis übrigens nur 1 array-Element
Anzeige := "abc#geh"

a1 := "123"
a2 := "456"
a3 := "789"

<?
  $array = explode("#", $Anzeige);
  $V_Anzeige_a1 = $array[0];
  $V_Anzeige_a2 = $array[1];
  $V_Anzeige_a3 = "";
?>

Anzeige := a1 + "-" + a2 + "-" + a3
Anfang nächster Woche kommt ein Update, in dem die php-Fehlermeldung angezeigt wird.

Ein schönes Wochenende.
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von buempi » 16.08.2008, 08:51

Sehr geehrter Herr Krapoth

Die Erklärung mit dem nicht existierenden Array-Index klingt plausibel. Das von Ihnen angeführte Beispiel funktioniert auch bei mir richtig. Ändere ich den Code aber wie folgt, geht's schon nicht mehr:

Code: Alles auswählen

<?
  $array = explode("#", $Anzeige);
  $V_Anzeige_a1 = $array[0];
  $V_Anzeige_a2 = "";
  $V_Anzeige_a3 = $array[1];
?>
Der Fehler mit leeren Strings zeigt sich aber auch in anderen Fällen, wenn kein Array verwendet wird. Ich habe ein einfaches Projekt gemacht:

Anzeige1, Typ Zeichen, Startwert "Das ist Text"
Anzeige2, Typ Zeichen, kein Startwert

In einem Objekt vom Typ Knopf habe ich folgendes Skript hinterlegt:

Code: Alles auswählen

<?
$Anzeige2 = $Anzeige1;
$Anzeige1 = "";
?>
Beim ersten Klick auf den Knopf wechselt der Text richtig von Anzeige1 zu Anzeige2. Beim zweiten Klick passiert aber nichts mehr, und in der Statuszeile erscheint die Meldung "Error executing PHP-Script". Trage ich aber in der zweiten Skript-Zeile " " statt "" ein, läuft alles richtig.

Auch Ihnen schönes Wochenende und viele Grüsse
Bümpi

PS: Es wäre schön, wenn mein Wunsch, die Meldungen in der Statuszeile (Zeitüberschreitung/PHP-Fehler usw.) mit Zeitstempel zu versehen und länger anzuzeigen (oder in ein File zu schreiben) gelegentlich in Erfüllung gehen würde...

murmel64
Beiträge: 46
Registriert: 19.01.2007, 19:06
Kontaktdaten:

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von murmel64 » 16.08.2008, 15:21

Hallo,

das heisst auch die Variable leeren.

Code: Alles auswählen

$Anzeige1 = "";
hier steht was drinnen.

Code: Alles auswählen

$Anzeige1 = " ";
So ganz verstehe ich euer PHP eh nicht.

Wenn ich eine Variable deklariere z.B. $Anzeige = xyz; dann kann man dieses auch einwandfrei auswerten

Hier wird $Anzeige ausgewertet obwohl sie nirgends richtig definiert wurde, es sei denn Anzeige:= soll dieses interpretieren.

Kleiner Lesestoff zu Array http://de.php.net/array und hier zu explode http://de3.php.net/explode
Gruß Rainer
_____________________________________

FHZ 1300 PC, einige FHT-80B-2, KS 300, und einiges mehr

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von buempi » 17.08.2008, 13:28

Hallo Rainer

Vielen Dank für den gut gemeinten Ratschlag. Aber vermutlich hast du übersehen, dass "Anzeige" im Makro von Herrn Krapoth bzw. "Anzeige1" in meinem Makro Homeputer-Objekte vom Typ Zeichen sind. Damit sind sie bereits als (globale) Variablen definiert. Und eine String-Variable MUSS auch den Wert "" annehmen können. Dadurch wird sie nicht "ent-definiert" bzw. gelöscht, sondern einfach nur zum Leerstring.

Viele Grüsse und schönen Sonntag
Bümpi

contronics-RK
Beiträge: 954
Registriert: 18.07.2006, 15:58

Re: Probleme mit leeren Zeichenketten in PHP

Beitrag von contronics-RK » 18.08.2008, 14:51

Hallo zusammen,

es ist wohl tatsächlich so, dass eine leere Stringzuweisung zu einem Abbruch-Fehler bei der PHP-Ausführung führen kann. Danke für den Hinweis, wir hatten erst gedacht der Fehler läge nur an dem fehlenden array-Index.
Da dieser Fehler beim Aufruf des Execute-Befehls in der php-Schnittstellen-DLL passiert, können wir da leider keine schnelle Abhilfe schaffen. Es bleibt momentan also wirklich nichts über, als keine Leerzuweisungen von Strings im PHP-Teil zu machen.
Im Internet steht ein neues Update (80812), dort ist es jetzt so geändert, dass eine ausführlichere Fehlermeldung kommt.

Die Fehlermeldung "Error executing PHP-Script..." bedeutet, dass der PHP-Interpreter die Ausführung des Scripts aufgrund eine Fehlers abgebrochen hat, soweit vorhanden werden weitere Hinweise zum Fehler ausgegeben, wegen des Abbruchs sind allerdings keine Variablenwerte übernommen worden und die Variable Scriptouput ist leer.
Die Fehlermeldung "Script-Error in Makro ..." bedeutet, dass die Ausführung normal beendet wurde, aber Fehler im Script waren, zu denen weitere Hinweise in der Variablen Scriptoutput stehen.

Ich hoffe die erweiterten Fehlermeldungen und das Schreiben dieser in die Meldungsliste hilft erstmal weiter.
Mit freundlichem Gruss
CL-control - Ralph Krapoth
http://www.cl-control.de
Bei Fragen bitte keine PMs, sondern mail an technik@cl-control.de
PMs werden nicht regelmässig kontrolliert und und können unbeantwortet bleiben.

Antworten

Zurück zu „homeputer Studio / Standard: Bugs & Updatewünsche“