我有一个协议,其中 file1.phpcurl 运行 file2.php。 file2.php 是一个长时间运行的文件,但它发送(或应该发送)一个响应回 file1.php,然后继续执行它的代码。我正在使用输出缓冲区来尝试发送此数据,但问题是如果我“返回;”冲洗后立即; file1.php 接收响应很好,但是当我尝试保持 file2.php 运行时,file1.php 永远不会接收响应,我做错了什么?有没有其他方法可以将响应发送回 file1.php?
// file1.php
$url = "file2.php"
$params = array('compurl'=>$compurl,'validatecode'=>$validatecode);
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // 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_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);
curl_close($ch);
echo $response;
// file2.php
ob_start();
echo 'Running in the background.';
// get the size of the output
$size = ob_get_length();
header("HTTP/1.1 200 OK"); // I have tried without this
header("Date: " . date('D, j M Y G:i:s e')); // Tried without this
header("Server: Apache"); // Tried without this
header('Connection: close');
header('Content-Encoding: none');
header("Content-Length: $size");
header("Content-Type: text/html"); // Tried without this
// flush all output
ob_end_flush();
ob_flush();
flush();
// If I add return; here file1.php gets the response just fine
// But I need file2.php to keep processing stuff and if I remove the
// return; file1.php never gets a response.
在正常的卷曲传输中,在页面完成加载之前,您将无法获取数据。你的脚本已经完成了。如果您想使用部分数据,您应该查看 CURLOPT_WRITEFUNCTION 。这将创建一个回调,只要有任何数据可用,您就可以使用该回调。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)