PHP から Windows で大文字と小文字を区別してファイルを含める
質問
の使用に問題があります PEAR
上のライブラリ Windows
から PHP
.
Pear には多くのクラスが含まれており、かなりの数のクラスを使用しています。そのうちの 1 つは、以下にある Mail クラスです。 Mail.php
. 。個々の PEAR ファイルへの明示的な完全なパスを指定するのではなく、パス上で PEAR を使用します。
require_once('Mail.php');
それよりも:
require_once('/path/to/pear/Mail.php');
これにより、サイトの管理モジュールで問題が発生します。 mail.php
ファイル (ユーザーにメールを送信するために使用されます)。電子メールを送信する管理画面 (モデレーション キューから承認されたときに、新しいランダム パスワードを生成してユーザーに電子メールで送信できるユーザー管理画面など) を使用しており、次の内容を含めようとした場合 Mail.php
「誤って」mail.php をインクルードしてしまいました。
PEAR モジュールを明示的に必要とする PEAR インストールへのフルパスを先頭に追加するように変更せずに (標準ではなく、通常は PEAR をパスにインストールします...) Windows 上の PHP でファイルの大文字と小文字を区別するように強制する方法はありますか?
PEAR パスをインクルード パスに自分で追加しているため、パスの順序を制御できます。また、大文字と小文字に関係なく、PEAR 名と衝突するファイル名の使用は避けるべきであると認識しており、将来的にはそうする予定です。ただし、このページ (インクルード ファイルではなくコントローラ) は数年間リポジトリに存在しており、プラグインは処理中にこのページへのリンク/リダイレクトを提供する URL を特に生成します。
(PHP 4.3 以降 (PHP5 を含む) を使用して、Apache、Microsoft IIS、LightHTTPD、および Zeus をサポートします)
解決
インクルード パスに同じ名前の 2 つのファイルがあるのは良い考えではありません。作成したファイルがサードパーティ ライブラリとは異なる名前になるように、ファイルの名前を変更します。とにかく、現在の状況では、インクルードパス内のパスの順序を変更することで、これを修正できると思います。PHP は、インクルード パス内のファイルを 1 つずつ検索します。必要なファイルがインクルード パスで見つかると、PHP はファイルの検索を停止します。したがって、アプリケーションの管理セクションで、作成した mail.php の代わりに PEAR Mail ファイルをインクルードする場合は、PEAR パスが現在のディレクトリの前になるようにインクルード パスを変更します。次のようなことをしてください:
<?php
$path_to_pear = '/usr/share/php/pear';
set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>
他のヒント
これは OS レベルの問題であるため、これを行う簡単な方法はないと思います。
インクルードを次から変更してみてください include('Mail.php');
に include('./Mail.php');
, 、しかし、それが Windows ボックスで動作するかどうかはわかりません (テストするための PHP を備えたものがありません)。
PHP 4 を使用している場合は、次の機能を利用できます。 これ バグ。もちろん、それは厄介な解決策です...
または、mail.php ファイルの名前を別の名前に変更することもできます...
この問題は Win32 サブシステムの NTFS コードが原因であると確信しています。Ext2 インストール可能ファイル システム (IFS) を使用している場合は、そのドライブで大文字と小文字を区別する必要があります。