Intereting Posts
API Facebook без аутентификации клиента для общего контента Как распределить значения массива в трех столбцах? Хранить переменные массива через страницу Обновить с помощью PHP CakePHP: Редактировать пользователей без изменения пароля PHPUnit проверяет метод, возвращающий свойство объектов Zend Framework: как получить идентификатор последней вставленной строки? конвертировать mysql в pdo Почему PHP не сохраняет переменные сеанса для определенных пользователей в Internet Explorer? Требуется ли mysql_real_escape_string () при использовании подготовленных операторов? Удаление значений из сеанса PHP ограничить доступ к странице только разрешенным с определенной страницы Добавить значение для URL-адреса в форме Отправить с помощью JQuery Использование пространств имен с классами, созданными из переменной подавление ошибок php? … почему? Доступ к относительным файлам CSS / JS с правилом перезаписи htaccess

Асинхронный ответ PHP Curl

У меня есть 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

Процесс делится на два. Один – отец другого. Отец может сказать клиенту, что он только начал, и ребенок может справиться с этой задачей. Когда ребенок заканчивается, он может сообщить об отце, который также может сообщить клиенту.

Имейте в виду, что для этого существует множество требований:

  • Linux
  • Интерфейс CLI или CGI
  • shmop, pcntl и posix (требуется перекомпиляция)

В результате оказалось, что CURL не ведет себя как браузер:

Выходной буфер PHP Curl не получает ответ

Сначала я закончил свой второй файл, а второй – первым. Второй файл ожидал, что «готовый» файл напишет, что первый файл сделал, когда он, очевидно, закончил.

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