Как я могу определить DIRECTORY_SEPARATOR для платформ Windows и Linux?

Теперь я создаю небольшое приложение PHP, здесь у меня есть проблема с использованием пути к файлу, потому что в Windows использовать этот тип местоположения C:\Some\Location\index но в Linux /www/app/index поэтому, когда я определяю путь с помощью этого / но когда приложение запускается в окне машины, это должно быть проблемой для этого /,

Итак, здесь я хочу определить DIRECTORY_SEPARATOR для платформы Windows и Linux.

7 ответов

Решение

PHP принимает оба \ а также / как допустимые разделители пути во всех ОС. Так что просто используйте / в вашем коде

Для удобства вы можете написать определение более короткой константы:

DEFINE('DS', DIRECTORY_SEPARATOR); 

а затем напишите свой путь как:

$path = 'www'.DS.'app'.DS.'index'; 

Или я не понимаю ваш вопрос?

Пожалуйста, смотрите предопределенные константы PHP

Возможно, это уже определено в вашем скрипте, попробуйте повторить DIRECTORY_SEPARATOR, посмотрите, имеет ли оно какое-либо значение

PHP понимает "\" и "/" как разделители пути, независимо от того, в какой системе вы находитесь. Я предпочитаю использовать '/' (способ Unix) во всем моем коде. Когда вы находитесь в окне Windows, и вам необходимо указать полный путь к Windows/DOS, у меня будет эта простая, неразрушающая функция

function dosPath($path){
    return str_replace('/', '\\', $path);
}

Пример:

$drive = 'C:';
$path = '/tmp/uploads';

echo dosPath($drive.$path);
echo dosPath($path);

Windows в большинстве случаев принимает прямые косые черты, так что вы можете просто использовать их. Вы даже можете использовать смесь, и она не будет жаловаться.

Убедитесь, что ваш пакет юнит-тестов проходит и под Linux!

Попробуйте это для окна

defined ('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

define( 'SITE_ROOT',  DS . 'xampp' . DS .'htdocs' .  DS .'gallery');

Это грязно, согласитесь?

      $file = 'path' . DIRECTORY_SEPARATOR . 'to' . DIRECTORY_SEPARATOR . 'file';

$file = str_replace('/', DIRECTORY_SEPARATOR, 'path/to/file';

$file = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? 'path\\to\\file' : 'path/to/file';

Так что просто сделайте это:

      $file = 'path/to/file';

Он работает на Windows, Linux, Mac в целом. Однако обратная косая черта работает только в Windows и ее необходимо экранировать. \\поэтому старайтесь избегать их. :)

Чтобы превратить файл, на который ссылается PHP в Windows, в косую черту, используйте str_replace. Вот пример:

      $dir = str_replace('\\', '/', realpath('../'));
Другие вопросы по тегам