次の(簡略化された)コードがあります。
function curl_request_async($url, $params)
{
foreach ($params as $key => $val) {
$post_params[] = $key.'='.urlencode($val);
}
$post_string = implode('&', $post_params);
$parts=parse_url($url);
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 30);
fwrite($fp, "$type ".$parts['path']." HTTP/1.1\r\n");
fwrite($fp, "Host: ".$parts['host']."\r\n");
fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fwrite($fp, "Content-Length: ".strlen($post_string)."\r\n");
fwrite($fp, "Connection: Close\r\n\r\n");
$bytes_written = fwrite($fp, $post_string);
var_dump($bytes_written, strlen($post_string));
// fread($fp, 1);
// fflush($fp);
fclose($fp);
}
このコードの問題は、要求が呼び出されたサーバーに到達したという証拠が見つからなかったことです。この行は をvar_dump($bytes_written, strlen($post_string));
出力int(493) int(493)
したため、すべてのデータを受信したはずですが、受信していません。
コメントを外すfread($fp, 1);
と問題なく動作します。それは有効な解決策かもしれませんが、意味がないようです。もっと良い方法があるはずです!
私の質問は 2 つあります。なぜ はfread($fp, 1);
私の問題を解決し、より良い解決策があるのでしょうか?