7

配布したい小さな PHP アプリケーションを作成しました。最小限の手間でほとんどのウェブホストにインストールできるように、ベスト プラクティスを探しています。

簡単に言うと、パスワードでログインするとファイルをダウンロードできるシンプルなツールです。

だから私の質問は:

1) 構成値をどのように処理すればよいですか? 私はデータベースを使用していないので、構成ファイルが適切と思われます。他の php アプリ (Wordpress など) が定義を使用していることは知っていますが、それらはグローバルであり、名前が競合する可能性があります。(明らかに、グローバル変数にも同じ問題があります。) PHP に組み込まれている "ini" ファイル メカニズムを調べました。上部にのみコメントを許可するため、各設定に簡単に注釈を付けることができず、「php -f」で構文を検証できません。その他のオプション?

2) テンプレートの処理方法は? アプリケーションはフォームを送り出す必要があります。エラーメッセージが表示される可能性があります。(たとえば、「申し訳ありませんが、パスワードが間違っています。」) HTML フォームでクラス変数を使用していますが、代わりに外部テンプレート ファイルを使用することもできます (構成で指定)。簡単な検索と置換を行います。たとえば、%SCRIPT% をスクリプトの名前に、%STATUS% をエラー メッセージを保持するために使用します。これは車輪の再発明のように感じますが、Smarty のようなテンプレート システムを含めるのはやり過ぎです。(さらに、彼らはすでにテンプレート システムを持っているかもしれません。) 他のオプションはありますか?

3) i18n - メッセージ文字列は 3 つしかなく、gettext は広くインストールされていないようです。構成ファイルでこれら 3 つの文字列パラメーターを作成するだけで、そんなに悪い考えですか?

4) 他のフレームワークとの最適な統合方法は? 私のアプリは単一のクラスです。そのため、クラスがどのように呼び出されたかを示す php スクリプトを含めることができると考えました。それを別のフレームワークに統合しなければならない人々にとっては出発点になるでしょうが、カスタマイズに興味がない人にとってはそのままでも問題ありません. 適正?

5) GET/POST パラメータ - クラスが $_GET と $_POST を見るのは悪い形ですか? 構築中にすべての値をクラスに渡す必要がありますか?

ありがとう。

4

3 に答える 3

7

構成

次のようなphpファイルを使用できます。

<?php
return array(
  'option1' =&gt; 'foobar',
  'option2' =&gt; 123,
  //and so on...
  );
?>

メインクラスでは、次を使用します。

$config = (array) include 'path/to/config/file';

クラスをコンポーネントとして他のアプリケーションに配布する場合は、構成配列/オブジェクトをクラスのコンストラクターにパラメーターとして配置し、詳細はユーザーに任せます。

テンプレート化

このような単純なアプリケーションの場合、説明した方法で十分です。いつでもクラスを拡張し、出力メソッドを独自のものでオーバーロードできることを覚えておいてください。

I10N

前述のように、3 つの変数の場合、それらを config として保存する以上のことはやり過ぎです。

統合

各パブリック メソッド (またはより適切にはプロテクトおよびプライベート メソッド) にコメントを付けて、それらが何をするのか、どのパラメーターが必要なのかを説明します。それを例と組み合わせると、ほとんどのユーザーにとって十分なはずです。

GET と POST

あなたのクラスはパスワードを使用しており、GET 経由でパスワードを送信することさえ考えていますか? ;) ブラウザの履歴、リファラー ヘッダーなどを考えてみてください。ユーザーのパスワードはそこに表示されます。

于 2008-11-12T16:38:16.273 に答える
2
  1. config はクラス インスタンスに対してローカルにできますか? または、構成値を照会するためのインスタンスを作成できる小さなクラスを作成できますか? また、グローバル変数をアプリケーションの名前の先頭に追加すると、何らかの方法で衝突を防ぐことができます。

  2. テンプレートが本当に単純な場合は、短いテンプレートを作成するだけです。サード パーティのテンプレートで発生する問題を回避しようとするよりも簡単です。また、ライセンスの問題を簡素化することもできます。彼らがすでに持っているものについて心配し始めると、何もリリースできなくなります。組み合わせが多すぎます。

  3. 3弦用?ええ、構成を処理しているのと同じ方法でそれらを行います。

  4. クラスの使用方法を説明するイントロとともに、全体を通して良いコメント。

  5. 私はそうは思わない。気になる場合は、最初にデフォルトの引数を使用して指定された引数を使用し、何も指定されていない場合は GET/POST 値を検索できます (ただし、セキュリティ上のリスクになる可能性があります)。

他にも考慮すべき点があります。多くの人が共有ホストを使用しているため、php.ini や php バージョンを制御できません。できるだけ一般的な機能のみを使用していることを確認する必要があります。

一例として、一部のホストではショートタグが有効になっていない場合があり ( orの代わりに<?php ... ?>andを使用する必要があります)、ロイヤル PITA になる可能性があります。<?php echo "..."?><? ... ?><?= "..." ?>

于 2008-11-12T16:23:52.527 に答える
1

Krzysztof の良いアドバイスに加えて:

  • 使用<?phpのみ
  • 無効にできる機能を使用する場合は、 を使用function_exists()して確実に使用できるようにします。@missing_function()エラーがログに記録されることなく、PHP は黙って終了します。
  • 経由で無効化/変更できるものに頼ることはできませんphp.iniini_get()さまざまな設定に適応するために使用します。
  • が有効になっている場合magic_quotesは、入力のコピーからのみスラッシュを削除します。グローバル配列を変更しないでください! 一部の不十分なコードのセキュリティは、これらのスラッシュが存在することに依存している場合があります。
  • ユーザーが無意識のうちにドキュメントや Web サイトからコードをコピー&ペーストすることを期待してください。
于 2008-11-12T23:25:33.520 に答える