无法找到套接字传输“ssl” - 您是否忘记在配置PHP时启用它?

时间:2014-02-23 01:09:15

标签: php windows apache sockets ssl

我正在谷歌上搜索这个错误很多小时。我没试过this主题的所有解决方案。 <? phpinfo(); ?>(唯一的区别是我使用的是Appserver而不是IIS)它没有显示任何与SSL相关的内容。我还应该尝试什么?

完整的错误消息:

<b>Warning</b>:  fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport &quot;ssl&quot; - did you forget to enable it when you configured PHP?) in <b>C:\AppServ\www\webgitz\test\class.smtp.php</b> on line <b>122</b><br />
SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (27010016)

和代码:

<?php 

require_once "validation.php";

require_once "PHPMailer.php";


require_once "class.smtp.php";

$email= "foo@gmamcil.com";

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth   = true; // enable SMTP authentication
$mail->Port       =465;                    // set the SMTP server port
$mail->Host = "smtp.gmail.com"; // GMAIL's SMTP server
$mail->SMTPDebug = 2;
$mail->SMTPSecure = 'ssl';
$mail->Username   = "xxxxxx@gmail.com"; // GMAIL username
$mail->Password   = "*********"; // GMAIL password
$mail->AddReplyTo("XXXXX@gmail.com","AAAA"); // Reply email address
$mail->From = "XXXX@gmail.com";
$mail->FromName = "...."; // Name to appear once the email is sent
$mail->Subject = "...."; // Email's subject
$mail->Body = "Hello World,<br />This is the HTML BODY<br />"; //HTML Body
$mail->AltBody = "..."; // optional, commentA out and test
$mail->WordWrap = 50; // set word wrap
$mail->MsgHTML($msg); // [optional] Send body email as HTML
$mail->AddAddress("$email", "fooo");  // email address of recipient
$mail->IsHTML(true); // [optional] send as HTML

if(!$mail->Send()) echo 'ok'; else echo 'error';    
?>

4 个答案:

答案 0 :(得分:39)

检查你的php.ini文件,如果有的话:

;extension=php_openssl.dll

将其更改为

extension=php_openssl.dll

之后,请记住使用Appserver提供的任何控制面板或使用系统控制面板上的服务窗口重新启动Apache。

另外请确保php_openssl.dll位于系统可以访问的文件夹上,许多人通过将它们复制到C:\ windows或C:\ windows \ system32来解决dll位置问题。虽然这不是必要的。

之后,使用phpinfo执行文件并检查它是否已启用。

我已经阅读过某个地方,无法查明它,那些wamps的安装有更多的那个php.ini,但只有一个真的有效,可能是你编辑错了吗?

答案 1 :(得分:1)

我和ssl有几个小时的类似错误。

对我有用的是将php\libeay32.dllphp\ssleay32.dllphp\ext\php_openssl.dll从php目录复制到Apache2.2\bin目录。然后重启apache。

答案 2 :(得分:1)

正确的答案是替换

;extension=php_openssl.dll

php.ini文件中

extension=php_openssl.dll

如果您无法在extension=php_openssl.dll文件中找到php.ini,只需将以下行添加到文件中即可:

extension=php_openssl.dll

这应该有效!

答案 3 :(得分:0)

对于某些人来说,这些解决方案都不起作用。

对我来说解决方法是:将dll libeay32.dll和ssleay32.dll复制到服务器的bin目录 - apache。

解决方案在评论中提出: http://php.net/manual/fa/openssl.installation.php

当我查看错误日志时,我明白问题在于加载dll并将它们放到服务器目录中是唯一的方法。