2014-01-25 2 views
0

Я использую PHP для инструмента командной строки, который я создаю. Мой инструмент должен работать как на Windows, так и на системах на базе NIX. Моя основная среда разработки в Ubuntu Linux.Как обрабатывать пути в PHP для сценариев командной строки (Windows)?

Мне было интересно, следует ли мне позаботиться о том, чтобы обрабатывать разделитель каталогов каждый раз, когда я что-то делаю с файлами, или PHP позаботится или что для меня? Например:

В Linux:

$user_home = get_user_home_folder(); 
$filePath = "{$user_home}/path/to/file.txt"; 

ли код выше работы на Windows, без изменения или я должен всегда делать что-то вроде:

$user_home = get_user_home_folder(); 
$filePath = "{$user_home}/path/to/file.txt"; 
if(is_windows_os()) { 
    $filePath = str_replace('/','\\',$filePath); 
} 

Любые советы очень высоко ценится.

+1

Не уверен относительно старых версий Windows, но '/' работает в Windows 7 и выше –

+0

Спасибо. вы подсказли очень помогли :) – gevik

ответ

1

Это будет работать для вас:

<? 
$filePath = "/path/to/file.txt"; 

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 
    //windows 
$filePath = getenv('HOME').str_replace("/", "\\", $filePath); 
echo $filePath; 
} else { 
    //linux 
$user_home = get_user_home_folder(); 
$filePath = $user_home.$filePath; 
echo $filePath; 
} 
?> 

В моем случае (окна) outuputs:

C:\Users\Administrator\path\to\file.txt 

Примечания:
Я никогда не слышал о функции PHP называется get_user_home_folder() Я предполагаю, что это пользовательская функция.

+0

get_user_home_folder - это настраиваемая функция :) – gevik

+0

понял! если ответ помог вам, можете ли вы пометить его как правильно? –

+0

@gevik вам нужно проверить правильный знак, чтобы отметить ответ как правильный;) –

1

Возможно, это поможет вам.

define('DS', is_windows_os() ? '\\' : '/'); 
$user_home = get_user_home_folder(); 
$filePath = $user_home.DS."path".DS."to".DS."file.txt" 

Используйте постоянные DS для пути и будет автоматически изменяться на необходимости сепараторе

1

PHP попытается преобразовать «/» в правильный сепаратор, когда это возможно. Он также предоставляет встроенную константу, называемую DIRECTORY_SEPARATOR, если вы не хотите полагаться на это поведение.

Эта постоянная и функция join хорошо работают для построения путей.

например. $fullPath = join(DIRECTORY_SEPARATOR, [$userHome, 'path', 'to', 'file.txt']);

Смежные вопросы