![](/img/trans.png)
[英]directory reading in linux using php from windows shared folder on network
[英]Access windows shared folders from linux with php
我需要能够使用在Linux服务器上运行的php脚本访问许多Windows服务器上的某些共享文件夹。 我只需要获取文件夹中包含的文件的名称以及创建它们的时间戳。
到目前为止,我提出的唯一解决方案是在Linux中安装共享并从那里访问它。 虽然这解决了这个问题,但我必须以root身份(据我所知)这意味着我要么必须以root身份运行脚本,这只是简单的愚蠢,或者手动挂载所有共享,这将是一个严重的痛苦从长远来看管理。
这导致两个问题。
拥有数百台服务器的频率非常高,编辑/etc/fstab
来添加新的文件系统绝对是一个烦人的约束。
如果你所做的只是在服务器上列出文件和修改时间,那么smbclient(1)
命令是一个很好的起点。 smbclient(1)
很像SMB和CIFS共享的FTP接口。 -c
命令行选项允许您运行特定命令; 就像是:
smbclient //$servername/$sharename -c "dir path/to/directory/"
如果您要对文件执行更多操作而不仅仅列出修改时间,那么将共享作为文件系统安装将减少连接和身份验证请求的数量,并且可能使解析stat(2)
输出比解析plain更容易数据的文本表示。
如果您想沿着安装文件系统的路线前进,首先拆分脚本。
一小部分应该采用servername,share path和可选的mount路径; 它将(服务器,共享,路径)添加到/etc/fstab
。
这部分可以是setuid root。 (这很危险,但是以root身份运行整个PHP脚本。)
或者,您可以使用acl(5)
支持挂载文件系统并添加新的访问控制条目:
mount / -oremount,acl
setfacl -m www::rw /etc/fstab
现在, www
用户有权修改/etc/fstab
文件。 (注意,当使用ACL为用户提供对/etc/fstab
写访问addmntent(3)
,我实际上没有测试过addmntent(3)
。)确保修改/etc/fstab
以始终挂载/
使用acl
支持,这样就可以了重新启动。
您可以使用addmntent(3)
C库函数向/etc/fstab
添加新条目。 如果您打算使用setuid root可执行文件,我会选择C语言,并且我可能会选择C语言,因为addmntent(3)
已经知道如何将正确格式化的挂载条目写入/etc/fstab
。
包括user
和noauto
选项,以便您的脚本可以运行非特权,并且仍然可以根据需要安装共享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.