6

私は、非オタク、非プログラマーを対象とした PHP アプリケーションを作成しています。たくさんの「オプション」を含むオプション ページを作成し、それらのオプションをどこかに保存する必要があります。データベース アプリケーション (MySQL/PostgreSQL/SQLite) を使用することは、ユーザーが必要とするよりも多くの構成が必要になるため、問題外です (ユーザーが望まない場合は、いかなる種類の構成も行いたくありません)。 . したがって、残された唯一の解決策は、構成を構成ファイルに書き込むことです。一方、ユーザーがオタクで、構成ファイルを直接編集したい場合 (または、SSH または何らかの理由でファイルをリモートで編集したい場合) に備えて、その構成ファイルを人間が判読できるようにしたいと考えています。 ..)

私が見つけたいくつかの潜在的な解決策は次のとおりです。

JSON ファイルを使用して...

...ファイルからデータを取得し、json_decode を使用してデータを変換し、HTML に出力し、変更を取得し、json_encode を使用してエンコードし直します。画像が得られます。この方法について私が気に入らない点がいくつかあります。主なものは、PHP を使用してエンコードされた JSON データが適切にフォーマットされておらず、事前に再フォーマットしないと編集が非常に難しいことです。

XML ファイルの使用

私もそれがあまり好きではないので、その解決策については説明しません...そして、XSLTの使い方がわからず、本当に学びたくないです...そして、少なくともそれはかなり重い解決策であるためです. JSON ソリューションとの比較。私が間違っている場合は修正してください。

INI ファイルの使用

私は INI ファイルが大好きです。本当に大好きです。私はそれらが本当に最も読みやすいと思います、そして混乱するのは難しいです(つまり、構文エラー)。このソリューションの問題は、ini ファイルを書き込み/編集するためのネイティブな方法がないことです。カスタムメソッドを作成する方法を示すトピックを見つけました...もっと良いものが見つからない場合は、それが採用される解決策になるかもしれません...

2 つのファイルを使用する

最後の解決策は、INI の解決策と同じくらい妥当に思えます。実際、INI ファイルを「入力」 (ユーザーが必要に応じて編集するファイル) として使用し、XML/JSON ファイルを出力 (ユーザーがオプションを変更するたびに PHP によって編集されるファイル) として使用できます。 Web フロントエンド)。この時点で、「出力」ファイルが常に最新の状態になるように、構成ファイルを直接編集した場合は、構成を手動で再読み込みするようにユーザーに依頼するのが最善の解決策です。


上記の解決策はどれも完璧ではないことを知っています。そのため、アドバイスを求めるためにこのトピックを作成しました。最善の解決策は何ですか?たぶん(おそらく)私はさらに別の解決策を見逃していました。

最後にもう 1 つ: YAML は有効なソリューションではありません。慣れていないと構文を台無しにするのがずっと簡単だからです。PHP で PHP を編集するのは面倒なので、PHP も解決策ではありません。PHP は、構成を取得したいが Web フロントエンドから直接編集したくない場合にのみ有効なソリューションです。

4

5 に答える 5

5

イニ

私は自分でiniファイルを書きます。あなたが言ったように、構文は非常に単純であり、それが構成ファイルに必要なものです。ini 形式の "キーと値" の組み合わせは、データベースを使用した場合とまったく同じです (データベースがなくても)。

すでに見たことがあるかもしれない関連 SO: create ini file, write values in PHP

さらに、parse_ini_file()を使用して読み取ることができます。

XML

XML はそれほど悪いものではありません。これを書くのは手間がかかるかもしれません (また、ユーザーにとっては ini ファイルほど明確ではないかもしれません) が、それを読むのはとても簡単です。

それを作成します。


<?php
// Create file
$xml = new SimpleXMLElement( '<?xml version="1.0" ?><config></config>' );

// Add stuff to it
$xml->addChild( 'option1' );
$xml->option1->addAttribute( 'first_name', 'billy' );
$xml->option1->addAttribute( 'middle_name', 'bob' );
$xml->option1->addAttribute( 'last_name', 'thornton' );
$xml->addChild( 'option2' );
$xml->option2->addAttribute( 'fav_dessert', 'cookies' );

// Save
$xml->asXML( 'config.xml' );
?>

それを読んで:


<?php
// Load
$config = new SimpleXMLElement( file_get_contents( 'config.xml' ) );

// Grab parts of option1
foreach( $config->option1->attributes() as $var )
{
    echo $var.' ';
}

// Grab option2
echo 'likes '.$config->option2['fav_dessert'];
?>

これにより、次のことが得られます。

ビリー・ボブ・ソーントンはクッキーが好き

SimpleXML のドキュメント

于 2010-06-21T05:42:51.517 に答える
2

私はiniで行きます。それらを書くのはそれほど難しくありません。私は個人的に XML が嫌いです。とても肥大化しています...ファイルサイズは問題ではありませんが、それでも、その冗長さと入力しなければならない量にうんざりします. さらに、人々は愚かです。彼らはタグを閉じません。

于 2010-06-21T06:45:41.200 に答える
1

PHP のserialize(). 実装するのは JSON と同じレベルです。

于 2010-06-21T04:15:27.983 に答える
1

標準的な方法は XML ファイルです。それらはそれほど多くのオーバーヘッドを作成せず、簡単に拡張できます。ただし、プログラミング側では JSON ファイルが最も簡単です。

私の好みをランク付けします:

  1. XML
  2. JSON
  3. ini (最後の手段)
于 2010-06-21T04:00:31.323 に答える
1

1000 以上のオプションがない限り、XML ファイルのサイズを気にする必要はありません。ここでの目標は、ユーザーにとって物事を簡単にすることです。これは、どの方法を選択しても (私の意見では、JSON はその 1 つにすべきではありません)、各構成行で詳細に文書化する必要があることを意味します。

あなたの 2 つのファイル ソリューションは、sendmail 構成の時代に私を戻し、私を身震いさせます。

私はXMLを使用します。それはある程度自己文書化されています<Email>hi@hi.hi</Email>

于 2010-06-21T04:13:18.690 に答える