如何在不访问 php.ini 的情况下启用扩展(openssl,...)?

how to enable extension (openssl,...) without access to php.ini?

我正在使用 codeigniter 发送邮件,但我的共享主机有问题,因为我无法访问 php.ini,所以出现以下错误:

A PHP Error was encountered
Severity: Warning
Message: fsockopen(): unable to connect to ssl://smtp.googlemail.com:465
(Connection timed out)
Message: fwrite() expects parameter 1 to be resource, boolean given
Message: fgets() expects parameter 1 to be resource, boolean given

我也对这个内容使用了 .htaccess:

php_extension openssl.so

但是我得到了这个错误:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request. More information about this error may be available in the server error log. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

我也阅读了很多关于这个问题的主题,但其中 none 解决了我的问题。 现在,我不知道该怎么办了!

更新: 我在 host 中发现了一些东西,我更加困惑了!我写了这个:

if (extension_loaded('openssl')) 
{
    echo "enabled";     
}
die();

为什么我会收到这些错误:

A PHP Error was encountered
Severity: Warning
Message: fsockopen(): unable to connect to ssl://smtp.googlemail.com:465
(Connection timed out)
Message: fwrite() expects parameter 1 to be resource, boolean given
Message: fgets() expects parameter 1 to be resource, boolean given

php 有 dl() 在运行时启用扩展 见 http://php.net/manual/en/function.dl.php

dl — Loads a PHP extension at runtime

这样试试

 function load_lib($n, $f = null)
 {
  return extension_loaded($n) or dl(((PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '') . ($f ? $f : $n) . '.' . PHP_SHLIB_SUFFIX);
 }

load_lib('openssl');

OpenSSL 必须是 compiled with PHP,因此您可能不会在共享主机上使用该选项。

尝试切换到 SendGrid - 他们有 free usage tier that allows you to send 400 emails a day and extensive example code for PHP.

我通过使用我的主机安全邮件服务器而不是 Gmail 解决了我的问题。反正我没找到通过gmail发邮件的方法!