PHP 启动:无法加载动态库“/usr/lib/php/20131226/xsl.so”

PHP 启动:无法加载动态库“/usr/lib/php/20131226/xsl.so”

每当 PHP(5.6)从命令行(和 cron)启动时,我都会收到错误:

PHP 警告:PHP 启动:无法加载动态库“/usr/lib/php/20131226/xsl.so”-libexslt.so.0:无法打开共享对象文件:第 0 行未知中没有此文件或目录

Box 是 Ubuntu 14.04

输出自php -v

mike@wilma:/etc/php$ php -v
PHP 警告:PHP 启动:无法加载动态库“/usr/lib/php/20131226/xsl.so”-libexslt.so.0:无法打开共享对象文件:第 0 行未知中没有该文件或目录
PHP 5.6.39-1+ubuntu14.04.1+deb.sury.org+1 (命令行)
版权所有 (c) 1997-2016 PHP 集团
Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies
    使用 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,Zend Technologies

在我继续之前,是的,我已经在 Google 上查找过,是的,我已经在 StackExchange 上查找过。

先前的输出似乎告诉我该文件/usr/lib/php/20131226/xsl.so不存在,尽管它确实存在:

mike@wilma:/etc/php$ 文件 /usr/lib/php/20131226/xsl.so
/usr/lib/php/20131226/xsl.so: ELF 64 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接,BuildID[sha1]=6a6f306c06290733b42ea9290839aefd897d3205,已剥离

确定文件存在后,应检查权限

mike@wilma:/etc/php$ ls -l /usr/lib/php/20131226/xsl.so
-rw-r--r-- 1 root root 39016 12 月 12 日 19:31 /usr/lib/php/20131226/xsl.so

所以现在我知道该文件存在并且可以访问。下一步要检查的是该文件是否包含在配置中

mike@wilma:/etc/php$ find .-name "*xsl*" -ls
2752689 0 lrwxrwxrwx 1 root root 35 十二月 19 16:27 ./5.6/apache2/conf.d/20-xsl.ini -> /etc/php/5.6/mods-available/xsl.ini
2752810 4 -rw-r--r-- 1 root root 66 十二月 12 19:30 ./5.6/mods-available/xsl.ini
2752696 0 lrwxrwxrwx 1 root root 35 十二月 19 16:27 ./5.6/cli/conf.d/20-xsl.ini -> /etc/php/5.6/mods-available/xsl.ini

参考资料似乎在那里。还有其他配置指令吗?

mike@wilma:/etc/php$ find . -type f -exec grep -H'xsl' {} \;
./5.6/apache2/php.ini:;扩展=php_xsl.dll
./5.6/mods-available/xsl.ini:扩展名=xsl.so
./5.6/cli/php.ini:;扩展=php_xsl.dll
.dll 扩展名被正确注释掉了,在我看来配置是正确的。下一步是确保扩展已启用。为此,请禁用然后启用扩展
mike@wilma:/etc/php$ sudo phpdismod xsl
mike@wilma:/etc/php$ sudo phpenmod xsl
两个命令都没有任何输出,我不得不假设他们做了正确的事情。

其他建议是重新安装 xsl

mike@wilma:/etc/php$ sudo apt-get install --reinstall php5.6-xsl
正在读取软件包列表...完成
构建依赖关系树
正在读取状态信息...完成 0 个升级,0 个新安装,1 个重新安装,0 个删除,10 个未升级。 需要获取 0 B/261 kB 的档案。 准备解压.../php5.6-xsl_5.6.39-1+ubuntu14.04.1+deb.sury.org+1_all.deb... 正在将 php5.6-xsl (5.6.39-1+ubuntu14.04.1+deb.sury.org+1) 解压到 (5.6.39-1+ubuntu14.04.1+deb.sury.org+1) 上... 设置 php5.6-xsl (5.6.39-1+ubuntu14.04.1+deb.sury.org+1) ...

再检查一遍 ...

mike@wilma:/etc/php$ php -v
PHP 警告:PHP 启动:无法加载动态库“/usr/lib/php/20131226/xsl.so”-libexslt.so.0:无法打开共享对象文件:第 0 行未知中没有该文件或目录
PHP 5.6.39-1+ubuntu14.04.1+deb.sury.org+1 (命令行)
版权所有 (c) 1997-2016 PHP 集团
Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies
    使用 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,Zend Technologies

没有变化!我很困惑。有人能提供任何线索/提示吗?我宁愿不删除 PHP 5.6 并重新安装它。

答案1

您收到的消息才不是缺少的状态/usr/lib/php/20131226/xsl.so,正如您所想的那样。它表明它尝试加载的库libesxlt.so.0缺失。

在 Ubuntu 14.04 中,这个库位于名为 的包中(很奇怪)libxslt1.1。安装此包将允许您加载 PHP 扩展。

答案2

解决了!线索在 PHP 站点,XSL 配置:

PHP 5 默认包含 XSL 扩展,可以通过在配置行中添加参数 --with-xsl[=DIR] 来启用(DIR 是 libxslt 安装目录)。

在目录 /etc/php/5.6/apache2/conf.d 和 /etc/php/5.6/cli/conf.d 中,我创建了一个目录 do-not-run。我将文件 20-xsl.ini 移动到相关的 do-not-run 目录,然后再次尝试 php -v。

mike@wilma:/etc/php/5.6/apache2/conf.d$ php -v
PHP 5.6.39-1+ubuntu14.04.1+deb.sury.org+1 (命令行)
版权所有 (c) 1997-2016 PHP 集团
Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies
    使用 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,Zend Technologies

重新加载 Apache2 服务器后,页面仍在提供。我希望这能帮助其他人,并节省我花在解决这个问题上的一两天时间。

相关内容