最新消息:xilo的博客2016重新上线,感谢新老朋友的热情关注。

Linux PHP FreeTDS连接SQLServer

未分类 xilo 5013浏览 0评论

公司老大下来了命令,打算把公司所有的客户数据集中起来。进行小规模的数据挖掘。
我们公司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

转载请注明:xilo blog » Linux PHP FreeTDS连接SQLServer

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址