Как запустить shell_exec () в php, который не остановится, если не будет убит или остановлен? - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю приложение Laravel только для автономного режима (только для ОС Windows).Есть настройка клиента и сервера.

На панели инструментов сервера есть кнопка «Включить» Сервер, чтобы клиент мог подключиться к серверу.Ссылка ( как я могу получить доступ к своему приложению laravel с другого компьютера? )

Мой код не работает.

// Route
Route::post('server-on', 'ServerController@powerOn')->name('server-on'); 

// ServerController
public function powerOn(){
    $ip = getHostByName(getHostName()); // IPv4 Address (192.168.254.120)
    $command = 'php artisan serve --host ' . $ip . '  --port 1807 2>&1 &';
    shell_exec($command);
}

Причина, по которой у меня это, заключается вПредположим, что Конечный пользователь не технарь.Я не хочу, чтобы они открывали cmd и вводили команду (это может быть моим последним средством).

1 Ответ

0 голосов
/ 21 сентября 2018

shell_exec() не имеет к этому никакого отношения.Если ваше приложение работает в Linux, то для того, чтобы исполняемая программа продолжала работать в фоновом режиме, а вызов вызова немедленно возвращается, вы должны использовать помощники, такие как nohup (и удалить конечный &):

$command = "nohup php artisan serve --host {$ip} --port 1807 2>&1";
...

РЕДАКТИРОВАТЬ

Я использую Windows.

Если это так, первое, ваш прежний $command недействителен на платформе Windowsиз-за того, как вы пытались перенаправить потоки ввода / вывода (а также из-за использования &).Тем не менее, для запуска чего-либо в фоновом режиме в Windows вам также понадобится помощник, такой как START ( документы здесь ).

См. Связанный вопрос по Superuser: Как выполнить командную строку Windows в фоновом режиме? .

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