9


2

phpを使用してphpファイルに変数を永続的に書き込む

phpを使用して、phpファイル内の変数を永続的に変更できる必要があります。

codeigniterを使用して、PHPファイルのテキストを次の形式の変数に保存する言語ヘルパーを使用して、多言語サイトを作成しています: $ lang ['title'] =" Stuff ";

私はfopen()などを使用してファイルのプレーンテキストにアクセスすることができましたが、おそらく正規表現を使用して編集したい領域を見つけ、変更したらファイルを書き換えることができるようです少しハックのようです。

phpを使用してこれらの変数を永続的に編集する簡単な方法はありますか?

乾杯

6 Answer


7


それがあなたが扱っている単なる配列であるなら、あなたはhttp://uk3.php.net/manual/en/function.var-export.php [var_export]を考慮したいかもしれません。 有効なPHPコードの形式で式を出力または返します。

したがって、 `$ lang ['title'] =" Stuff ";`行の束を含むlanguage_foo.phpがある場合、次の行に沿って何かを行うことができます。

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

あるいは、将来それらを手動で編集したくない場合は、データを別の方法で保存することを検討する必要があります(データベースや serialize() 'dなど)。


1


データを他の場所(データベースなど)に保存し、*。phpファイルを生成するための簡単なスクリプトを記述し、このコメントを先頭に追加する方が簡単です。

#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#


0


私はかつて同様の問題に直面しました。 スマートなテンプレートを追加するだけで修正しました。 やり方は次のとおりです。

  1. ファイルから配列を読み取ります

  2. 配列に追加する

  3. 配列をsmartyに渡す

  4. smartyで配列をループし、テンプレートを使用してファイルを生成します (このようにして、reg-exでは欠落している可能性のある完全な制御が可能です)

  5. ファイルを置き換える

これが役立つかどうか私に知らせてください。


0


仮定して

  • 辞書ファイルは、人間が読み取りおよび編集できる必要があります フォーム(シリアル化などはなし)

  • 辞書配列は、1次元の連想配列です。

私は…​するだろう

  1. 関数内に辞書ファイルを含める

  2. `$ lang`配列で必要なすべての操作を行います(単語を追加、削除 言葉、言葉を変える)

  3. 単純なループを使用して、 `$ lang`配列をファイルに書き戻します。

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

もちろん、これは非常に限られたアプローチです。 真の「PHPソースコードパーサー、チェンジャー、ライター」が存在するかどうかを確認したいと思います。 これは、http://php.net/manual/en/book.tokenizer.php [tokenizer]関数を使用して実行できるはずです。


0


また、真に多言語のサイトに関するものであれば、PHPのgettext拡張機能をお楽しみください。 それは何年もの間ローカライズのために使用されてきたライブラリにフォールバックし、翻訳ファイルに遅れずについていくためのツールがほぼずっと前から存在していました。 これにより、製品の今後のリビジョンですべての言語をサポートすることもより楽しくなります。

他のニュースでは、配列ではなく適切な定義を使用して、ファイルを作成します。

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

また、メンテナンスが面倒になる場合は、データベースからそれを自動生成します。


0


Pear Configを使用すると、「PHPArray」コンテナを使用して設定を含むPHPファイルを読み書きできます。 生成されたPHPは `var_export()`からのものより読みやすいことがわかりました