首页 > php框架

Linux 下 PHP 连接 MS SQLServer 的办法

提出问题 前几天做了一个非常奇怪的项目,我公司开发了一套基于中国联通SGIP协议的SP端短消息服务软件,提供联通130短信服务。这套系统是Windows 2000下的,数据库采用的是微软SQLServer2000,并且已经正常运行了一段时间。而最近由于要在WEB上提供短消息用户的一些信息,就需要从WEB上读写SQLServer数据库,本来SQLServer数据库的最佳搭档应该是微软IIS ASP服务端脚本,但我公司一向认为IIS+ASP的稳定性和安全性都不尽如意,希望能够在Linux下用PHP脚本读写SQLServer。
 分析问题 本来PHP脚本读写SQLServer是没有什么问题的,在Apache for windows和Windows IIS下可以工作的很好,一般可以通过ODBC或SQLServer Client连接,这都是Windows下面现成的。但是在Linux下面没有现成的ODBC和SQLServer Client,需要我们自己安装。
 解决问题 一、相关软件 freetds 来源:ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/freetds-0.53.tgz 这个软件能够用Linux和Unix连接MS SQLServer和Sybase数据库。
 二、安装配置步骤 第一步:编译安装freetds: 得到freetds-0.53.tgz后 cp freetds-0.53.tgz /tmp/. (拷贝freetds包到/tmp目录) cd /tmp (进入目录) tar zxvf freetds-0.53.tgz (解压) cd freetds-0.53 (进入解压后目录) ./configure –prefix=/usr/local/freetds --with-tdsver=7.0 gmake (生成Makefile,我试验过,make也可以) gmake install (安装) 关于上面configure我想说一下,--prefix=/usr/local/freetds是指安装到/usr/local/freetds这个目录中,--with-tdsver=7.0是指安装tds 7.0版本(最开是我没有加这个编译参数,结果按照默认编译为5.0。5.0连接数据库的端口是4000,不是SQLServer的1433) 第二步:重新编译PHP4 ./configure [--with-apxs --with-mysql...] --with-sybase=/usr/local/freetds(请注意是sybase) make make install 第三步:配置freetds vi /usr/local/freetds/etc/freetds.conf 具体配置见该文件中的说明 例: (典型配置) [sqlserver] host = sql_server_name_or_host_ip (你的SQLServer机器名字或者IP地址) port = 1433 tds version = 7.0 在这个配置文件中可以配置Windows域登陆或者SQLServer账号登陆两种方式 第四步:配置php.ini文件 找到 ;extension=mssql70.so 将注释;去掉成 extension=mssql70.so 第五步:在php中建立数据库连接 $link=mssql_connect("sqlserver",$your_username,$your_password) or die (“can’t Connect to Database”); echo $link; 在浏览器中运行上面脚本, 如果你得到一个link号那么恭喜,你已经配置好了,如果出现Call to undefined function: mssql_connect() 那说明仔细看上面的安装配置过程看你哪一步没有对。
 注意:sqlserver名称是在/usr/local/freetds/etc/freetds.conf中定义的host参数,如果你写的IP地址,就是IP地址。
 其他数据库操作参考相关mssql函数 注意,在sql语句中不支持中文!!! 第六步:调试 如果出现不能连接,请在freetds配置文件中找到;dump file = /tmp/freetds.log这一行,注释掉前面的分号,再执行一下测试脚本,察看/tmp/freetds.log文件,它可以告诉你很多出错的信息帮助你排除问题。

阅读全文

第七节--类的静态成员 -- Classes and Objects in PHP5 [7]

第七节--类的静态成员
类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.
静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量
我们在下例中使用了一个静态属性Counter::$count. 它属于Counter类,而不属于任何Counter的实例.你不能用this来引用它,但可以用self或其它有效的命名表达. 在例子中,getCount方法返回self::$count,而不是Counter::$count.
静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是否是什么.
在6.3例中,getCount是一个普通的方法,用->来调用. PHP建立一个this变量,尽管方法没有使用到.但是,getCount不属于任何对象.在有些情况下,我们甚至希望在不存在有效的对象时调用它,那么就应该使用静态方法. PHP将不在静态方法内部建立this变量,即使你从一个对象中调用它们.
例子6.7由6.3改变getCount为静态方法而来. Static关键字不能阻止一个实例用->运算符来调用getCount,但PHP将不在方法内部建立this变量.如果你使用this->来调用,将会出错.
//6.3例指第四节--构造函数和析构函数中的例子(参看前文),通过两个例子的比较,你可以很好掌握
//static方法与普通方法之间的区别.
你可以写一个方法通过判断this是否建立来显示是否它被静态地或者非静态地调用. 当然,如果你用了static 关键字,不管它怎样被调用,这个方法总是静态的.
你的类也可以定义常量属性,不需要使用public static,只需要用const关键字即可. 常量属性总是静态的.它们是类的属性,而不是实例化该类的对象的属性.
Listing 6.7 Static members
<?php
     class Counter
     {
         private static $count = 0;
         const VERSION = 2.0;
         function __construct()
         {
        self::$count++;

阅读全文

用php和imagemagick来处理图片文件的上传和缩放处理(转贴)

用php和imagemagick来处理图片文件的上传和缩放处理
php处理文件的上传是很简便的,但是如果要对上传的图片进行缩放处理的话,虽说能用GD来做,但是
要进行比较繁琐的处理。ImageMagick是一个图像处理包,一般的Linux软件包中都会有的。它包含了许
多处理图像的工具,它可以进行图像文件格式的转化还可以对图像进行各种处理,其中我们将用到它的
图像缩放功能。这个通过它的软件包中的工具convert来实现,这样来调用
        convert -geometry 宽x高 源文件 缩放后的文件
        
请在当前目录下建立一个images的目录,并且能让web执行用户可写,这个目录用来存放上载后的图片和
缩放的图片。
底下是一个简单小例子,包括图片上传和处理,在RedHat6.0+php3.0.12下测试通过。
uploadform.html:文件上传表单
〈HTML>
〈HEAD>
〈TITLE>选择文件〈/TITLE>
〈/HEAD>
〈BODY ALIGN="CENTER">
〈FORM ENCTYPE="multipart/form-data" ACTION="upload.php3" METHOD=POST>
选择图片文件: 〈INPUT NAME="image" TYPE="file">
〈INPUT TYPE="submit" VALUE="Send File">
〈/FORM>
〈/BODY>
〈/HTML>
upload.php3:处理上传后的图片文件
〈html>
〈head>
〈title>处理〈/title>
〈/head>
〈body>
〈?
$flag = "true";
if(isset($image) && $image &&
        ($image_type = "image/gif" || $image_type = "image/png"
           || $image_type = "image/pjpeg")){    //判断上载文件的格式等
        $dest_image = "./images/".$image_name;
        if(@copy($image,$dest_image)){    //拷贝上载文件到images目录下
        $small_image = "./images/small".$image_name;

阅读全文

让PHP开发者事半功倍的十大技巧

【php100译文】如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择。同样的道理也适用于PHP编程,尽管这样的类比听起来有一些古怪。我们经常听到有人试图用一个周末多点的时间来学会PHP,但是请恕我直言,这是学习这门编程语言的一种非常糟糕的方式。

阅读全文

详解Zend Debugger安装全过程

调试技术是我们编程中不可或缺的重要部分,调试器是每个IDE环境都必备的组件。既然如此,Zend Studio的集成环境拥有一个调试器也就是理所当然的事情了,但是,该调试器在配置使用起来,其显示出来的强劲功能一定会让你惊叹不已!

阅读全文

PHP设计模式漫谈之代理模式

【php100独家特稿】设计模式( Design Pattern)是从建筑设计领域引入到计算机科学的。设计模式是对软件设计中普遍存在(且反复出现)的各种问题,所提出的解决方案。设计模式并不直接用来完成程序码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。

阅读全文

Facebook揭秘HipHop项目 PHP程序大提速

编程效率高是PHP语言最大的特点,但是作为脚本语言,一直存在着CPU和内存使用效率不高的问题,直到HipHop for PHP的出现。Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成,目的是旨在加速和优化PHP。

阅读全文

浅析PHP创建ZIP档案文件技巧

在开发Web应用程序时,很有可能您会遇到不同格式的文件——CSV数据、密码文件、XML编码的内容和不同形式的二进制的数据。您的PHP脚本将需要频繁地和这些文件交互,从中读取数据和将数据写入其中。由于有这么些格式的文件要处理,所以您就不要意外PHP中有那么多种类型的内置函数和外部的库,用来连接和使用几乎所有您能说出名称的文件格式。

阅读全文