Apache служба PHP Exec не работает - PullRequest
2 голосов
/ 24 апреля 2011

Я просмотрел все остальные вопросы по этому поводу, но они не помогли, поэтому:

Я использую xampp (lite) на компьютере с Windows Server 2003 внутри домена, apache установлен в качестве службы. Проблема в том, что функции PHP exec, system, passthru и т. Д. Ничего не делают, никаких сообщений об ошибках (уровень журнала apache отладочный, php error_reporting - E_ALL), никакого выполнения программы, ничего, он действует так, как если бы вызов функции не был ' т там

Я пробовал разные подходы: exec, system, ..; proc_open и WScript.Shell COM , ничего не получалось. Я пытался использовать абсолютный путь, давал разрешения пользователю, пробовал множество разных .exe-файлов, но ничего не получалось, ничего не выполнялось.

Я дал сервис Apache мое имя пользователя ; дал ему собственного пользователя apache ; дал ему системного пользователя и поставил галочку " Разрешить взаимодействие с рабочим столом ".

php safe_mode выключен , также никакие функции не отключены.

При запуске apache NOT как службы все работает отлично.

Есть идеи, что может быть не так?

ТИА

Ответы [ 2 ]

5 голосов
/ 01 августа 2013

Если вы попытаетесь запустить приложения с графическим интерфейсом из службы в Vista, у вас будет много проблем.В качестве функции безопасности Vista обеспечивает взаимодействие служб с рабочим столом с помощью «Обнаружения интерактивных служб».

Это означает, что если вы используете PHP в качестве модуля службы Apache, вы не сможетезапускать приложения с графическим интерфейсом любым способом.Такие вещи просто не будут работать:

$ WshShell = new COM ("WScript.Shell");$ oExec = $ WshShell-> Run ("notepad.exe", 7, false);

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

Во-первых, если Apache уже установлен в качестве службы, вам необходимо установить его тип запуска «ручной» с помощью оснастки служб.(% SystemRoot% \ system32 \ services.msc) Найдите службы в окне поиска в меню «Пуск».

Затем добавьте ярлык в C: \ apache \ bin \ httpd.exe (или где установлен Apache)папку «Автозагрузка» и установите этот ярлык для запуска свернутым.Вы можете использовать приложение, как TrayIt!чтобы заставить Apache войти в системный трей.

Затем используйте любой из методов, описанных на веб-сайте PHP, и вы сможете открыть приложение Windows из PHP и увидеть его графический интерфейс.

1 голос
/ 24 апреля 2011

Проверьте ваш файл PHP.ini, просто включите те функции, которые вы упомянули, в настройке запрещенного.Хотя это не что-то стандартное из выпуска XAMPP, но стоит проверить.

Вы говорите, что не получаете никаких ошибок, я буду считать, что ваш сервер настроен как служба, поэтому любые команды отправляются с использованием exe, system, passthruи т. д. будет выполняться в фоновом режиме, поэтому вы не увидите, как они работают, но вы должны иметь возможность собирать данные.

<?php

//Start an object to capture data.
ob_start();

//Check we have access to the command line.
exec("ping google.com -n 1");

//Capture the output.
$output = ob_get_clean();

//Let's display it.
echo $output;

?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...