У меня есть PHP-файл, который вызывает другой файл PHP через curl. Я пытаюсь, чтобы второй файл отправил ответ на первый, чтобы сообщить ему, что он начался. Проблема в том, что первая не может дождаться, когда первая завершит выполнение, потому что это может занять минуту или больше, мне нужно, чтобы она немедленно отправила ответ, а затем переходила к ее регулярному бизнесу. Я попытался использовать эхо в начале второго файла, но первое не получило его в качестве ответа. Как отправить ответ без завершения выполнения?
file1.php
<?php $url = 'file2.php'; $params = array('data'=>$data,'moredata'=>$moredata); $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "Mozilla", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_TIMEOUT => 10, // don't wait too long CURLOPT_POST => true, // Use Method POST (not GET) CURLOPT_POSTFIELDS => http_build_query($params) ); $ch = curl_init($url); curl_setopt_array( $ch, $options ); $response = curl_exec($ch); // See that the page started. curl_close($ch); echo 'Response: ' . $response; ?>
file2.php
<?php /* This is the top of the file. */ echo 'I started.'; . . . // Other CODE . . . ?>
Когда я запускаю file1.php, это приводит к: «Ответ:», но я ожидаю, что это будет «Ответ: я начал». Я знаю, что file2.php запускается, потому что «Other CODE» выполняется, но Echo не отправляется обратно в file1.php, почему?
Это может быть именно то, что вы ищете. Викинг в PHP:
http://framework.zend.com/manual/en/zendx.console.process.unix.overview.html
Процесс делится на два. Один – отец другого. Отец может сказать клиенту, что он только начал, и ребенок может справиться с этой задачей. Когда ребенок заканчивается, он может сообщить об отце, который также может сообщить клиенту.
Имейте в виду, что для этого существует множество требований:
В результате оказалось, что CURL не ведет себя как браузер:
Выходной буфер PHP Curl не получает ответ
Сначала я закончил свой второй файл, а второй – первым. Второй файл ожидал, что «готовый» файл напишет, что первый файл сделал, когда он, очевидно, закончил.
На данный момент кажется, что база данных будет лучшим местом для хранения сообщений, чтобы файлы могли проходить между собой, но файл также работал бы на быстро и грязно.