2010-03-24 10 views
9

Ich muss Variablen in einer PHP-Datei mit PHP dauerhaft ändern können.Permanent Variablen in eine PHP-Datei schreiben mit PHP

Ich erstelle eine mehrsprachige Website mit codeigniter und mit Hilfe der Sprache Helfern, die den Text in PHP-Dateien in Variablen in diesem Format gespeichert werden: $lang['title'] = "Stuff";

Ich habe in der Lage gewesen, den Klartext der Dateien zuzugreifen, mit fopen() etc und ich scheint, dass ich wahrscheinlich die Bereiche, mit denen ich bearbeiten möchte, mit regulären Ausdrücken lokalisieren und die Datei neu schreiben kann, sobald ich die Änderungen vorgenommen habe, aber es scheint ein bisschen hacky.

Gibt es eine einfache Möglichkeit, diese Variablen dauerhaft mit PHP zu bearbeiten?

Prost

+0

Gute Frage! Da ist der Tokenizer, der PHP-Code aber nur auseinander nimmt und nicht wieder zusammensetzen kann. Interessiert zu sehen, was aufkommt. –

+1

Was genau versuchst du zu tun? Warum müssten Sie die Sprache dynamisch in die CodeIgniter-Sprachdateien schreiben? Wenn dies ein CMS ist, dann wäre es sicherlich eine bessere Idee, die Sprachbibliothek zu erweitern, um mit der Datenbank zu kommunizieren. –

Antwort

6

Wenn es nur Array, mit dem Sie es zu tun haben, möchten Sie vielleicht var_export betrachten. Es wird den Ausdruck in einem Format ausgeben oder zurückgeben, das gültigen PHP-Code ist.

Also, wenn Sie language_foo.php, die enthalten eine Reihe von $lang['title'] = "Stuff"; Linien hatte, konnte man etwas entlang der Linien von tun:

include('language_foo.php'); 
$lang['title2'] = 'stuff2'; 
$data = '$lang = ' . var_export($lang, true) . ';'; 
file_put_contents('language_foo.php', '<?PHP ' . $data . ' ?>'); 

Alternativ, wenn Sie sie nicht in der Hand-bearbeiten wollen Zukünftig sollten Sie in Erwägung ziehen, die Daten anders zu speichern (z. B. in einer Datenbank oder usw.).

+0

+1 entfernt meine Antwort zugunsten, das ist der einfachste Weg! – Andy

+0

+1 für var_export hands down. War mir nicht bewusst, dass die Daten dafür im perfekten Format produziert werden. –

+0

Wenn Sie nur schreiben wollen, ist das perfekt. –

0

Ich hatte einmal ein ähnliches Problem konfrontiert. Ich habe es behoben, indem ich einfach eine Smarty-Vorlage hinzugefügt habe. Die Art, wie ich es tat, war wie folgt:

  1. Lesen Sie das Array aus der Datei
  2. zum Array hinzufügen
  3. Übergeben Sie das Array
  4. Schleife über das Array in Smarty Smarty und die Datei erzeugen mit eine Vorlage (diese Weise können Sie die totale Kontrolle haben, die in reg-ex könnte fehlt)
  5. Ersetzen Sie die Datei

Lassen Sie mich wissen, ob das hilft.

1

Es sieht viel einfache Daten woanders zu speichern (zum Beispiel einer Datenbank) und schreiben Sie ein einfaches Skript, um die * .php-Dateien zu erzeugen, mit diesem Kommentar auf: ein

# 
# THIS FILE IS AUTOGENERATED - DO NOT EDIT 
# 
0

Unter der Annahme, dass

  • Sie müssen die Wörterbuch-Datei in einer für Menschen lesbare und Menschen editierbare Form (keine Serialisierung usw.)

  • Das Wörterbuch Array ist ein eindimensionales, assoziatives Array:

Ich würde

  1. Include() die Wörterbuch-Datei innerhalb einer Funktion

  2. alle tun notwendige Operationen auf dem Array $lang (Wörter hinzufügen, Wörter entfernen, Wörter ändern)

  3. Schreiben Sie die $lang Array zurück in die Datei eine einfache Schleife verwenden:

    foreach ($lang as $key => $value) 
    fwrite ($file, "\$lang['$key'] = '$value';\n"; 
    

dies ein äußerst begrenzter Ansatz ist, natürlich. Mich würde wirklich interessieren, ob es einen echten "PHP-Quellcode-Parser, Wechsler und Schreiber" gibt. Dies sollte mit den Funktionen tokenizer möglich sein.

0

Wenn es auch um eine wirklich mehrsprachige Website geht, könnten Sie gerne die Gettext-Erweiterung von PHP betrachten. Es greift auf eine Bibliothek zurück, die seit vielen Jahren für die Lokalisierung von Daten verwendet wird, und wo Tools, mit denen man mit den Übersetzungsdateien Schritt halten kann, fast genauso lange existieren. Dies macht die Unterstützung aller Sprachen in späteren Revisionen des Produkts ebenfalls unterhaltsamer.

In anderen Nachrichten, würde ich nicht einen Array verwenden, sondern entsprechende Definitionen, so dass Sie eine Datei

switch ($lang) { 
case 'de': 
    define('HELLO','Hallo.'); 
    define('BYE','Auf wiedersehen.'); 
break; 
case 'fr': 
    define('HELLO','Bonjour'); 
    define('BYE','Au revoir.'); 
    break; 
case 'en': 
default: 
    define ('HELLO','Hello.'); 
    define ('BYE','Bye.'); 
} 

habt Und ich würde auch automatisch generieren, dass aus einer Datenbank, wenn die Wartung für einen Aufwand wird .

0

Pear Config können Sie lesen und schreiben PHP-Dateien mit Einstellungen mit seiner 'PHPArray' Container. Ich habe festgestellt, dass das generierte PHP besser lesbar ist als das von var_export()