9

在问之前,我不得不说我已经在堆栈和其他地方尝试过所有类似的问题,但都失败了。

composer由于此错误,我无法使用:

requires ext-openssl * -> the requested PHP extension openssl is missing from your system.

我有xamppubuntu

我试过的:

  • ;extension=php_openssl.dllphp.ini(cli 和正常)中没有评论 - 没有工作
  • 通过 php 之外的终端安装了 openssl - 不起作用
  • 检查phpinfo()是否openssl已加载并激活

在此处输入图像描述

  • 还有更多人喜欢php -c /opt/lampp/etc/php.ini composer.phar install在我出错的地方运行作曲家

PHP Warning: PHP Startup: Unable to load dynamic library /usr/include/php5/ext/php_openssl.so - /usr/include/php5/ext/php_openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0

  • 我尝试过改PATHbashrc也没有成功

我发现奇怪的是扩展的位置......

phpinfo()扩展目录中,/usr/include/php5/ext/即使我尝试在其中指定另一个目录php.ini,当然也重新启动 apache,但仍然没有显示在phpinfo().

但是在php-config命令中我得到扩展目录是/usr/local/lib/php/extensions/no-debug-non-zts-20100525

我不确定系统上是否有多个 php,但我试图查找 php.ini 文件,但只找到了 2 个。

/etc/php5/cli/php.ini

/opt/lampp/etc/php.ini
4

2 回答 2

2

我更喜欢安装LAMP堆栈与 xamp:它是简单易用的配置包...

sudo apt-get install apache2
sudo apt-get install curl php5-cli php5 libapache2-mod-php5 php5-openssl
sudo /etc/init.d/apache2 restart
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

要测试您的安装,请运行:

  composer

使用此命令不需要更改 php.ini 等。

于 2016-03-20T21:05:19.423 回答
1

首先,您必须根据操作系统了解正确的库文件系统。在 Windows 中,共享库文件的扩展名为 DLL,而在 Linux 中,共享库文件的扩展名为 SO。

无论您在哪里进行 PHP.ini 文件的更改,都没有正确执行。首先你必须找到PHP的正确位置。由于 apache 服务正在运行,因此很容易找到运行的位置:

$ httpd -V

Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

该输出中的关键行是HTTPD_ROOT. 在我的例子中,这定义了 Apache 的ROOT目录从哪里开始。/etc/httpd因为我们必须找到正确的PHPopen位置,SERVER_CONFIG_FILE在我的例子中,它是子目录 'conf'。

在文件中搜索env_module会显示 PHP 正确位置的文件。

<IfModule env_module>
    ....
    SetEnv PHP_PEAR_SYSCONF_DIR "location of PHP"
    SetEnv PHPRC "location of PHP"
    ....
</IfModule env_module>

现在打开 PHP.ini 文件进行所需的更改

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; under UNIX:
;
;   extension=msql.so
;
; ... or with a path:
;
;   extension=/path/to/extension/msql.so
;
; If you only provide the name of the extension, PHP will look for it inits
; default extension directory.
;
extension=php_openssl.so

如果问题没有解决,请告诉我。

于 2016-03-18T19:58:27.717 回答