【问题标题】:PHP OSX XAMPP - exec mount commandPHP OSX XAMPP - 执行挂载命令
【发布时间】:2015-02-11 00:23:31
【问题描述】:

下午好, 我目前正在开发一个 PHP 项目,该项目需要一个 php 脚本来挂载 Windows 共享驱动器。目前使用 OSX 和 XAMPP 构建。

exec('mount -t smbfs //user:pass@192.168.1.1/Share /Volumes/Share 2> temp/error.txt');

现在我明白为什么这不起作用了。它是由于权限。 Apache 作为用户守护进程运行。现在我可以更改 Apache 运行的用户来解决这个“挑战”,但如果可能的话,我希望避免对服务器进行任何更改。 我想联系一下,看看是否有更好的方法来解决这个问题。

有什么想法吗?

【问题讨论】:

  • 你为什么不把它放在 PHP 之外并保持它挂载?
  • 因为只需要挂载一小段时间就可以卸载了。
  • 是的,但是允许网络服务器用户挂载它可能是一个可怕的想法,而将它挂载到系统中的缺点较小,除非它对 SMB 服务器有很大的问题。部署后将在什么类型的机器上运行?
  • 一天结束,多平台是目标。我还考虑过可能会做一个 sudo ,但这也可能是一个可怕的想法。我不想让驱动器挂载,因为该项目在任何给定时间需要任何数量的共享,事情就会变得一团糟。因此,一种 PHP 挂载、运行所需脚本和卸载驱动器的方法。
  • 如果您不想更改服务器,那么唯一的选择就是更改驱动器权限。将 Apache 用户添加到驱动器的权限?哎呀,即使打字听起来也是个可怕的主意。我永远不会希望一个开放的 apache 用户拥有对我的驱动器之一的用户访问权限 0_o

标签: php macos apache xampp


【解决方案1】:

好的,所以我开始工作了。 我只需要 Web 服务器(用户守护程序)拥有一个安装共享的文件夹。

EG。创建了一个名为“tempshare”的文件夹,该文件夹由用户守护进程拥有,并且与 php 脚本位于同一文件夹中(不用担心,完成后它将被放置在 Web 根目录之外)

exec('mount -t smbfs //user:pass@192.168.1.1/Share /path/to/tempshare 2> temp/error.txt');

似乎有效。对使用此方法的安全性有何建议?

【讨论】:

  • 我还发现了munkie/samba BTW.. 它是一个 PHP SMB 客户端和相应的流包装器。它确实使用了smbclient,但它仅适用于 *nix 系统,添加 Windows 实现可能需要一些工作......然后再次在 Windows 机器上运行 PHP ;-) 我确实测试了它如果您有兴趣,请提供示例代码。
  • 感谢@prodigitalson!我去看看!
  • 另外,如果你要玩它,你需要用 homebrew 安装 samba 或用 macports 安装 samba3,因为 OS X 中的客户端是 smbutil 并且不同。 (我用 macports samba3 测试过)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多