我在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
)
);
}
答案 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