如何使用Apache / PHP的葡萄酒? – '/ var / www'不属于你

我需要从我的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