【问题标题】:How to access a remote file in a windows drive from Ubuntu using php如何使用 php 从 Ubuntu 访问 Windows 驱动器中的远程文件
【发布时间】:2011-03-21 22:01:47
【问题描述】:

我在 windows 中有这个命令:

exec('copy /V "'.$file.'" "'.$dest.'"');

其中 $file 是 Windows 驱动器中的远程文件,格式为:

\\服务器\dr1$\文件夹\文件 \\服务器\dr2$\文件夹\文件 \\服务器\dr0$\文件夹\文件 \\服务器\dr1$\文件夹\文件2 \\服务器\dr1$\文件夹\文件1

等等。目的地是服务器中的本地文件。请注意,驱动器一直在变化,并且事先并不知道(它们来自数据库结果)。在 Windows 下一切正常,执行的命令会是这样的(/V 是为了验证文件是否被正确复制):

复制 /V \\server\dr1$\folder\file c:\users\test\file

但是,当我尝试时,我不知道如何在 Linux 中运行它

cp \\server\dr1$\folder\file /home/test/file

我明白了:

cp: cannot stat '\\server\dr1$\folder\file': 没有这样的文件或目录。

谢谢,

纳米。

【问题讨论】:

  • 挂载不是一个解决方案,问题是“共享名”(dr1$、dr0$ 等)是未知的,并且有很多,值来自 db。他们可以更改,恕不另行通知

标签: php windows linux exec network-drive


【解决方案1】:

您需要先使用 Samba/CIFS 安装驱动器,然后再复制到驱动器。

这看起来像:

mount -t cifs //servername/sharename ./mountpoint/
cp ./mntpoint/folder/file /home/test/file

这方面有很多文档。尝试谷歌搜索 smbclient 或 cifs。

【讨论】:

  • 问题是“sharename”是未知的,而且有很多,值来自db。他们可以更改,恕不另行通知。
【解决方案2】:

您可以使用 PHP 来执行 smbclientcommands。 Smbclient 的行为与 FTP 非常相似,有几个类可以在 PHP 方面为您提供帮助。

您也可以通过 FUSE 将文件系统挂载到用户空间(请查看 https://serverfault.com/search?q=fuse+cifs),复制文件并再次卸载驱动器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2019-10-14
    • 2019-06-27
    相关资源
    最近更新 更多