Komplizierter Such und Ersetzvorgang
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
durchsuchen
erledigen
ersetzung
ersten blick
funktionieren
gesetzten variablen ersetzen
hand
lokale zwecke
problem
richtig ersetzen
sicherheit
string
test
umsetzen
url
vorhaben
welt
wunschdenken
zeile
-
Moin,
ich stehe vor einem derzeit für mich unlösbaren Problem. Vorab ein Beispiel:
<?php $xyz = 'Hallo Welt'; $abc = 'Dies ist ein Test.'; ${"GLOBALS"}["test1"] = 'xyz'; ${"GLOBALS"}["test2"] = 'abc'; echo 'xxx - '.${${"GLOBALS"}["test1"]}.' - '.${${"GLOBALS"}["test2"]}.' - xxx'; ?>
Der o.g. Code erzeugt folgende Ausgabe:
xxx - Hallo Welt - Dies ist ein Test. - xxx
Die Ausgabe selbst ist aber völlig uninteressant. Mein Problem bzw. mein Vorhaben ist folgendes:
Der o.g. Code wird als String hinterlegt und ich möchte nun diesen String nach
{${"GLOBALS"}["xxxxxxxxxx"]}
durchsuchen. Das würde ich ja gerade noch hinbekommen ;) xxxxxxxxxx deshalb, weil dies variabel ist d.h. nicht gleichbleibend. Tut aber auch nichts zur Sache.
Weiter gehts... Wenn ich nun sämtliche Vorkommnisse gefunden habe, möchte ich diese mit dem eigentlichen Inhalt der zuvor gesetzten Variablen ersetzen.
Lange Rede, kurzer Sinn:
Aus dem o.g. Code bzw. String soll am Ende dies werden:
<?php $xyz = 'Hallo Welt'; $abc = 'Dies ist ein Test.'; ${"GLOBALS"}["test1"] = 'xyz'; ${"GLOBALS"}["test2"] = 'abc'; echo 'xxx - '.$xyz.' - '.$abc.' - xxx'; ?>
Jemand eine Idee, wie sich das umsetzen lassen würde? Dass es geht, weiß ich. Nur wie, kriege ich noch nicht wirklich raus.
PS: Der eigentliche Code ist mehrere tausend Zeilen lang, weshalb ich die Aufgabe nicht "mal eben" per Hand durchführen kann...
EDIT:
Ich habe es nun so probiert:
<?php $str = "<?php \$xyz = 'Hallo Welt'; \$abc = 'Dies ist ein Test.'; \${\"GLOBALS\"}[\"test1\"] = 'xyz'; \${\"GLOBALS\"}[\"test2\"] = 'abc'; echo 'xxx - '.\${\${\"GLOBALS\"}[\"test1\"]}.' - '.\${\${\"GLOBALS\"}[\"test2\"]}.' - xxx'; ?>"; preg_match_all('/\$\{"GLOBALS"\}\["(.*?)"\] = \'(.*?)\';/i', $str, $arr, PREG_SET_ORDER); echo '<pre>'; print_r($arr); echo '</pre>'; ?>
Das funktioniert soweit auch. $arr[1] und $arr[2] beinhalten genau das, was ich für meine Suche benötige. Jetzt muss ich das Ganze nurnoch richtig ersetzen...
EDIT:
Okay... Ersetzung scheint auf den ersten Blick so zu funktionieren:
foreach($arr as $item) { $str = str_replace('${${"GLOBALS"}["'.$item[1].'"]}', '$'.$item[2].'', $str); }
EDIT:
Okay.... Scheint zu funktionieren, wie ich das gerne hätte :)
Beitrag zuletzt geändert: 20.8.2011 16:29:16 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
kann das sein, dass es ist, was ich denk'? du versuchst PHP-source mittem im proglauf zu ändern? wenn das der fall ist, frage dich auch nach sicherheit!
Beitrag zuletzt geändert: 20.8.2011 23:59:31 von hemiolos -
fabo schrieb:
1. Nein, tu ich nicht :)
2. Sicherheit ist kein Problem. Das Ganze ist für lokale Zwecke gedacht :)
zu 1.:
das sieht mir aber verdammt genau danach aus, dass du php runtime manipulierst.<?php $str = "<?php \$xyz = 'Hallo Welt'; \$abc = 'Dies ist ein Test.'; \${\"GLOBALS\"}[\"test1\"] = 'xyz'; \${\"GLOBALS\"}[\"test2\"] = 'abc'; echo 'xxx - '.\${\${\"GLOBALS\"}[\"test1\"]}.' - '.\${\${\"GLOBALS\"}[\"test2\"]}.' - xxx'; ?>"; preg_match_all('/\$\{"GLOBALS"\}\["(.*?)"\] = \'(.*?)\';/i', $str, $arr, PREG_SET_ORDER); echo '<pre>'; print_r($arr); echo '</pre>'; ?>
zu 2.:
man sollte das wort sicherheit (in punkto IT) - wenn überhaupt - nur zur not in den mund nehmen. (alles andere ist wunschdenken ;o) -
Es geht einfach darum, ein paar lokale Dateien von "Unreinheiten" zu bereinigen. Ich könnte das genau so gut per Hand erledigen, aber bei über 5.000 Zeilen Code vergeht Einem der Spaß. Deswegen der Versuch der Automatisierung.
Wie bereits gesagt, interessiert die Sicherheit hier nicht, weil das SO niemand jemals zu Gesicht bekommen wird. Nicht einmal mein Server ;)
Beitrag zuletzt geändert: 22.8.2011 3:32:10 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage