Асинхронный PHP? - PullRequest
       3

Асинхронный PHP?

0 голосов
/ 30 января 2012

У меня есть PHP-скрипт, который делает много проверок, а затем загружает файл на сервер и выводит оригинал.
Для загрузки файла я использую

system("/usr/local/bin/wget -O ...");

Итак, php ожидает завершения загрузки, а затем выводит файл.
Мой вопрос: возможно ли отправить куда-нибудь «ping» (другой файл php?) Для начала загрузки, а затем, не дожидаясь результата, просто продолжить выполнение.

Ответы [ 3 ]

2 голосов
/ 30 января 2012

Используйте функции curl_multi_* для параллельной обработки нескольких загрузок.В PHP отсутствует какая-либо поддержка потоков, а разветвление процессов - просто хак.

1 голос
/ 30 января 2012

Используйте pcntl_fork(), чтобы преобразовать текущий процесс в дочерний процесс. Загрузите файл в дочернем процессе, пока ваш родительский процесс может продолжить выполнение своей задачи.

$pid = pcntl_fork(); 

if ( $pid == -1 ) 
{        
    // Fork failed            
    exit(1); 
} 
else if ( $pid ) 
{ 
    // The parent process
   //continue what you want to do here
} 
else 
{ 
    // the child process 
    // do the system call here
}

После выполнения некоторой работы, если вам теперь нужно, чтобы родительский процесс дождался завершения дочернего процесса, вы можете pcntl_waitpid($pid).

Прочитайте здесь для получения дополнительной документации по методам pcntl.

0 голосов
/ 30 января 2012

Обычные шаблоны проектирования будут заключаться в применении шаблона проектирования команд: http://en.wikipedia.org/wiki/Command_pattern

Вы можете реализовать это в своей локальной веб-среде или установить сервер очередей, например: http://www.rabbitmq.com/ и т. Д. И т. П.

Это зависит от ваших систем, доступа к ним и ваших знаний, чтобы понять, какое решение подойдет лучше всего. Это более сложный вопрос, слишком далеко от темы.

В целом, предлагаемый шаблон позволит вам исправить ваш вопрос, не сталкиваясь с множеством проблем, поскольку это хорошо известный и широко используемый подход для обработки множества задач, выполнение которых непосредственно в запросе занимает слишком много времени.

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