В * nix вы можете запустить внешнюю программу и продолжить (т.е. не блокировать), используя оператор &
. Вы также должны перенаправить STDOUT и STDERR куда-нибудь, чтобы это работало правильно.
Итак, вы бы сделали что-то вроде этого:
exec("xdg-open \"$url\" > /dev/null 2>&1 &");
Существует также способ сделать это в Windows, который я добавлю, когда найду его.
EDIT
Вы можете добиться того же в Windows, используя следующий фрагмент:
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($commandToExecute, 0, FALSE);
Аргумент FALSE
, передаваемый во второй строке, является частью, которая препятствует блокировке.