Есть ли у PHP контроль за работой, как у bash?
PHP поддерживает что-то вроде амперсанда в bash (разветвление)? Допустим, я хотел использовать cURL на 2 веб-страницах одновременно, поэтому сценарию не нужно ждать, пока не закончится первая команда cURL, как можно достичь этого в PHP? Примерно так в bash:
curl www.google.com &
curl www.yahoo.com &
wait
4 ответа
Поддерживает ли PHP что-то вроде амперсанда в bash (разветвление)?Нет. Смотрите другие ответы, хотя я отмечаю, что расширение PCNTL - только UNIX.
... как можно достичь этого в PHP? *
cURL поддерживает запуск нескольких загрузок одновременно.
Ты можешь использовать popen
или же proc_open
чтобы открыть процесс и запустить его в фоновом режиме, но нет языковой поддержки для фоновых операций, как для bash
(в любом случае, для выполнения задач; PHP был создан для сценариев).
Используя proc_open, вы можете использовать proc_get_status
знать, когда процессы завершены. Боюсь нет wait
эквивалент.
Вы можете писать асинхронные методы, если действительно хотите, но это требует много работы и, вероятно, ужасной идеи дизайна, если вы используете PHP.
Какой-то механизм очередей часто предпочтительнее. Gearman - это механизм организации очередей с открытым исходным кодом, который вы можете использовать. У меня также есть запись в блоге в очереди заданий Zend Server, в которой говорится о асинхронном выполнении задач. Вы в очереди? Введение в очередь заданий Zend Server.
Вы также можете использовать что-то вроде классов очереди Zend Framework для реализации некоторой асинхронной работы. Zend_Queue