【发布时间】:2012-12-17 01:59:08
【问题描述】:
我们有一个将数据写入 Linux 节点的 Windows 主实例,目前运行良好。 windows 上运行的 PHP 文件可以使用简单的脚本写入 linux 机器,如下所示:
file_put_contents('\\\\hostname\\share\\testfile.txt', 'testing123');
linux节点存储了windows php用户,并允许写入文件。但是,我们希望能够在 linux 机器上做同样的事情,并写入 windows 实例上的共享文件夹。与上面相同的行,但带有 windows 主机和共享,仍然返回 true,但实际上并没有创建文件。
- 如果它不起作用,为什么该行返回 true?这使得调试和测试错误变得非常困难。
- 我们怎样才能让脚本工作?是在linux中挂载windows共享的解决方案吗?这似乎不是一个合适的解决方案,因为我们可能会更改 Windows 共享或添加新的共享,我们不想在每个 linux 实例上继续挂载和卸载共享。
我们已将linux用户添加到windows共享权限,但似乎不起作用。
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
If it didn't work, why does the line return true?- 因为 CIFS/SMB 很糟糕。How can we get the script to work?- 为 Windows 机器上的共享分配全局可写权限。这涉及为文件系统和共享(两个单独的对话框)上的Everyone组和/或Guest用户分配写入权限。 linux 机器未针对 DC 进行身份验证,并且它尝试使用的访问是匿名的。或者,您可以通过exec()输入 samba 二进制文件并提供凭据来实现。或者,就我个人而言,我会使用更好的协议。见第 1 点。 -
我对您的问题没有答案,但为了您的测试理智,请阅读
file_put_contents()的文档。它返回int,而不是boolean。诚然,如果它返回 0,它仍应评估为 false,除非您使用的是===。
标签: php linux windows permissions samba