2016-03-02 201 views
9

在問之前,我不得不說我有嘗試在堆棧和其他地方的每個類似的問題,並失敗。Php作曲家openssl錯誤

我無法使用composer因爲這個錯誤的:

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

我有ubuntuxampp

我曾嘗試:

  • 我取消註釋;extension=php_openssl.dllphp.ini(CLI和正常) - 沒有通過PHP之外的終端工作
  • 安裝了OpenSSL - 沒有工作
  • 入住phpinfo()如果openssl被加載並激活

enter image description here

  • 和幾個想通過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

  • 我試圖在bashrc改變PATH,沒有成功要麼

什麼我發現奇怪的是擴展的位置...

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 
+0

聽起來像你有兩個不同的安裝PHP。可能有一個來自XAMPP(/ usr/local),一個來自Ubuntu基地(/ usr)。如果是這樣的話,你可以編輯你的PATH來選擇你想要的,或者只是卸載你不想要的那個。 –

+0

我試圖通過'find'命令查找'php.ini',並在'cli'和'/ opt/lampp/etc/php.ini'中找到一個' – JTC

+2

查看使用哪個'php.ini'文件由你的cli運行'php -i | grep php.ini'。 –

回答

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等

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在我的情況下。由於我們必須找到PHP開放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 

如果問題不解決,然後讓我知道。