我有一个需要传递文件名称和位置的Web应用程序。此文件将使用数据库导入工具bcp导入数据库。该文件位于各种文件夹中的网络服务器上。
我的流程包括以下内容:
目前,该脚本将文件名返回为:
S:\filedir1\filedir2\filename.csv
由于未来的流程已经执行,我需要按如下方式传递UNC名称:
\\serverS\serverfile1\serverfile2\filedir1\filedir2\filename.csv
我尝试对文件名执行realpath
(PHP)函数,但它返回传入的相同值。
有没有办法将驱动器规格转换为UNC值?此外,我无法将网络驱动器映射到Web服务器。
TIA
答案 0 :(得分:1)
您可以使用shell_exec('net use')
并解析输出以检索local->远程映射,然后根据需要转换文件路径字符串。
在Windows输出中给出net use
类似于:
New connections will not be remembered.
Status Local Remote Network
------------------------------------------------------------------------
OK S: \\srv\data Microsoft Windows-network
The command completed successfully.
$file = 'S:\filedir1\filedir2\filename.csv';
list($drive, $path) = explode(':', $file, 2);
$shellOutput = shell_exec('net use');
$matches = array();
$regex = '/\b'.$drive.':\s*([^\s]+)/';
preg_match($regex, $shellOutput, $matches);
$remote = $matches[1];
$unc = $remote.$path;
echo "$unc\n";
\\srv\data\filedir1\filedir2\filename.csv
请注意,这只是一个例子。对正则表达式进行错误检查和调整以考虑环境的细节,留给读者练习。