SSL: fatal protocol error
Код:
<?php
$headers = "GET...";
$fp = fsockopen("ssl://айпи",443);
fputs($fp,$headers);
while (!feof($fp)) {
echo fread($fp,1024);
}
fclose($fp);
?>
$headers = "GET...";
$fp = fsockopen("ssl://айпи",443);
fputs($fp,$headers);
while (!feof($fp)) {
echo fread($fp,1024);
}
fclose($fp);
?>
Почти все выдает. На последних байтах подвисает секунд на ~30, потом выдает вместе с этой ошибкой. Накопал только, что иис не правильно закрывает ссл соединения и из за этого пхп кидает такую ошибку. У меня апач. Не могу понять в чем проблема. Помогите пожалуйста. Заранее спасибо.
есть такой баг, чтобы побороть его рекомендуется воспользоваться таким переходничком:
Как сказано по ссылке выше, это сделано для того, чтобы проверить, что есть нужный нам УРЛ, [FONT=Courier New](вместе с http и https), используя @fgets чтобы избежать появления мессагов об ошибке, когда юзаем SSL. [/FONT]
Да,
Код:
<?php
function isOnline($url) {
if (!$url_info = parse_url($url)) {
return false;
}
switch ($url_info['scheme']) {
case 'https':
$scheme = 'ssl://';
$port = 443;
break;
case 'http':
default:
$scheme = '';
$port = 80;
}
$data = "";
$fid = @fsockopen($scheme . $url_info['host'], $port, $errno, $errstr, 30);
if ($fid) {
fputs($fid, 'HEAD ' . (isset($url_info['path'])? $url_info['path']: '/') . (isset($url_info['query'])? '?' . $url_info['query']: '') . " HTTP/1.0\r\n" .
"Connection: close\r\n" .
'Host: ' . $url_info['host'] . "\r\n\r\n");
while (!feof($fid)) {
$data .= @fgets($fid, 128);
}
fclose($fid);
return !empty($data);
} else {
return false;
}
}
function isOnline($url) {
if (!$url_info = parse_url($url)) {
return false;
}
switch ($url_info['scheme']) {
case 'https':
$scheme = 'ssl://';
$port = 443;
break;
case 'http':
default:
$scheme = '';
$port = 80;
}
$data = "";
$fid = @fsockopen($scheme . $url_info['host'], $port, $errno, $errstr, 30);
if ($fid) {
fputs($fid, 'HEAD ' . (isset($url_info['path'])? $url_info['path']: '/') . (isset($url_info['query'])? '?' . $url_info['query']: '') . " HTTP/1.0\r\n" .
"Connection: close\r\n" .
'Host: ' . $url_info['host'] . "\r\n\r\n");
while (!feof($fid)) {
$data .= @fgets($fid, 128);
}
fclose($fid);
return !empty($data);
} else {
return false;
}
}
Как сказано по ссылке выше, это сделано для того, чтобы проверить, что есть нужный нам УРЛ, [FONT=Courier New](вместе с http и https), используя @fgets чтобы избежать появления мессагов об ошибке, когда юзаем SSL. [/FONT]