2010-03-24 5 views
9

Je dois être en mesure de changer de façon permanente les variables dans un fichier php en utilisant php.écrire en permanence des variables dans un fichier php avec php

Je crée un site multilangue en utilisant CodeIgniter et en utilisant l'assistant de langue qui stocke le texte dans des fichiers php dans les variables dans ce format: $lang['title'] = "Stuff";

Je suis en mesure d'accéder au texte brut des fichiers à l'aide fopen() etc et il me semble que je pourrais probablement localiser les zones que je veux éditer avec des expressions régulières et réécrire le fichier une fois que j'ai fait les changements, mais il semble un peu hacky.

Existe-t-il un moyen facile de modifier ces variables de façon permanente en utilisant php?

Salutations

+0

Bonne question! Il y a le tokenizer mais cela ne fait que séparer le code PHP, il ne peut pas le remettre ensemble. Intéressé de voir ce qui arrive. –

+1

Qu'essayez-vous exactement de faire? Pourquoi auriez-vous besoin d'écrire dynamiquement la langue dans les fichiers de langue CodeIgniter? S'il s'agit d'un CMS, l'extension de la bibliothèque de langues à l'interface avec la base de données serait certainement une meilleure idée? –

Répondre

6

Si c'est juste une tableau que vous avez affaire, vous pouvez envisager var_export. Il va imprimer ou retourner l'expression dans un format qui est un code PHP valide.

Donc, si vous aviez language_foo.php qui contenait un tas de $lang['title'] = "Stuff"; lignes, vous pouvez faire quelque chose le long des lignes de:

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

Sinon, si vous ne voulez pas les modifier-main dans la À l'avenir, vous devriez envisager de stocker les données d'une manière différente (comme dans une base de données, ou serialize() 'd, etc etc).

+0

+1 retiré ma réponse en faveur, c'est le moyen le plus simple! – Andy

+0

+1 pour var_export mains vers le bas. Je ne savais pas que produit les données dans le format parfait pour cela. –

+0

Si vous voulez seulement écrire, c'est parfait. –

0

J'ai déjà fait face à un problème similaire. Je l'ai corrigé en ajoutant simplement un template smarty. La façon dont je l'ai fait était la suivante:

  1. Lire le tableau à partir du fichier
  2. Ajouter au tableau
  3. passer le tableau à Smarty
  4. Boucle sur le tableau de Smarty et de générer le fichier en utilisant un modèle (cette façon, vous avez le contrôle total, ce qui pourrait manquer dans reg-ex)
  5. Remplacez le fichier

Laissez-moi savoir si cela aide.

1

Il semble plus facile de stocker des données à un autre endroit (par exemple, une base de données) et d'écrire un script simple pour générer les fichiers * .php, avec ce commentaire sur le dessus:

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

En supposant que

  • Vous avez besoin du fichier dictionnaire sous une forme et modifiable humaine lisible par l'homme (pas sérialisation etc.)

  • Le tableau Dictionnaire est un unidimensionnel, tableau associatif:

je serais

  1. include() le fichier dictionnaire dans une fonction

  2. Est-ce que tous les opérations nécessaires sur le tableau $lang (ajouter des mots, supprimer des mots, changer des mots)

  3. écrire le tableau $lang de nouveau dans le fichier en utilisant une simple boucle:

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

ceci est une approche extrêmement limitée, bien sûr. Je serais vraiment intéressé de voir s'il existe un véritable "analyseur de code source PHP, changeur et écrivain". Cela devrait être possible de faire en utilisant les fonctions tokenizer.

0

S'il s'agit également d'un site vraiment multilingue, vous pourriez aimer regarder dans l'extension gettext de PHP. Il revient à une bibliothèque qui a été utilisée pour localiser des choses pendant de nombreuses années, et où les outils pour suivre les fichiers de traduction existent depuis presque aussi longtemps. Cela rend plus amusant le support de toutes les langues dans les révisions ultérieures du produit.

Dans d'autres nouvelles, je ne voudrais pas utiliser un tableau, mais plutôt des définitions appropriées, de sorte que vous avez un fichier

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.'); 
} 

Et je voudrais aussi générer automatiquement à partir d'une base de données qui, si l'entretien devient embêtant .

0

Pear Config vous permettra de lire et d'écrire des fichiers PHP contenant des paramètres en utilisant son conteneur 'PHPArray'. J'ai trouvé que le PHP généré est plus lisible que cela de var_export()

Questions connexes