Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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!  monkey

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 ...

roll

Manchmal frage ich mich echt wieviel Tomate eigentlich auf ein Auge passt ... big_smile


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