在nginx/php-cgi上试试最简单的mogileFS的php模块上传操作,总是报502的错误,查看php-fpm的日志发现提示undefined symbol: ne_set_connect_timeout错误,ne_set_connect_timeout未定义。
查看php的mogilefs扩展到源码mogilefs.c源码发现。该扩展引用了:
#include <ne_socket.h>
#include <ne_session.h>
#include <ne_utils.h>
#include <ne_auth.h>
#include <ne_basic.h>
这几个是neon的开发库,执行命令neon-config –cflags查看开发库文件的所在目录。搜寻这几个文件都没有发现有定义ne_set_connect_timeout。因此可以确定为neon的版本库过低,Centos5.3默认安装的是neon-0.25.5。
到neon下载最新的 http://www.webdav.org/neon/neon-0.29.6.tar.gz
编译安装后,可以看见ne_set_connect_timeout定义在ne_session.h,但是syslog仍然报错如下
May 7 10:20:31 localhost php-cgi: PHP Warning: PHP Startup: Unable to load dynamic library ‘/data/app/php-cgi/lib/php/extensions/no-debug-non-zts-20060613/mogilefs.so’ – libneon.so.25: cannot open shared object file: No such file or directory in Unknown on line 0
find了一下的确没有libneon.so文件,看了一下neon的configure参数,默认是不编译共享库的,须带这个参数编译so文件
# ./configure –enable-shared
# make & make install
然后重新编译mogilefs,问题消失,可以上传了。
测试脚本:
<?php if($_POST["btn1"]=="upload"){ $client = new MogileFs(); $client->connect('27.17.28.133', 7777, 'test1'); $client->put($_FILES["upfile"]["tmp_name"], $_FILES["upfile"]['name'], "class1"); var_dump($_FILES); } ?>