Intereting Posts

Как использовать Wine из Apache / Php? – '/ var / www' не принадлежит вам

Мне нужно запустить инструмент командной строки Windows из php-скрипта на моем сервере Debian. Для этого я пытаюсь Вино. Вызов вина и инструмента через терминал отлично работает: «$ wine tool.exe»

Но при работе с моим php-скриптом …

exec ("wine tool.exe");

… В моем журнале ошибок Apache я получаю следующее: wine: '/ var / www' не принадлежит вам, отказываясь создавать каталог конфигурации там

Я предполагаю, что это простая фундаментальная проблема прав пользователя Linux. Должен ли я изменить права пользователя на Wine на www-data? Как?

Вы должны создать отдельный домашний каталог для запуска Wine. Создайте каталог, который принадлежит www-данным, установите переменную HOME, su www-data и запустите winecfg один раз; затем запустите tool.exe (как этот пользователь). В вызове exec убедитесь, что установлен HOME (попробуйте exec("HOME=/tmp/wine wine tool.exe") )

Вы захотите использовать chown для изменения права собственности на wine и tool.exe.

Имейте в виду, что это может потенциально открыть некоторые проблемы безопасности.

Поскольку я запускаю FreeBSD, я получаю сообщение об ошибке: «/ root» не принадлежит вам. Создание папки с именем '/ var / www' не поможет 🙁

Apache работает как www или потоки, в то время как основной процесс начинается с root, насколько я знаю. Если у вас нет прав администратора, вы всегда можете попросить администратора добавить строку в файл sudoers.

Я добавил следующую строку в файл sudoers, и пусть Apache (пользователь www) использует sudo для запуска вина как моего пользователя (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"

Кажется, работает до сих пор.

Кажется безвредным, пока вино может функционировать без каталога конфигурации.

Попробуйте и выясните, может ли вино работать с указанным каталогом конфигурации в командной строке. Если нет, вы можете сделать две вещи: либо вы копируете существующий (от вашего пользователя, например) каталог винных конфигураций в / var / www, либо просто игнорируете это предупреждение и перенаправляете вывод STDERR где-то в другом месте:

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

Или … вы могли бы пропустить всю вещь судо. Запустите Wine, чтобы создать файл конфигурации в вашем домашнем каталоге, а затем попросите администратора сделать chown www: users .wine в ваших файлах конфигурации вин.

Теперь Apache должен обладать необходимыми правами для запуска вин, используя ваш файл конфигурации.

У пользователя 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 at: 1, а затем установить DISPLAY на localhost: 1 перед запуском Wine из моего веб-скрипт.

SOLVED So Наконец, используется команда «mono» и запускается через скрипт PHP. Вот моя команда:

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

Чтобы установить моно, перейдите по этой ссылке. Установите моно

благодаря

Раджа Чакраборти