Request.Url.AbsoluteUri
Это свойство делает все, в чем Вы нуждаетесь, все в одном сжатом вызове.
Вы должны создать отдельный домашний каталог для запуска Wine. Создайте каталог, который принадлежит www-data, установите переменную HOME, su www-data и один раз запустите winecfg; затем запустите tool.exe (от имени этого пользователя). В вызове exec убедитесь, что установлен HOME (попробуйте exec ("HOME = / tmp / wine wine tool.exe")
)
Вы захотите использовать chown , чтобы изменить владельца Wine и tool.exe.
Имейте в виду, что это потенциально может вызвать некоторые проблемы с безопасностью.
Кажется безобидным, пока Wine может работать без каталога конфигурации.
Попробуйте выяснить, может ли Wine работать с указанным каталогом конфигурации в командной строке. В противном случае вы можете сделать две вещи: либо скопировать существующий (например, от вашего пользователя) каталог конфигурации wine в / var / www, либо просто проигнорировать это предупреждение и перенаправить вывод STDERR в другое место:
exec ("wine tool.exe 2>/dev/null");
Или ... вы можете полностью пропустить sudo. Запустите Wine, чтобы сгенерировать файл конфигурации в вашем домашнем каталоге, затем попросите администратора выполнить команду chown www: users .wine для ваших файлов конфигурации Wine.
Apache теперь должен иметь необходимые права для запуска Wine с использованием вашего файла конфигурации.
У пользователя www в linux другое имя ...
exec ("HOME = / usr / home / myuser / usr / home / myuser / bin / wine /usr/home/myuser/test.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"
Кажется, пока работает.