php file_get_contents 사용의 경우 연결 종료만으로는 충분하지 않습니다. PHP는 여전히 서버에서 eof 마녀 보내기를 기다립니다.
내 해결책은 'Content-Length :'를 읽는 것입니다.
다음은 샘플입니다.
response.php :
<?php
ignore_user_abort(true);
set_time_limit(500);
ob_start();
echo 'ok'."\n";
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
sleep(30);
fget이 eof를 기다리는 동안 읽지 않으면 닫기 라인에 대한 응답으로 "\ n"을 참고하십시오.
read.php :
<?php
$vars = array(
'hello' => 'world'
);
$content = http_build_query($vars);
fwrite($fp, "POST /response.php HTTP/1.1\r\n");
fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fwrite($fp, "Content-Length: " . strlen($content) . "\r\n");
fwrite($fp, "Connection: close\r\n");
fwrite($fp, "\r\n");
fwrite($fp, $content);
$iSize = null;
$bHeaderEnd = false;
$sResponse = '';
do {
$sTmp = fgets($fp, 1024);
$iPos = strpos($sTmp, 'Content-Length: ');
if ($iPos !== false) {
$iSize = (int) substr($sTmp, strlen('Content-Length: '));
}
if ($bHeaderEnd) {
$sResponse.= $sTmp;
}
if (strlen(trim($sTmp)) == 0) {
$bHeaderEnd = true;
}
} while (!feof($fp) && (is_null($iSize) || !is_null($iSize) && strlen($sResponse) < $iSize));
$result = trim($sResponse);
보시다시피이 스크립트는 콘텐츠 길이에 도달하면 eof를 기다리지 않습니다.
도움이 되길 바랍니다