環境參數:
- PHP:PHP 5.6.18
安裝了nextcloud之後,出現了錯誤訊息,簡單的寫支test.php來測試就看到錯誤:
<?php
# filename: test.php
echo "test";
?>
在命令列執行test.php
$ php test.php
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20131226/wddx.so' - /usr/local/lib/php/20131226/wddx.so: Undefined symbol "ps_globals" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20131226/xsl.so' - /usr/local/lib/php/20131226/xsl.so: Undefined symbol "dom_node_class_entry" in Unknown on line 0
test
雖然這些錯誤不致影嚮其它的程式運行,但總是看了就不舒服,況且若不解決它,日後必有機會帶來困擾。
先查一下PHP extension的目錄如下:
$ ls /usr/local/etc/php
ext-20-exif.ini
ext-20-gd.ini
ext-20-gettext.ini
ext-20-intl.ini
ext-20-json.ini
ext-20-ldap.ini
ext-20-openssl.ini
ext-20-smbclient.ini
ext-30-wddx.ini
ext-30-xsl.ini
extensions.ini
php按照字母排列順序來載入延伸功能(extension),有些延伸套件是必需依靠在其它的套件先載入後才能成功載入,例如本例中的:wdxx和xls這二個,觀察一下它們是在預設的extension.ini之前就載入,所以出現錯誤訊息,解決方式有二種:
更改延伸套件名稱
直接將有錯誤訊息的延伸套件檔名改變,使其在extension.ini之後再載入,
$ mv ext-30-wddx.ini zext-30-wddx.ini
$ mv ext-30-xsl.ini zext-30-xsl.ini
排列順序就變成:
$ ls /usr/local/etc/php
ext-20-exif.ini
ext-20-gd.ini
ext-20-gettext.ini
ext-20-intl.ini
ext-20-json.ini
ext-20-ldap.ini
ext-20-openssl.ini
ext-20-smbclient.ini
extensions.ini
zext-30-wddx.ini
zext-30-xsl.ini
再次執行測試,
$ php test.php
test
正常沒有錯誤發生了。
手動變更extension.ini
在/usr/local/etc/php的目錄下,將其它的延伸套件內容直接加入extension.ini檔案內,像這樣:
extension=pdo.so
extension=session.so
extension=xml.so
extension=tokenizer.so
extension=xmlreader.so
extension=pdo_sqlite.so
extension=iconv.so
extension=filter.so
zend_extension=/usr/local/lib/php/20131226/opcache.so
extension=posix.so
extension=simplexml.so
extension=phar.so
extension=zip.so
extension=zlib.so
extension=fileinfo.so
extension=apcu.so
extension=ftp.so
extension=mbstring.so
extension=mysqli.so
extension=mysql.so
extension=mcrypt.so
extension=wdxx.so #加入後,刪除原有的ext-30-wddx.ini
extension=xsl.so #加入後,刪除原有的ext-30-xsl.ini
EmoticonEmoticon