Como usar o vinho do Apache/PHP? - '/var/www' não é de propriedade de você

StackOverflow https://stackoverflow.com/questions/1377388

  •  21-09-2019
  •  | 
  •  

Pergunta

Preciso executar uma ferramenta de linha de comando do Windows a partir de um script PHP no meu servidor Debian. Para isso, estou tentando vinho. Invocar o vinho e a ferramenta via terminal funciona bem: "$ wine tool.exe"

Mas ao executar o mesmo do meu script PHP ...

exec ("Wine Tool.exe");

... Eu recebo o seguinte no meu log de erros do Apache: Wine: '/var/www' não é de propriedade de você, recusando -se a criar um diretório de configuração lá

Eu acho que esse é um problema simples de direitos do usuário do Linux fundamental ... devo alterar os direitos do usuário para o vinho para www-dados? Como?

Foi útil?

Solução

Você deve criar um diretório doméstico separado para a corrida de vinho. Crie um diretório de propriedade da WWW-Data, defina a variável doméstica, SU www-data e execute winecfg uma vez; Em seguida, execute ferramenta.exe (como esse usuário). Na chamada EXEC, verifique se a casa está definida (tente exec("HOME=/tmp/wine wine tool.exe"))

Outras dicas

Você vai querer usar chown Para modificar a propriedade de vinho e ferramenta.exe.

Esteja aconselhado que isso possa potencialmente abrir algumas preocupações de segurança.

Como estou executando o FreeBSD, recebo o erro de erro: '/raiz' não é de propriedade de você. Criar uma pasta chamada '/var/www' não ajudará :(

O Apache está funcionando como www, ou os threads são, enquanto o processo principal começa como raiz até onde eu sei. Se você não tiver direitos de administrador, sempre pode pedir ao administrador que adicione uma linha no arquivo sudoers.

Eu adicionei a linha a seguir ao meu arquivo sudoers e vamos Apache (o usuário www) usar o sudo para executar o vinho como meu usuário (myuser), em vez de como www ou root.

www localhost = (myuser) nopoasswd:/usr/home/myuser/bin/wine

No meu script PHP, tenho algo assim:

exec ("Home =/usr/home/myuser sudo -u myuser/usr/home/myuser/bin/wine /usr/home/myuser/test.exe"

Parece funcionar até agora.

Estou usando o CentOS 5.5 Linux (o mesmo que Rhel) e acabei de copiar o .vinho Diretório da minha casa e mudou o proprietário recursivamente:

# sudo cp -R ~/.wine /var/www
# sudo chown -R apache.apache /var/www/.wine

Btw para algum programa Windows mais complicado que eu tive que instalar Xvfb (Nome do pacote RPM: xorg-x11-server-xvfb) e execute-o de dentro de /etc /inittab em: 1 e depois defina exibição como localhost:1 Antes de iniciar o vinho do meu script da web.

Parece inofensivo, desde que o vinho possa funcionar sem o diretório de configuração.

Tente descobrir se o vinho pode ser executado com um diretório de configuração especificado na linha de comando. Caso contrário, há duas coisas que você pode fazer: ou você copia um diretório de configuração de vinhos existente (do seu usuário, por exemplo) para /var /www ou apenas ignora esse aviso e redireciona a saída Stderr em outro lugar:

exec ("wine tool.exe 2>/dev/null");

Ou ... você poderia pular toda a coisa do sudo. Inicie o vinho para gerar um arquivo de configuração no seu diretório inicial e peça ao administrador que faça um chown www: usuários .wine nos seus arquivos de configuração de vinhos.

Agora, o Apache deve ter os direitos necessários para executar o vinho usando seu arquivo de configuração.

O usuário www parece ter outro nome no Linux ...

EXEC ("Home =/usr/home/myuser/usr/home/myuser/bin/wine /usr/home/myuser/test.exe"

Resolvido, finalmente, usei o comando 'mono' e execute o script PHP. Aqui está o meu comando:

shell_exec('mono Release/X12Parser.exe Release/EDI_FILES/first_edi.edi Release/XML_FILES/firstXML.xml');

Para instalar o Mono, siga este link.Instalar mono

Obrigado

Raja Chakraborty

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top