当前位置: 首页 > PHP > linux下php远程连接sqlserver,并从sccm抓取信息

linux下php远程连接sqlserver,并从sccm抓取信息

  • 分类:PHP
  • 本文标签: sqlserver sccm
  • 发布时间:2015-12-23 13:37:55
  • 作者:Ferman
  • 查看数: 227

部门有这么一个需求,需要远程连接sqlserver数据库,从而从sccm(System Center Configuration Manager)软系统中心配置管理器中抓取必要的信息以呈现给it人员。有两个点比较困难:

①linux下php远程连接sqlserver

②从sccm一千多张表中筛选出有用信息

首先解决第一个问题:

linux下php远程连接sqlserver(php版本 5.4+)

因为php跟mysql是黄金组合。但是在linux下的php与远程的sqlserver连接就不是那么容易。我在网上找了很多相关文章,大都是坑,会浪费很多时间。我写这篇文章,一是为了笔记。二是可以节省大家的时间

要连接sqlserver首先要安装FreeTDS,FreeTDS是一个程序库,可以利用它的API来实现在linux下访问微软的sqlserver。

现在FreeTDS最好从官网下载最新版本的

ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz

也可以从这里下载

http://pan.baidu.com/s/1gdTvQWr

$ wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
$ tar -zxvf freetds-patched.tar.gz 
$ cd freetds-0.95.75/
$ ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib

解释一下这里为什么要用7.3,网上关于7.1还是7.3的说的五花八门。原因就是有很多文章都是很久以前的。其实就一句话:FreeTDS-0.91的用7.1 FreeTDS-0.95的用7.3

$ make && make install

配置FreeTDS

$ cd ..
$ echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
$ ldconfig

验证一下版本:出现如图所示说明你安装成功了

$ /usr/local/freetds/bin/tsql -C

 

安装成功后就可以连接sqlserver了,测试一下,如图所示

$ /usr/local/freetds/bin/tsql -H 172.30.223.34 -p 1433 -U xxx -P xxx



成功连接以后,就可以安装php连接sqlserver的扩展了。

可以是mssql也可以是pdo_dblib,两者任选其一。我用pdo的方式。

推荐尽量使用pdo的方式,速度和安全上都有优势。

如果你还有你当年安装php时的源码包最好,如果没有的话就去官方下载一下,官方地址http://php.net/releases/

下载前先看看自己的php版本 

$ php --version

下载对应的包,下载后就保存吧以后留着备用。

我的php版本是5.4.26那么

$ wget -O php-5.4.26.tar.gz http://cn2.php.net/get/php-5.4.26.tar.gz/from/this/mirror
$ tar -zxvf php-5.4.26.tar.gz 
$ cd php-5.4.26/ext/pdo_dblib/
$ locate phpize   #作用是看看phpize在哪
$ /usr/local/php/bin/phpize
$ locate php-config  #再看看自己的php-config在哪
$ ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-dblib=/usr/local/freetds/
$ make && make install

安装成功后在php.ini中添加 pdo_dblib.so

$ locate php.ini
$ vim /usr/local/php/lib/php.ini

添加 extension ="pdo_dblib.so"

直接 php -m 就可以看到pdo_dblib扩展如图:


如果要在phpinfo看到,那么重启php-fpm即可,几种重启方式见文章:重启php-fpm的几种方法(安装php扩展后需要重启)

如果重启不正确会报错的(如果报错了,php -m也不会看到的,所以还是先重启为好)。

我在php.ini里增加 pdo_dblib.so后报错:NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/pdo_dblib.so' - /usr/lib/php/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

然后谷歌...so我将pdo_dblib.so放在了pdo.ini里面。就成功了。原因是pdo_dblib是pdo的子模块要在加载pdo后加载。

最后用pdo连接sqlserver

与连接mysql只有一点不同,就是在new PDO时的dsn。mysql是mysql:host=xxx,而dblib连接sqlserver就是dblib:host=xxx,如图(一个是dblib一个是mysql):


这样我的第一个问题就解决了。


再解决第二个问题

从sccm一千多张表中筛选出有用信息

        其实第二个问题才是比较头疼的,倒是没有什么难度,但是就是繁琐。我和同事一块找数据。sccm里面有1000多张表,而且表的名字很形象给你的感觉都是有用似的,我们翻了几张表里面有很多空表,显然一张一张的翻是不现实的。但是用Navicat for SQLServer这款软件可以看每张表的数据大小。然后只需要去看大于某个值的表即可。即便这样,工作量还是很大,最烦人的是都是重复的工作。也可以在官网上找到相关的信息https://technet.microsoft.com/en-us/library/dn581963.aspx但是英文一定要过关。我试着看了看,这些官网的描述有很多都是不准确的。

        我把我们找到的一些表信息列出来,查了很多网上根本就没有这方面的,如果你正在找这些,恰好又正在看这篇文章,你就有福了

1、用户系统信息表,machineId,CPUType,上次登陆时间,PC名称,根据这张表可以查到每个用户的machineid,这个machineid很重要,在以下的表中都会用到

Services_DATA

2、用户安装的软件信息表--软件名、安装日期、发布者、版本等

Add_Remove_Programs_DATA

3、设备显示器相关信息--类型、名称、分辨率等

Video_Controller_DATA 

4、USB接口信息

USB_Controller_DATA 

5、设备IP地址

System_IP_Address_ARR 

6、设备驱动信息

System_Devices_DATA 

7、音频信息

Sound_Devices_DATA 

8、服务列表--名称、exe路径、自启方式、状态等

Services_DATA 

9、用户打开每款软件的时间--目录、exe文件、软件名称、版本、公司、上次使用时间等

RecentlyUsedApps_DATA 

10、电源策略--用电池 值=》结果  不用电池值=》结果 名称

POWER_MANAGEMENT_SETTINGS_DATA 

11、处理器信息--最大速度、几位操作系统、处理器名称、核心数、数量等

Processor_DATA 

12、硬盘信息--描述、盘符、大小等

Disk_DATA 

13、MAC地址

System_MAC_Addres_ARR 

14、操作系统信息 版本、安装时间、启动时间、内存信息等等

Operating_System_DATA 

15、获取计算机每天使用情况 开机总时间、亮屏时间、active时间

POWER_MANAGEMENT_DAY_DATA 


转载时请以 超链接的形式 注明:转自Ferman

                  

About me