Es gibt solche Momente im Leben eines Entwicklers, die kurzzeitig verwirren, bis man dann nach genauerem Hinschauen den AHA-Effekt hat und man seine eigene Doofheit erkennt. Und dann gibt es leider auch die Momente, in denen man einen Fehler hat, der einfach komplett unerklärbar ist und nach Betriebssystem- oder Programmiersprachen Bug aussieht und der einen an den Rande der Verzweiflung treibt, bis man irgendeinen funktionierenden Work-Around gefunden hat, aber selbst dann hinterlassen solche Bugs das ungute Gefühl des Kontroll-Verlusts. So einen hatte ich gerade wieder. Mein PHP-Code setzt während der Laufzeit einen Pfad für Icons zusammen:
$genhts_val_new wird vorher schon mit dem Dateinamen des Icons gefüllt, z.B. "iconname123"
$sys_url_icons ist eine globale Variable die den Basis-Pfad für Icons enthält, z.B. "https://www.blabla_projekt/runtime/ico
$genhts_datei_suffix: Naja, spricht für sich, z.B. "gif"
Das Ergebnis hätte also sein müssen: https://www.blabla_projekt/runtime/ico/iconname123.gif
Der Code funktionierte offline. Nachdem ich ihn zum Hoster hochgeladen habe fehlten die Icons. Im generierten Source-Code befand sich folgender Pfad: https://www.blabla_projekt/runtime/mod/runtime/ico/iconname123.gif. Ich habe fett markiert was zusätzlich drin war und was nicht hätte drin sein dürfen.
Ok, bis hierher könnte man sagen: Doofer Programmierer, irgendwo halt ein Bug in der Logik, Guck richtig hin und nerv hier nicht rum. Jetzt wird es allerdings extrem kurios:
Ich habe hinter dem PHP-Code zum Zusammenbau ein echo $genhts_val_new reingepackt. Ich speichere, lade das hoch, mache ein Page-reload und die Icons sind da!!! Der Pfad wird plötzlich richtig generiert! Vorher habe ich die Seite über Stunden übrigens mehrfach aufgerufen und es hat nie funktioniert.
Es wird noch kurioser. Ich lösche das ECHO wieder raus, es funktioniert weiterhin, allerdings sind noch ein paar Spaces drin, die ich nach dem Einfügen nicht mehr mit rausgelöscht hatte.
Ich lösche die Spaces weg, der Code ist also wieder so wie vorher. ES FUNKTIONIERT NICHT MEHR, die Icons sind weg, der Pfad im generierten Code wieder falsch.
Ich füge nun ein einzelnes Space hinter das Konkatenieren von $genhts_val_new ein - es funktioniert wieder, die Icons sind wieder da.
Jetzt wirds noch kurioser:
Ich lösche das einzelne Space wieder weg: Die Icons sind weiterhin da!
Ich lade den alten Code von heute Vormittag - eine komplett unberührte Datei - erneut auf den Web-Server: Es funktioniert weiterhin, die Icons sind da.
Der Fehler ließ sich seit dem nicht mehr reproduzieren!!! :-O
Meine Frage: Könnte dieses Konkatenieren vielleicht buggy sein? Immerhin habe ich die Empfänger-Variable auch als Quell-Variable drin, bekommt er das vielleicht unter irgendwelchen Umständen nicht sauber hin?
Oder habt ihr irgendeine andere Idee wodurch das verursacht sein kann?
PHP Code:
$genhts_val_new = $sys_url_icons.'/'.$genhts_val_new.'.'.$genhts_datei_suffix;
$genhts_val_new wird vorher schon mit dem Dateinamen des Icons gefüllt, z.B. "iconname123"
$sys_url_icons ist eine globale Variable die den Basis-Pfad für Icons enthält, z.B. "https://www.blabla_projekt/runtime/ico
$genhts_datei_suffix: Naja, spricht für sich, z.B. "gif"
Das Ergebnis hätte also sein müssen: https://www.blabla_projekt/runtime/ico/iconname123.gif
Der Code funktionierte offline. Nachdem ich ihn zum Hoster hochgeladen habe fehlten die Icons. Im generierten Source-Code befand sich folgender Pfad: https://www.blabla_projekt/runtime/mod/runtime/ico/iconname123.gif. Ich habe fett markiert was zusätzlich drin war und was nicht hätte drin sein dürfen.
Ok, bis hierher könnte man sagen: Doofer Programmierer, irgendwo halt ein Bug in der Logik, Guck richtig hin und nerv hier nicht rum. Jetzt wird es allerdings extrem kurios:
Ich habe hinter dem PHP-Code zum Zusammenbau ein echo $genhts_val_new reingepackt. Ich speichere, lade das hoch, mache ein Page-reload und die Icons sind da!!! Der Pfad wird plötzlich richtig generiert! Vorher habe ich die Seite über Stunden übrigens mehrfach aufgerufen und es hat nie funktioniert.
Es wird noch kurioser. Ich lösche das ECHO wieder raus, es funktioniert weiterhin, allerdings sind noch ein paar Spaces drin, die ich nach dem Einfügen nicht mehr mit rausgelöscht hatte.
Ich lösche die Spaces weg, der Code ist also wieder so wie vorher. ES FUNKTIONIERT NICHT MEHR, die Icons sind weg, der Pfad im generierten Code wieder falsch.
Ich füge nun ein einzelnes Space hinter das Konkatenieren von $genhts_val_new ein - es funktioniert wieder, die Icons sind wieder da.
Jetzt wirds noch kurioser:
Ich lösche das einzelne Space wieder weg: Die Icons sind weiterhin da!
Ich lade den alten Code von heute Vormittag - eine komplett unberührte Datei - erneut auf den Web-Server: Es funktioniert weiterhin, die Icons sind da.
Der Fehler ließ sich seit dem nicht mehr reproduzieren!!! :-O
Meine Frage: Könnte dieses Konkatenieren vielleicht buggy sein? Immerhin habe ich die Empfänger-Variable auch als Quell-Variable drin, bekommt er das vielleicht unter irgendwelchen Umständen nicht sauber hin?
Oder habt ihr irgendeine andere Idee wodurch das verursacht sein kann?
Comment