Я бы ознакомился с компонентом Symfony Process для этого варианта использования. Он предоставляет методы для выполнения синхронно и асинхронно. Его можно легко установить через Composer, но для него требуется как минимум PHP 7.1.
Документацию можно найти здесь: https://symfony.com/doc/current/components/process.html
Пример для вашего варианта использования может выглядеть следующим образом:
$process = new Process(['curl', '--data', $data, $url]);
$process->start();
Обратите внимание, что я опустил опцию -o
, потому что вывод подпроцесса не будет отображаться, если вы не запросите его явно.
Быстрый просмотр дал несколько сообщений, в которых говорилось, что метод start()
блокируется в Windows, но кажется, что патч уже был внедрен и объединен: https://github.com/symfony/symfony/pull/10420
РЕДАКТИРОВАТЬ: Если вы не хотите использовать библиотеку, вы можете использовать комбинацию popen()
, pclose()
и инструмента Windows start
:
pclose(popen('start /B curl --data "'.$data.'" '.$url, 'r'));
Запускает программу в фоновом режиме, не открывая окно, и сразу же возвращается.
РЕДАКТИРОВАТЬ 2: Источник для трюка с start /B
: http://php.net/manual/en/function.exec.php#86329