PHP: выполнить команду, затем продолжить?

#php #linux #php-gtk

#php #linux #php-gtk

Вопрос:

Я пишу клиент Twitter на PHP-GTK, и когда я выполняю аутентификацию OAuth, мне нужно открыть браузер, чтобы показать пользователю внеполосный токен. Мне также нужно, чтобы диалоговое окно было открыто и работало в течение этого времени, чтобы пользователь мог ввести этот токен.

Проблема в том, что в Linux, когда я открываю браузер с xdg-open URL помощью PHP, кажется, останавливается, пока я не закрою окно браузера. Мне нужен PHP для запуска браузера, затем откройте диалоговое окно. Могу ли я заставить PHP просто выполнить команду и продолжить работу со сценарием?

Комментарии:

1. Поможет ли многопоточность gr.php.net/pcntl . У меня нет опыта, и я не знаю, легко ли это или хорошо!

Ответ №1:

В * nix вы можете запустить внешнюю программу и продолжить (т. Е. Не Блокировать) с помощью amp; оператора. Вам также необходимо перенаправить STDOUT и STDERR куда-нибудь, чтобы это работало правильно.

Итак, вы бы сделали что-то вроде этого:

 exec("xdg-open "$url" > /dev/null 2>amp;1 amp;");
  

Существует также способ сделать это в Windows, который я добавлю, когда найду его.

Редактировать

Вы можете добиться того же в Windows, используя следующий фрагмент:

 $WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($commandToExecute, 0, FALSE);
  

FALSE Аргумент, переданный во второй строке, является частью, которая останавливает его блокировку.