PHPプログラムで〜/ .bash_profileファイルに記述されている環境変数を使用する方法と、OSユーザーディレクトリをサーバー側PHPプロセスのURLにマッピングして、PHPインタープリターがこのディレクトリのクラスを接続する方法について説明します。 。 これはすべて、プロジェクトの作業バージョンが1人のユーザーのホームディレクトリにあり、テストバージョンが他のユーザーのホームディレクトリにあるために必要です。
一般に、開発が進行中のサーバーでは、Solaris OSに2人のユーザーがいます(その前には3人がいました)。 まだSVNがあります。 まだDBMSがあります(この場合は、どちらでもかまいません)。 各ユーザーのホームディレクトリには作業コピーがありますが、特別なユーザーが1人います...このユーザーは常に、デバッグされたファイル、スクリプト、その他すべてのデバッグバージョンを持っています。 他のすべてのディレクトリは開発中です。
作業コピーの内容についてもう少し詳しく説明します(これらはホームディレクトリでもあります)。 彼らが持っている:
- いくつかのクライアントPHPプログラム
- WEB用のいくつかのCGI PHPプログラム
- クライアントおよびWEBプログラム用のPHPクラスのセット
- いくつかのbashプログラム
- 上記のすべてのプログラムの環境変数を記述する.bash_profileファイル
.bash_profileファイルは、すべてのスクリプトで必要な環境変数のリポジトリとして使用されます。 これは歴史的に事実です。 さらに、私はこの状況で便利な解決策を見つけます。 bashプログラムでは、環境変数が完全に使用されます。 PHPクライアントプログラムはgetenv()関数を使用します。 しかし、PHPのCGIプログラムでは...これがこのノートの最も興味深い部分です。
$ USER変数とgetenv( 'USER')関数をbashプログラムとPHPクライアントアプリケーションで使用できる場合、CGI PHPの場合はより複雑です。 状況は、WEBサーバープロセスがOSのユーザーに関連付けられていないという事実によって複雑になっています。 発明しなければなりませんでした。 WEBサーバーによって実行されたときに現在のPHPプロセスをバインドする問題のいくつかの解決策は次のとおりです。
- 各OSユーザーに同じ名前のサブドメインを作成し、要求に応じて、$ _SERVER配列からサブドメインの名前(私の場合は第2レベル)からユーザー名を取得します
- 同じ名前のサブディレクトリを作成し、URLの最後の部分をOSユーザー名として使用します
URLを介してのみユーザー名に関する情報を送信できることがわかります。 2番目の方法を選択したのは、おそらくサブドメインが遅延して開始できないためです。
したがって、 http:// server / production / PHPという形式のアドレスを入力するときに、このトリッキーなメカニズムを実装した後、これについて以下で説明します。
- URLの最後の部分を取ります
- FSディレクトリ/ホーム/プロダクションを見る
- パス/ home / production / php / include(クラスを含む)をinclude_path変数に追加します
- 選択したユーザーの.bash_profileファイルが読み取られます(/home/production/.bash_profile)
- その中で、preg_match関数は環境変数を検索し、それらを$ _ENV配列に格納します
- その他のクラスは、__ autoloadハンドラーによって接続されます。このハンドラーには、特定のハンドラーがいくつかあります
production-検証済みの作業ファイルとプログラムを持っているユーザーの名前。 他のユーザー(user1、user2など)は、既に述べたように、開発が進行中の作業コピーを持っています。 したがって、目的のユーザーのディレクトリから接続されたクラスと、.bash_profileからの環境変数があります。
さらに、ペア*および* _testと呼ばれるスキーマを持つデータベースもあります。 たとえば、statおよびstat_test。 実稼働ユーザーが起動したプログラムは、最初のタイプのスキームに接続され、他のすべてのユーザーは、2番目のスキームに接続され、テストデータセットでのデバッグに使用されます。 さらに、-testスイッチで実行される実稼働ユーザーディレクトリのPHPプログラムは、デバッグに便利な* _testスキームにアクセスします。
明確に説明したことを願っています。 上記をアドバイスやガイダンスとして使用すべきではないことを再度強調します。また、これは私が使用する特定の非常に具体的なソリューションであるため、繰り返す必要もありません。 この投稿は、PHPでの日常的なプログラミングに関するストーリー、または素晴らしいストーリーとして理解する必要があります:-)