PHP将Linux子系统路径转换为Windows路径

时间:2018-01-18 10:31:30

标签: php linux windows

我在Linux子系统中运行了一个PHP应用程序。

应用程序与外部.exe文件对话,该文件需要文件名作为输入。

在我的PHP应用程序中,我需要在尝试将文件发送到外部.exe文件之前确定该文件是否存在。

总结一下,在我的PHP应用程序中,我需要 Linux 文件路径,但是当它作为参数传递给.exe时,我需要 windows 文件路径。

所以它看起来像这样:

<?php

$fn = '/mnt/c/myapp/myfile.png';

$exists = file_exists($fn);

if ($exists) {
    shell_exec('external.exe -f ' . transformToWindowsPath($fn));
}

function transformToWindowsPath($fn)
{
    // What should go here?
    // Is something like this reliable?
    return str_replace(
        '/',
        DIRECTORY_SEPARATOR,
        preg_replace_callback(
            '/\/mnt\/([a-zA-Z])\//',
            function($matches) {
                return strtoupper($matches[1]) . ":" . DIRECTORY_SEPARATOR;
            },
            $fn
        )
    );
}

1 个答案:

答案 0 :(得分:0)

尝试使用此函数转换目录分隔符:

$fn = '/mnt/c/myapp/myfile.png';

function fnSystem($fn, $system='linux')
{
    if($system == 'windows')
    {
        $fn = str_replace('/mnt/c/', '', $fn); // remove /mnt/c/ from front
        $fn = str_replace('/', '\\', $fn); // convert the directory separator
        $fn = "C://$fn"; // place C:// in front
    }
    elseif($system == 'linux')
    {
        $fn = str_replace('C://', '', $fn); // remove C:// from front
        $fn = str_replace('\\', '/', $fn); // convert the directory separator
        $fn = "/mnt/c/$fn"; // place /mnt/c/ in front
    }

    return $fn;
}

$fnWindows = fnSystem('/mnt/c/myapp/myfile.png', 'windows');

echo $fnWindows;

结果:

C://myapp\myfile.png