7

これは*nix と Windows の両方defineのインクルード パスへの適切な方法ですか?

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );

上記で含めた末尾のスラッシュに注意してください。include/require のスラッシュは、両方の OS でも同じですか?

編集(回答で更新):

私が収集できることから、以下のコードは、* nix と Windows OS の両方のインクルード/要求パスを普遍的に定義する適切な方法です。以下のコメントで自由に修正してください。

私を混乱させたのは、back-slashes (\)intoの置換を示す多くの例でしたforward-slashes(/)。以下の回答のいくつかに基づいて、これは不要です。

したがって、最終的な正しいコード (純粋主義者向け) は次のとおりです。

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );

そのコードは次の結果を生成します。

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

__FILE__内側 ( ) から外側 ( )に進む簡単な説明realpath():

FILE ファイルのフル パスとファイル名。シンボリック リンクが解決された絶対パスが常に含まれます。

dirname()返される文字列は、末尾の /component が削除されたパスです。ファイル名を削除する責任があります。

realpath()成功すると、正規化された (正規化/標準化された) 絶対パス名を返します。結果のパスには、シンボリック リンク'/./''/../'コンポーネントは含まれません。__FILE__すでにシンボリックリンクが解決されているため、これは徹底のために含まれていると思います。それとも、相対パスを解決するために含まれているのでしょうか? いずれにせよ、それは私たちの目標を固めているようです.

4

3 に答える 3

8

スラッシュは両方の OS で機能します。

これへの絶対的な参照は見つかりませんでしたが、PHP マニュアルのいくつかの場所 ( herehereなど) に示されています。そして、WindowsとLinuxのユーザーである私にとってはうまくいきます。

最後に、Windows では のような混合パスを指定することc:\\apache\\htdocs\\myapp/index.phpなり、すべて正常に動作します。

于 2009-12-24T21:10:15.120 に答える
4

または、PHPの事前定義された定数を使用することもできますDIRECTORY_SEPARATOR。これにより、OS固有のディレクトリ区切り文字が得られます。http://www.php.net/manual/en/dir.constants.phpも参照してください。

于 2009-12-24T23:36:19.677 に答える
2

多くの人が驚いたことに、/Windows と MSDOS で問題なく動作します。パス名内では、OpenVMS でも機能します。

ただし、パスに対して PHP 内で何かを行っている場合は、文字列よりも配列の方が便利な構造になります。

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
于 2009-12-24T21:21:22.460 に答える