公司老大下来了命令,打算把公司所有的客户数据集中起来。进行小规模的数据挖掘。
我们公司IT部门仅作为公司内部业务支撑,公司的主营业务还是销售(软件研发培训销售)。公司也是成长型公司,所以这么多年,所有的系统都是分散式,何为分散式,就是根据公司的成长历程,有N多的web小系统,小项目,分管不同的销售业务。
所以客户数据冗余以及分散是弊端,数据冗余可以忍受。但是客户数据过于分散,不利于邮件以及短信营销等等。
不说背景了,谈解决方法。
其实就是从mysql,mssql同步到mysql的过程。中间有一步骤,就是利用php,访问远端mssql,把客户数据同步到mysql下。
公司的服务器除了购买的OA是mssql,其他的系统为自开发,均基于Linux环境。
网上linux下,php通过freetds连接SqlServer的文章,超级不靠谱。下面说下我实施的情况。
环境CentOS+PHP+Freetds+mssql的php扩展。
首先下载Freetds,我用的是0.92版本,稳定版为0.91看个人选择
下载地址:ftp://ftp.freetds.org/pub/freetds/stable/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #编译安装freetds 参数下面解释 cd freetds-0.92.79 ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 make make install #如果需要mssql连接方法,安装mssql.so cd php_source/ext/mssql/ phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds make make install #pdo_dblib连接方式 cd php_source/ext/pdo_dblib/ phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo_dblib=/usr/local/freetds make make install |
freetds关键步骤:
看过官网的说明–with-tdsver=7.1为版本,7.1支持sql2000,7.2支持sql2005,不存在什么8.0云云。
安装成功后,需要修改配置文件/usr/local/freetds/etc/freetds.conf
1 2 3 4 | [SERVER-NAME] //服务器名称 host = 192.168.1.10 //服务器IP port = 1433 tds version = 7.1 |
测试命令:/usr/local/freetds/bin/tsql -C
连接命令:/usr/local/freetds/bin/tsql -S 192.168.1.10 1433 -U 用户名 -P 密码 -D 数据库
如果进入>则,可以操作,可以quit退出
这里要注意的两点,一个是版本,一个是配置文件
如果出现中文乱码,修改php.ini种的msmql的编码选项。搜索mssql.即可。
其他:
如果编译按章pdo相关报错config.m4相关,主要问题是自带autoconf版本过高。
报错:
1 2 3 4 5 6 7 8 9 10 | config.m4:179: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from... aclocal.m4:2741: PHP_CHECK_PDO_INCLUDES is expanded from... config.m4:179: the top level config.m4:179: warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must contain _cv_ to be cached ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from... ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from... aclocal.m4:2741: PHP_CHECK_PDO_INCLUDES is expanded from... config.m4:179: the top level |
解决方法:
autoconf版本太高造成的,我的办法是安装autoconf 2.13
Redhat,Centos类系统运行如下命令
yum install autoconf213.noarch
export PHP_AUTOCONF=/usr/bin/autoconf-2.13
export PHP_AUTOHEADER=/usr/bin/autoheader-2.13
64位环境下
configure: error: libjpeg.(a|so) not found.
或者 configure: error: *.(a|so) not found.
这些库已经安装了但还报错
在configure 时加参数 –with-libdir=lib64