web-dev-qa-db-ja.com

PHPでプラットフォームに依存しないディレクトリセパレータを取得するにはどうすればよいですか?

PHPでパス文字列を作成しています。プラットフォーム(つまり、Linux、Windows、OS X)で動作する必要があります。私はこれをやっています:

$path = $someDirectory.'/'.$someFile;

$someDirectoryおよび$someFileがさまざまなプラットフォームで実行時に正しくフォーマットされていると仮定します。これはLinuxとOS Xでうまく機能しますが、Windowsでは機能しません。問題は/文字です。これはWindowsで動作すると思いました。

PHP関数またはWindowsの実行時にこれを\に切り替えるその他のトリックがありますか?

編集: 明確にするために、結果の文字列は

c:\Program Files (x86)\Sitefusion\Sitefusion.org\Defaults\pref/user.preferences

windowsで。明らかに、スラッシュの組み合わせはWindowsを混乱させます。

63
retrodrone

これを試して

DIRECTORY_SEPARATOR

$patch = $somePath. DIRECTORY_SEPARATOR .$someFile

または、あなたのものを定義することができます

PHP_OS == "Windows" ||
    PHP_OS == "WINNT" ? define("SEPARATOR", "\\") : define("SEPARATOR", "/"); 
116
genesis
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')           
    define("SEPARATOR", "\\");
else 
    define("SEPARATOR", "/");

http://php.net/manual/en/function.php-uname.php

8
Maxim Mikhisor