Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 09. Februar 2012 22:35
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
[GELÖST] PHP spinnt? - Nein, ICH!
Kennt sich hier jemand mit PHP aus?
Ich offensichtlich nicht mehr.
Was ist an diesem Code falsch:
if(!class_exists('meine_klasse'))
{
final class meine_klasse
{
public static function meine_funktion()
{
$config = cmsms()->GetConfig();
$var1 = $config['uploads_path'] . '/mein_verzeichnis';
$var2 = $config['uploads_url'] . '/mein_verzeichnis';
$var3 = basename($config['uploads_path']) . '/mein_verzeichnis';
echo $var1 . "<br/>"; # <- Hier behauptet PHP felsenfest "Notice: Undefined variable: var1 in /.../lib/classes/class.usertagoperations.inc.php(158) : eval()'d code on line 86"
echo $var2 . "<br/>";
echo $var3 . "<br/>";
...
}
}
}
meine_klasse::meine_funktion();
Die anderen beiden Variablen funktionieren.
Nur bei der ersten behauptet PHP die Variable würde nicht existieren.
Ich check's einfach nicht!
System:
CMSms 1.9.4.1
PHP 5.2.12-nmm2
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#2 09. Februar 2012 22:44
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Lustigerweise funktioniert folgendes:
$var1 = $config['uploads_path'] . '/mein_verzeichnis';
while(!isset($var1))
$var1 = $config['uploads_path'] . '/mein_verzeichnis';
Kann sich das jemand erklären?
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#3 10. Februar 2012 18:24
- dc2
- kennt CMS/ms
- Registriert: 26. November 2010
- Beiträge: 140
- Webseite
Re: [GELÖST] PHP spinnt? - Nein, ICH!
GetConfig liefert kein echtes Array sondern ein Objekt, dessen Klasse ArrayAccess implementiert. Intern wird da mit irgendeinem Cache gearbeitet, möglicherweise hat die Funktion da einen Fehler (zu finden ist das ganze in lib/classes/class.cms_config.php).
Beitrag geändert von dc2 (10. Februar 2012 18:25)
Offline
#4 10. Februar 2012 18:30
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Danke, aber das Problem ist ja nicht GetConfig() oder $config, sondern $var1.
Selbst wenn GetConfig() bzw. $config['irgendwas'] ein falsches Ergebnis liefert, dann sollte doch $var1 trotzdem definiert werden, oder?
Selbst wenn ich die Variable $var1 mit irgendeinem statischen Wert (z.B. 'foo') belege, sagt mir PHP in der nächsten Zeile, dass diese Variable nicht existieren würde. Und das ist es, was ich nicht verstehe.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#5 10. Februar 2012 18:37
- dc2
- kennt CMS/ms
- Registriert: 26. November 2010
- Beiträge: 140
- Webseite
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Hnm, das hört sich wirklich seltsam an. Wo genau benutzt du diesen Code, in der Fehlermeldung steht ja was von eval und usertag.
Vielleicht wird der Code vor der Ausführung "aufbereitet" und damit fehlerhaft. Das würde erklären, warum auch bei der Zuweisung eines konstanten Wertes derselbe Fehler auftritt.
Beitrag geändert von dc2 (10. Februar 2012 18:38)
Offline
#6 10. Februar 2012 18:51
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Naja, wie man aus der Meldung bestimmt schon erahnen kann, ist das ein UDT. Da wird aber vom CMS nichts weiter aufbereitet. Der Code wird aus der Datenbank geholt, und mit eval() einfach ausgeführt.
Außerdem würde das ja bedeuten, dass das immer auftritt. Aber es betrifft nur die erste Variable. Ich habe außerdem noch eine andere CMSms Installation beim selben Hoster (A-Inkl) jedoch mit einem anderen Paket. Und da funktioniert es. Müsste also PHP bzw. Server-spezifisch sein.
Ich werde mal im Core noch ein paar Debug-Ausgaben hinzufügen.
Vielleicht ist der Code auch nur falsch in der DB gelandet (Zeichenkodierungssalat etc.).
Wodurch vielleicht irgendwo ein Zeichen ist, was ich nicht sehen kann, aber eben dazu führt, dass die komplette Zeile "nicht existiert".
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#7 10. Februar 2012 19:11
- piratos
- arbeitet mit CMS/ms
- Registriert: 12. August 2011
- Beiträge: 545
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Der von hier kopierte Code als UDT ausgeführt funzt bei mir einwandfrei und erzeugt folgende Ausgaben:
/var/www/cmsms110/uploads/mein_verzeichnis
http://localhost/cmsms110/uploads/mein_verzeichnis
uploads/mein_verzeichnis
Offline
#8 10. Februar 2012 19:21
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] PHP spinnt? - Nein, ICH!
Klassischer Fall von Vollidiot.
Nicht PHP spinnt, sondern ich.
Nachdem ich einfach mal die Zeilen vertauscht hatte, betraf es plötzlich die zweite Variable. usw.
Nachdem ich alle Zeilen entfernt und neu geschrieben hatte, und wieder die erste Variable bemängelt wurde, fiel mir auf, dass der Fehler nie im Debug-Modus auftritt. Ich sehe den Fehler immer nur kurz, während auf eine andere Seite umgeleitet wird. Im Debug-Modus kann man das Umleiten zwar deaktivieren, aber da sieht man den Fehler nicht ...
Nunja, was ich euch verschwiegen habe ist, dass ich weiter oben vor der ersten Variable noch ein paar Debug-Ausgaben und ein paar andere Zeilen hatte:
if($config['debug'])
{
...
}
...
diese hatte ich mal auskommentiert, weil sie mich gestört haben. Nunja, und da war ein Kommentarzeichen zu wenig:
if($config['debug']) <- !!!
#{
# ...
#}
#...
Was natürlich dazu führt, dass die nächste nicht auskommentierte Zeile - da wo der Fehler immer aufgetreten ist - nur im Debug-Modus gilt und sonst die Variable tatsächlich nicht definiert wird ...
Manchmal frage ich mich echt wieviel Tomate eigentlich auf ein Auge passt ...
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
Seiten: 1