2016-06-17 35 views
25

Akım soketi ve PHP 5.6'da SSL ile ilgili bir sorunum var. SSL'nin arabelleğe alındığı çıktı görünüyor. Aşağıdaki örnekte "ehlo" komutu dikkate alınmaz (sunucu yanıt vermiyor). Ancak "ehlo" ifadesinden sonra başka bir şey gönderildiğinde ör. fwrite'a başka bir çağrıda yeni bir hat, sunucu yanıt gönderir.SSL ile Aktarım soketi

$errno = ''; 
$errstr = ''; 
$timeout = 5; 
$streamContext = stream_context_create(); 
$host = 'ssl://smtp.some.server.com:465'; 
$stream = stream_socket_client($host, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); 
stream_set_blocking($stream, 1); 
stream_set_timeout($stream, $timeout); 
stream_set_write_buffer($stream, 0); 

$fgets = fgets($stream); 
print_r($fgets); 

fwrite($stream, "ehlo [127.0.0.1]\r\n"); 

$response = ''; 
do { 
    $line = fgets($stream); 
    $response .= $line; 
} while (null !== $line && false !== $line && ' ' != $line{3}); 

print_r($response); 

fclose($stream); 

bir yanıt var:

220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.

(ilk print_r geliyor).

Ama satırdan sonra zaman: fwrite($stream, "ehlo [127.0.0.1]\r\n"); Ben ek soket yazma ekleyin:

Ben bir PHP SSL sarıcı sorunu olmadığını kontrol etmek Stunnel kullanarak denedim
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready. 
250-epicserver.net.pl Hello ip-166-242.pl [94.183.162.232], pleased to meet you 
250-PIPELINING 
250-ENHANCEDSTATUSCODES 
250-SIZE 
250-8BITMIME 
250-AUTH PLAIN LOGIN 
250-AUTH=PLAIN LOGIN 
250 HELP 

ve ben değiştirdiğinizde $host$host = 'localhost:110;' için: fwrite($stream, "\n"); çıkış ok (stunnel yapılandırmam) her şey mükemmel çalışıyor (bu özel fwrite yöntemini eklemeden).

Bu problemle karşılaşan kimse var mı?

$fgets = ''; 
while (is_resource($stream) && !feof($stream)) { 
    $fgets .= fgets($stream); 
} 
+0

mesela mu: – VolkerK

+0

Evet, bu test kodu swiftmailer uygulamasından alınmıştır. –

+0

Eğer ssl: //smtp.some.server.com: 465 ile swiftmailer kullanırsanız, el sıkışma tamamlanmadığı için işe yaramıyor mu? – VolkerK

cevap

1

emin fgets doğru çizgi fesih anlamaya olmak gerekirse, bu kodla 1 fgets değiştirin http://swiftmailer.org aynı sorunu gösterir mi? Değilse, bu uygulamayı sizinkilerle karşılaştırırsınız.