dedlfix: eval nicht mit mehrdimensionalen Arrays möglich?

Beitrag lesen

Hi!

Also, ich möchte mal mit einem Ansatz 'experimentieren', der es mir ermöglicht, in einer CSS-Datei Variablen zu verwenden. Die Werte für diese Variablen sollen aus einer (oder mehreren) INI-Datei kommen.
Am Ende soll wieder eine "normale" (und valide ;-)) CSS-Datei dabei rauskommen

Das würde ich nicht mit PHP-Variablen machen sondern mit Platzhaltern. Diese lassen sich im eval()-los suchen und ersetzen.

Wenn du ein Array mit den Platzhaltern als Keys hast, kannst du strtr() in der zweiten Variante verwenden.
Auch mehrstufige Arrays sind kein großes Problem. Die Platzhalter sehen beispielsweise so aus: <bereich><name1> und <bereich><name2>. Ein
  array("bereich" => array("name1" => "wert1", "name2" => "wert2"))
müsste nur nach
  array("<bereich><name1>" => "wert1", "<bereich><name2>" => "wert2">);
umgeformt werden, was mit zwei geschachtelten foreach-Schleifen und etwas Stringbearbeitung geht.

Also bei Anforderung einer CSS-Datei wird der Aufruf an ein PHP-Script weitergeleitet. Dieses liest die entsprechende CSS-Datei (noch mit den Variablen) ein, ersetzt diese (durch die Werte aus der INI-Datei) und sendet das Ganze dann mit entsprechendem Header an den Browser.

Wenn du wirklich Variablen nehmen willst, geht es nur mit eval(), was ich aber mit obigem Vorschlag für vermeidbar halte.

Zum ursprünglichen Problem: Wenn "...$var[foo][bar]..." als Ergebnis "...Array[bar]..." liefert, so ist nur $var[foo] als Variable erkannt worden. Man kann geschweifte Klammern um die Variablen legen, wenn PHP sie nicht eindeutig in einem ""-String erkennt, also "...{$var[foo][bar]}...". Aber wie gesagt, versuch es lieber ohne eval().

Lo!