我们有一个内部网站点,它有多个PHP脚本,它们开始使用curl_init()。前几天有一个ArchLinux的更新,它与cURL(glibc)的一些依赖性相混淆。这导致curl模块无法在PHP中正确加载,即extension_loaded('curl')失败。
我从Apache / var / http / error_log中得到此错误:
PHP警告:PHP启动:无法加载动态库 '/usr/lib/php/modules/curl.so' - /lib/libc.so.6:版本`GLIBC_2.16' 在第0行的未知中未找到(/usr/lib/libcurl.so.4所需)
ldd /usr/lib/libcurl.so.4
linux-gate.so.1 (0xb7770000)
libssh2.so.1 => /lib/libssh2.so.1 (0xb76de000)
librt.so.1 => /lib/librt.so.1 (0xb76d5000)
libssl.so.1.0.0 => /lib/libssl.so.1.0.0 (0xb7673000)
libcrypto.so.1.0.0 => /lib/libcrypto.so.1.0.0 (0xb74ad000)
libz.so.1 => /lib/libz.so.1 (0xb7495000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb747a000)
libc.so.6 => /lib/libc.so.6 (0xb72d4000)
libdl.so.2 => /lib/libdl.so.2 (0xb72cf000)
/lib/ld-linux.so.2 (0xb7771000)
在我的发行版中,他们所做的更改是/ lib现在是/ usr / lib的符号链接:http://www.archlinux.org/news/the-lib-directory-becomes-a-symlink/
修改的
我尝试了DaveRandom在这里建议的......
[root http]# php -r " echo (file_exists('/usr/lib/php/modules/curl.so')) ? 'It exists.' : 'It doesn\'t e.'; "
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/json.so' - /usr/lib/php/modules/json.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: file_exists(): open_basedir restriction in effect. File(/usr/lib/php/modules/curl.so) is not within the allowed path(s): (/srv/http/:/home/:/tmp/:/usr/share/pear/) in Command line code on line 1
Warning: file_exists(): open_basedir restriction in effect. File(/usr/lib/php/modules/curl.so) is not within the allowed path(s): (/srv/http/:/home/:/tmp/:/usr/share/pear/) in Command line code on line 1
It doesn't exist.
它失败了,因为它不允许通过ini访问该路径,所以我重新配置它并再次尝试...
[root http]# php -r " echo (file_exists('/usr/lib/php/modules/curl.so')) ? 'It exists.' : 'It doesn\'t exist.'; "
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/json.so' - /usr/lib/php/modules/json.so: cannot open shared object file: No such file or directory in Unknown on line 0
It exists.
奇怪的是,JSON实际上正在运作......
[root m]# php -r " echo (extension_loaded('json')) ? 'It is loaded' : 'It is not loaded'; "
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/json.so' - /usr/lib/php/modules/json.so: cannot open shared object file: No such file or directory in Unknown on line 0
It is loaded
我想问题是,什么会导致cURL在命令行上工作,模块文件在那里,但无法通过Apache PHP加载扩展。
然后另一方面,什么会导致JSON发出警告,但仍然实际加载?
有谁知道这可能是什么?
由于
答案 0 :(得分:4)
我认为这个问题对于ArchLinux来说是独一无二的,但这会解决它(如果你是像我这样的ArchLinux用户)。
mkdir /tmp/pacman_build
cd /tmp/pacman_build
cp /var/cache/pacman/pkg/curl-7.26.0-1-`uname -m`.pkg.tar.xz .
tar -xJf curl-7.26.0-1-`uname -m`.pkg.tar.xz
LD_PRELOAD=/tmp/pacman_build/usr/lib/libcurl.so pacman -U /var/cache/pacman/pkg/curl-7.26.0-1-`uname -m`.pkg.tar.xz
请注意,这要求您最近在软件包管理器缓存中安装了curl版本7.26.0-1。如果失败,请检查/ var / cache / pacman / pkg是否有另一个版本的curl。如果你没有,那么你必须找到一个。