我需要从我的Debian服务器上的一个PHP脚本运行一个Windows命令行工具。 为此,我正在尝试葡萄酒。 通过terminal调用wine和工具工作正常:“$ wine tool.exe”
但是,从我的PHP脚本运行相同的…
exec(“wine tool.exe”);
…我在我的Apache错误日志中得到以下内容:wine:'/ var / www'不属于你,拒绝在那里创build一个configuration目录
我想这是一个简单的基本Linux用户权限问题…我应该更改葡萄酒的用户权限为www数据? 怎么样?
您应该为运行Wine创建一个单独的主目录。 创建一个由www-data所有的目录,设置HOME变量,并设置www-data,然后运行winecfg一次; 然后运行tool.exe(作为该用户)。 在exec调用中,确保HOME被设置(尝试exec("HOME=/tmp/wine wine tool.exe")
)
您将要使用chown来修改wine和tool.exe的所有权。
请注意,这可能会带来一些安全隐患。
由于我正在运行FreeBSD,因此我得到错误的wine:'/ root'不属于你。 创建一个名为“/ var / www”的文件夹不会有太大的帮助:(
据我所知,Apache正在以www的形式运行,或者线程正在运行,而主进程以root身份启动。 如果您没有任何管理员权限,则可以随时尝试要求管理员在sudoers文件中添加一行。
我已经添加了以下行到我的sudoers文件,让我们的Apache(www用户)使用sudo运行wine作为我的用户(myuser),而不是www或root。
www localhost =(myuser)NOPASSWD:/ usr / home / myuser / bin / wine
在我的PHP脚本中,我有这样的东西:
exec(“HOME = / usr / home / myuser sudo -u myuser / usr / home / myuser / bin / wine /usr/home/myuser/test.exe”
似乎工作到目前为止。
似乎无害,只要wine没有配置目录就可以运行。
尝试并找出wine是否可以在命令行上使用指定的配置目录运行。 如果没有,你可以做两件事情:要么复制一个现有的(从你的用户)葡萄酒配置目录到/ var / www或者你只是忽略这个警告和重定向STDERR输出到别的地方:
exec ("wine tool.exe 2>/dev/null");
或者…你可以跳过整个sudo的东西。 启动wine在你的主目录下生成一个配置文件,然后让管理员在你的wine配置文件中做一个chown www:users .wine。
Apache现在应该拥有使用你的配置文件运行wine所需的权限。
www用户似乎在linux上有另一个名字…
exec(“HOME = / usr / home / myuser / usr / home / myuser / bin / wine /usr/home/myuser/test.exe”
我正在使用CentOS 5.5 Linux(与RHEL相同),并刚从我的家中复制了.wine目录并递归地更改了所有者:
# sudo cp -R ~/.wine /var/www # sudo chown -R apache.apache /var/www/.wine
BTW对于一些棘手的Windows程序我必须安装Xvfb (rpm包名称:xorg-x11-server-Xvfb),并从/ etc / inittab内部运行它:1,然后将DISPLAY设置为localhost:1,然后从我的Wine网页脚本。
解决所以最后,使用“单声道”命令,并通过PHP脚本运行。 这是我的命令:
shell_exec('mono Release/X12Parser.exe Release/EDI_FILES/first_edi.edi Release/XML_FILES/firstXML.xml');
要安装mono,请点击此链接。 安装单声道
谢谢
Raja Chakraborty