在PHP中使用exec命令时可能会发生权限问题

我们有一个小型的办公室内部网,使用PHP(在apache服务器上 – 如此WAMP)构build,允许我们在文件服务器上创build项目文件夹。 这可以通过使用shell exec xcopy命令和下面的开关/e /k /i /c将一组模板文件夹复制到一个新的位置。

我们(相当)最近升级到运行Windows Server 2008 R2 Standard的新文件服务器。 现在,xcopy命令不再可以在PHP中使用。 但是,我知道xcopy命令是正确的,因为它工作,如果我复制并粘贴到命令提示符(在同一台计算机上)。

我可以看到没有错误消息,但我认为这是与PHP的“用户”相关的某种权限问题,但我不知道究竟是什么或如何解决它。

Apache服务器和文件服务器是两个独立的机器。 如果相关,apache服务器是一个32位的机器,文件服务器是一个64位的机器,但正如我所说,我可以从32位机器的CLI调用xcopy命令没有问题。

Apache进程的用户名是SYSTEM(尽pipe我似乎无法使用'whoami'命令来检查这个)

任何指针将不胜感激。

FWIW,execstring看起来像这样…

 echo "xcopy \"\\\\path\\to\\folder\\xxxx_Project\\*.*\" \"\\\\path\\to\\folder\\9876_NEWPROJECT\" /e /k /i /c"; 

(我认为)具体化为…

 xcopy "\\path\to\folder\xxxx_Project\*.*" "\\path\to\folder\9876_NEWPROJECT" /e /k /i /c 

显然,'9876_NEWPROJECT位实际上是一个variables。

get_current_user()将确认脚本运行的用户。

然后尝试手动执行你的命令作为这个用户与runas (或者如果你的用户真的是SYSTEM那么你将需要像psexec这样做)。

现在,假设你的脚本实际上是以SYSTEM身份运行的,这个用户很可能在远程文件服务器上没有被授权。 我不认为甚至有可能这样做(除了允许“每个人”)。 如果是这样,我不知道这是一个好主意。

我会以常规用户的身份运行apache服务 ,并在文件服务器上向该用户授予访问权限。

或者,您可以将远程位置安装为网络驱动器 (未经测试,线程中的其他答案也可能有所帮助)。

好。 我似乎已经得到它的工作。 这是我做的 – 告诉我,如果这是一个坏主意,但我应该指出,这是一个内联网,所以我不太在意安全性…

  1. 转到控制面板 – >管理工具_>服务

  2. 选择Apache服务并点击属性

  3. 在登录选项卡上,单击“此帐户:”而不是“本地系统帐户”,然后找到正常登录到该终端的Windows用户的用户帐户

  4. 重新启动Apache

我也修改了httpd.conf文件中的用户信息,但是我并不确定这是否有必要。

如果有更好的解决方案,可以用两个或者更少的音节来解释,我全是耳朵!