Php 在XAMPP中启用OpenSSL

Php 在XAMPP中启用OpenSSL,php,ssl,xampp,Php,Ssl,Xampp,我花了三个小时,但什么也没找到;我无法连接到启用SSL的服务器。我想列出我做了什么: 首先检查我的PHP扩展目录是否有序;扩展不存在,php\u openssl.dll 然后我打开了我的php.ini文件,但我没有看到任何要取消注释的扩展名=php\u openssl.dll行 另外,我在谷歌上搜索,发现有人有同样的问题。 不过,我也有 OPENSSL_CONF C:/xampp/apache/bin/openssl.cnf ... openssl OpenSSL support enabl

我花了三个小时,但什么也没找到;我无法连接到启用SSL的服务器。我想列出我做了什么:

首先检查我的PHP扩展目录是否有序;扩展不存在,php\u openssl.dll

然后我打开了我的php.ini文件,但我没有看到任何要取消注释的扩展名=php\u openssl.dll

另外,我在谷歌上搜索,发现有人有同样的问题。

不过,我也有

OPENSSL_CONF C:/xampp/apache/bin/openssl.cnf 
...
openssl
OpenSSL support enabled 
OpenSSL Library Version OpenSSL 0.9.8l 5 Nov 2009 
OpenSSL Header Version OpenSSL 0.9.8l 5 Nov 2009
没有台词。我该怎么办?请分享你的建议

[PHP_OPENSSL]
extension=php_openssl.dll

这就是答案。

是的,您必须打开
php.ini
并删除分号:

;extension=php_openssl.dll
如果您没有该行,请检查您是否有该文件(在我的电脑中位于
D:\xampp\php\ext
),并将其添加到“动态扩展”部分的
php.ini


我使用xampp。之前,我在phpMailer中尝试了示例文件“test_smtp_gmail_basic.php”(您可以在此处下载phpMailer:),但我遇到了以下错误:

邮件程序错误:以下发件人地址失败:xxx@gmail.com

在我注释掉
之后;在php.ini中,extension=php_openssl.dll
正在工作。

在xampp中,如果php.ini文件中没有“extension=php_openssl.dll”,请将其添加到php.ini文件的“Windows扩展名”部分 然后重新启动apache。
它对我有用

您需要编辑php.ini。这是4个简单的步骤

查找php.ini文件

$inipath = php_ini_loaded_file();
在文件中启用openssl:

extension=php_openssl.dll 
打开“允许url打开”

allow_url_fopen = On

重新启动apache,您就完成了

步骤1:在你的
php.ini上
注释掉
;extension=php_openssl.dll

步骤2:从PHP根文件夹复制libeay32.dll和ssleay32.dll,并将其粘贴到Apache/bin文件夹


步骤3:重新启动Apache

PHP>7的情况发生了变化。这就是我必须为PHP7.2做的事情

步骤:1:取消注释
extension=openssl

步骤:2:取消注释
扩展名\u dir=“ext”

步骤:3:重新启动xampp

完成。

解释:(来自php.ini)

如果希望自动加载扩展,请使用以下语法:

extension=modulename
注意:以前的PHP版本(
extension=.so
extension=.PHP_uuk;.dll
)中使用的语法由于遗留原因而受到支持,在未来的PHP主版本中可能会被弃用。因此,如果可能,请转到新的(
扩展=
)语法


特别注意:确保正确设置
扩展目录
指令。

我假设这个问题适用于使用基于windows系统的用户

确保php.ini文件中的扩展名=php_openssl.dll没有分号后


然后确保您已将C:/xampp/apache/bin添加到环境路径中,以便使用openssl,而无需将命令提示符移动到该目录C:/xampp/apache/bin

那么,我们如何使
openssl\u pkey\u new()
和PHP中的所有其他
openssl\u
函数工作

  • 在(右/活动)
    php.ini
    中启用扩展名
    php\u openssl.dll
    。检查过了
  • 检查
    xampp\apache\conf\
    中是否存在
    openssl.cnf
    (以及xampp中的两个其他目录)。检查过了
  • 在Windows系统设置中添加了环境变量
    OPENSSL\u CONF
    ,其中包含上述
    OPENSSL.cnf
    的完整路径。检查过了
  • 重新启动Apache(之后无法工作,多次重新启动计算机…)。检查过了
仍然不工作,并抛出错误,如

  • 错误:0E06D06C:配置文件例程:NCONF_get_字符串:无值
  • 错误:020001002:系统库:fopen:没有此类文件或目录
  • 错误:2006D080:BIO例程:BIO_新文件:无此类文件

好的,这里还有两件事要检查

1。环境问题

从PHP脚本运行
phpinfo()
,然后转到“Apache环境”部分。检查
OPENSSL\u CONF
的值

惊喜。这不是我们在windows系统设置中设置的

解决办法很简单。在PHP脚本中设置环境变量

putenv('OPENSSL_CONF=C:\xampp\apache\conf\openssl.cnf');
2。相对文件名有问题

现在,
openssl\u pkey\u new()
可以工作了,但是
openssl\u pkey\u export\u to\u file()
仍然不工作,并且返回
false
,没有任何进一步的解释

检查指定为输出文件名的文件名。只要不指定完整路径,它就不会在Windows中工作

$folder = realpath('../keyring');
$outfile = $folder.'/private.pem';
openssl_pkey_export_to_file($key, $outfile);

虽然与这个问题无关,但由于WP migrate Pro docs链接到这个问题,我想我会在这里发布一个答案

如果您在DB Migrate Pro激活而不是启用SSL时遇到问题,您只需在wp配置中添加一行代码即可


定义('WPMDB_许可证','XXXXXXXXXX X')

请将@Memochipan标记为答案您可能还需要取消php.ini中的'extension_dir=“ext”'注释,并相应地设置路径。感谢您在上面的评论。我想我在某个时候改变了它。。。我想是吧。无论如何,谢谢。php.ini文件通常位于xampp/php/php.ini中。它不是
php\u info()
,而是
phpinfo()
。只需将这一行添加到Apache httpd.conf文件中
SetEnv OPENSSL_CONF C:/xampp/apache/CONF/OPENSSL.cnf
$folder = realpath('../keyring');
$outfile = $folder.'/private.pem';
openssl_pkey_export_to_file($key, $outfile);