php驱动器信件给unc

时间:2014-08-27 17:37:53

标签: php html unc

我有一个需要传递文件名称和位置的Web应用程序。此文件将使用数据库导入工具bcp导入数据库。该文件位于各种文件夹中的网络服务器上。

我的流程包括以下内容:

  1. 调用并显示窗口文件导航的HTML脚本 窗口
  2. Windows导航窗口允许我选择合适的 文件
  3. HTML脚本调用PHP脚本来格式化文件和目录 结构恰当。
  4. 目前,该脚本将文件名返回为:

    S:\filedir1\filedir2\filename.csv

    由于未来的流程已经执行,我需要按如下方式传递UNC名称:

    \\serverS\serverfile1\serverfile2\filedir1\filedir2\filename.csv

    我尝试对文件名执行realpath(PHP)函数,但它返回传入的相同值。

    有没有办法将驱动器规格转换为UNC值?此外,我无法将网络驱动器映射到Web服务器。

    TIA

1 个答案:

答案 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

请注意,这只是一个例子。对正则表达式进行错误检查和调整以考虑环境的细节,留给读者练习。