Как я могу определить 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('../'));