12
votes

When I run this command php -v
this error comes up:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/dom.so' - /usr/lib/php/20160303/dom.so: undefined symbol: php_libxml_node_free_list in Unknown on line 0

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/xmlreader.so' - /usr/lib/php/20160303/xmlreader.so: undefined symbol: dom_node_class_entry in Unknown on line 0

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/xsl.so' - /usr/lib/php/20160303/xsl.so: undefined symbol: dom_node_class_entry in Unknown on line 0
PHP 7.1.5-1+deb.sury.org~trusty+2 (cli) (built: May 22 2017 13:39:01) ( NTS )

Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.7-1+ubuntu14.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies

6
Anybody can help me?Scott Wang
I think the error message explains itself, it cant find the dynamic libraries it is expecting at the locations it is telling you about. First thing to do would be to check they existPeter Featherstone
But I don't know how to locate the xmlreader.so, @PeterFeatherstoneScott Wang
The path is given to you...Peter Featherstone

6 Answers

63
votes

Safe solution is to reinstall all php7 related packages.

You can do it by simply entering this command to console:

sudo apt-get install --reinstall `dpkg -l | grep 'ii  php7' | awk '{ printf($2" "); next}'`

This solution will keep your configuration unchanged

8
votes

(In ubuntu 14.04 or above)

sudo apt-get install libapache2-mod-php7.0 libphp7.0-embed libssl-dev openssl php7.0-cgi php7.0-cli php7.0-common php7.0-dev php7.0-fpm php7.0-phpdbg

reference:

https://gnh1201.wordpress.com/2017/07/24/php-7-0-undefined-symbol-php_libxml_node_free_list/

5
votes

I found almost the same problem with xml after linux update (and PHP 7.0 -> 7.1 with it).

The solution for me was pretty simple:

sudo apt install php7.1-xml
0
votes

I experienced the same errors. The reportedly missing files were present, the file permissions looked ok to me, and PHP was executed using the correct user and group.

For me it helped, to remove all PHP packages and do a fresh start.

  1. The following command should remove all PHP packages on a Debian/Ubuntu systems (including the PHP config - make a backup before):

    sudo aptitude purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`
    

    Source: https://askubuntu.com/a/187278

  2. Check if PHP was removed:

    php -v
    

    This should return something like "command not found: php".

  3. Then, install PHP again, e.g.:

    sudo apt-get install php7.1 php7.1-xml php7.1-fpm php7.1-json
    
0
votes

Though it's not a direct solution hopefully it'll save someone's valuable time at least for now.

Open your php.ini file.

in my case

my cli ini located in /etc/php/7.4/cli/php.ini

and another located in /etc/php/7.4/apache2/php.ini

search for extension=xsl and comment this line // put a ';' at the front of line

save and quit the editor and you're done.

-1
votes

In my case some php packages were not upgraded, so I simply had to perform a dist-upgrade:

sudo apt-get dist-upgrade