每当 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 服务器后,页面仍在提供。我希望这能帮助其他人,并节省我花在解决这个问题上的一两天时间。