接上篇讲述如何在windows下配置PHP操作MS SQL SERVER。
Microsoft Drivers for PHP for SQL Server(点此下载)是微软官方出的,经过实际测试,这个方案是最完美的也是最简单的。
环境要求:
1.任何windows操作系统
2.PHP 5.2.4 , or later.
3.Microsoft SQL Server 2008 R2 Native Client(点此下载)
4.Any edition of SQL Server 2005 or later.
配置方法:
1.下载后,点击执行SQLSRV20.EXE解压缩到任意目录

2.如上图,选择对应版本的dll文件复制到PHP安装目录的EXT目录下(不知道php版本的,可以运行一下phpinfo函数查看)
3.修改php.ini,增加一条extension=你选择的dll,我选择的是php_sqlsrv_53_nts_vc9.dll,因此我的php.ini里增加的便是extension=php_sqlsrv_53_nts_vc9.dll
4.重启web服务器,大功告成。
具体的调用方法可以查看SQLSRV_Help.chm
经过实际使用,不管是一般的SQL语句还是存储过程,都能在PHP下得到很好的操作
windows下PHP自带的php_mssql.dll在配置的时候容易出现各种各样的错误。这里我要推荐另外一个扩展——php_dblib.dll
1.首先下载
http://docs.moodle.org/20/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows
网站提供四个下载,分别是PHP 5.2.x (vc6) Thread Safe、 PHP 5.2.x (vc6) Non Thread Safe、PHP 5.3.x (vc9) Thread Safe、PHP 5.3.x (vc9) Non Thread Safe,找到符合自己要求的(phpinfo就能查到)下载
2.下载后解压缩,将php_dblib.dll复制到php环境的ext目录下
3.php.ini中增加一句extension=php_dblib.dll
4.重启web服务器(apache、iis、nginx等等)
$link = mssql_connect('localhost', 'db_user', 'db_password');
if(!$link) {
echo'Could not connect';
die('Could not connect: ' . mssql_error());
}
echo'Successful connection';
mssql_close($link);
?>
执行一下以上PHP代码——Successful connection,大功告成。
经测试,在windows2003和windows2008下,能很好的操作ms sql server 2005数据库。
补充:悲剧的是,在实际运行过程中,发现对存储过程支持的并不好。于是,又折腾了半天,找到了另外一个替代方案,下一篇文章再来讲这个替代方案。
花了点时间研究用dashcode开发mac osx的dashboard widget,并做了一个查询ip真实地址的widget。
外观如下:
实现的功能:
1.初次调用默认显示你的电脑所用的ip地址及真实地址
2.输入ip地址,即可查询真实地址
以下是技术要点:
1.dashcode自带的ui部件很cool,开发语言是大家都很熟悉的javascript
2.远端程序基于sae(sina app engine)的php开发
总体来讲,开发难度并不大,据说dashcode开发的应用可以直接移植到iphone中去,本人无iphone,暂不做移植了。
用mac osx的朋友可以下载玩玩看,下载地址请点此
晚上有个基于jqeury的翻屏js特效出了个古怪的问题——在IE7和FF下很正常,而使用IE6的朋友却说特效没出现,错误是翻屏特效的那个js函数未定义。想了无数办法都没解决,后来google到这篇文章才明白过来,js文件本身是gb2312的,而页面编码却是utf-8的,在修改js文件编码格式为utf-8以后,问题得以解决。
有些时候,不同的page我们需要呈现不同的外观样式,比如“关于我们”和“联系方式”,假如设计时所使用的外观不同,单一的page模板肯定是不足够使用的,这个时候就需要用到给page做模板了。
在模板目录中,我们新建一个about.php,在文件的开头,输入以下内容:
/*
Template Name:关于我们
*/
?>
然后在about.php中放入“关于我们”的页面代码。
再新建一个contact.php,在文件的开头,输入以下内容:
/*
Template Name:联系方式
*/
?>
然后在contact.php中放入“联系方式”的页面代码
进入管理后台,在编辑页面或新建页面时,页面的右下角会出现一个模板文件的可选项,选择对应的模板即可。
其实我一直都在等待Google App Engine推出对PHP语言的支持,但似乎这事儿遥遥无期,官方也没有明确的说法。
另外一个云计算平台Amazon S3,虽然支持PHP,但是出于对服务器在国外随时可能被墙的担心,我也没怎么去试用。
令人高兴的是,Sina App Engine正在紧张的开发中,继前段时间发放了少部分的邀请码以外,昨日又推出了体验账户的申请。体验帐号拥有正式帐号的全部功能,但是体验帐号会在注册第二天临晨5 点被回收,该帐号下的所有代码和数据将被清空。体验帐号可以随时申请,实时开通,每天共可申请100个。
于是,我昨天便申请了一个体验账户,以下是一些体验总结。
1.一个账户可以创建多个SAE应用,我只创建了一个“查IP”,提供sina微博查IP机器人服务。
2.对单个应用有独立的管理界面,点击自己的应用进入管理,左侧有一堆管理功能。
3.一个应用可以由多人共同参与开发,对于团队开发挺不错的。
4.从菜单可以看出,SAE内置提供Mysql、MemCache、Storage、Cron Jobs、Image、Fetch Url、Mail的支持,除了少部分被禁用的PHP函数以外,PHP的大部分函数都能正常使用。而我的查IP应用中使用到的SAE内置服务就有Mysql、MemCache和Cron Jobs。有意思的是,我发现ereg这个函数并不在禁用列表中,但事实上SAE却不许使用这个函数。而外部服务则有SinaS3,目前还处于alpha阶段。
5.SAE对httpd、Mysql、Memcache、Fetch URL、数据存储、图片处理有配额限制,基本上是以日为单位的。比如,httpd的配额限制为:请求次数每日 10000000 次、流入带宽 每日500000 KB、流出带宽每日1000000 KB、CPU时间每日10800000 MS,Mysql的配额限制为查询次数每日1000000 次、写入Mysql的数据量每日1000000 KB、从Mysql读出的数据量每日1000000 KB、CPU时间每日10800000 MS、数据存储总量(非每日)为195312.5 KB。基于SAE开发的应用一定要注意这些限制。我的查IP应用由于现在使用的人数并不多,因此远远低于这些配额限制。
总体来说,SAE还不错,尤其是对于习惯PHP开发的人员来说,程序的移植也比较容易,希望能尽快推出正式版本。
PS:由于我用体验账户发布了这个查IP应用而获得了一个正式账户的邀请码,等体验账户到期以后我就能使用正式账户了,哈哈,感谢Easy。
我一直都觉得如果学习PHP,最好的范例就是discuz和wordpress,无论是架构还是语法规范,都有其可取之处。
从这里看到一个不错的项目正在孕育中——BackPress,是WordPress、BBPress程序的核心部分。
官方对这个项目的介绍为:“Core PHP libraries for your web applications.”但我觉得这个更像是一个开发框架,功能列表如下:
- Logging (via bbPress’ logging library) to file/database/other. Supports levels (notice, warn, fatal).
- User Roles management (generally used for access control to portions of your application).
- Schema parser (for comparing schema files to current/live databases).
- User management (including user meta data and DB schema to support it) for managing core user information and arbitrary other user-related data.
- Database Abstraction (including using multiple database servers, clusters and data centers)
- XML-RPC Server and Client operations for interfacing with other systems.
- Mail sending (via SMTP and sendmail, supports attachments)
- Password Hashing/Crypto
- AJAX Responses (standardized XML-based response mechanism for AJAX requests)
- User Authentication using built in crypto for passwords, plus secure cookie management out of the box
- JavaScript and CSS inclusion and dependencies management, including internationalization options for JS strings
- Error handling via objects which can report multiple errors at a time
- Full HTTP library (supporting core PHP HTTP operations, cURL and raw sockets for widest compatibility available. Includes cookie send/receive support)
- Object caching, including using memcached as a backend for semi-persistent storage
- Arbitrary taxonomy management (tagging, categories, other classification systems) with generic DB schema
- Generic options management for handling application-wide options/settings
- Compatibility functions to provide support for useful functionality which is not available in all versions of PHP
- A variety of core helpers for advanced string manipulation, simpler HTTP transactions, security (nonces etc), timezones and more
- Lots of formatting functions for handling strings of all kinds (HTML, typographic features, sanitization, etc)
- KSES: Full security filtering for HTML content
- Complete plugin API, provided via the ability to add “actions” and “filters” to your application and allow any plugin to hook into those places to modify output/perform actions.
- Shortcode API allowing for [bbcode]-style input from a user to be translated using arbitrary rules
- Pseudo-cron functionality, allowing you to fire off events within your application, triggered by visits/page-loads to approximate cron-type functionality
看看,用这些功能库能减少PHP WEB应用中不少的重复工作量(这些重复的工作量也是导致我无心继续开发自己的CMS和项目管理软件的主要原因)。
尽管目前该项目还没有正式版,但的确是一个值得期待的项目,不是吗?
最近在研究openx2.8.2,作为国外老牌强劲的开源广告系统,还是很不错的,目前发现两点问题:
1.管理权限分配,一直没研究出来怎么去进行管理权限分配
2.官方自带的简体中文包存在大量乱码,稍后我会放一个我自己做的简体中文包出来
这几天一直在琢磨这个问题,今天一次会上在白板上粗略了画了一下我的想法,会后抽了点时间自己整理了一下。
基本上这个架构也是按照标准的三层结构来设计的,如下图(点击看大图):
传统web程序的开发模式基本只有2层:应用层和数据层,有理无理就直接到数据库里去操作(大部分web编程书籍都是这么教的)。
而引入接口层以后,只有对数据的添加、删除和修改是通过接口去数据库里操作,select操作则增加了一个数据缓存,可以大大减轻数据库的压力,而对于一般的大中型网站而言,恐怕更多的访问压力是来自select,而不是对数据的添加、删除和修改的交互性操作。原本,html静态化是解决办法之一,但这个解决办法面临的问题是一旦页面有所变更,则需要全部重新静态化,对于数据量较大的大中型网站,无异是一场噩梦——动静结合,反而能恰到好处。
接口身份验证:采用OAuth,可以做成通用的平台
接口规则:负责将接口方法函数按照select、update、insert、delete进行分类
接口数据缓存:设想是生成数据的XML静态文件,应用层只需要解析这些XML静态文件即可,而接口操作则是输出XML的字符串,可以做成通用平台。引入缓存数据周期,则可以保证不同的应用对于数据本身的实时性的要求得以满足。
接口操作:即实现接口方法函数,根据方法函数到数据库里进行操作,要么输出字符串为XML的结果集,要么输出字符串为XML的操作状态码以告知应用层update、insert、delete操作状态,譬如操作成功、无权限操作等等
应用层:根据业务逻辑的需要调用合适的接口去实现业务逻辑
原则上这样的设计,一方面能平衡网站访问量大带来的程序压力,一方面也能做到应用层与数据层无关。应用层可以采用任何一种开发语言(.net、PHP、java等),而数据库也可以采用任何一种数据库(MS SQL SERVER、MYSQL、ORACLE),对服务器操作系统而言,也能做到WINDOWS+LINUX的混合架构,发挥两种操作系统各自的优势。
时间有限,此图还有待完善,譬如可以结合网站的硬件架构。
众所周知,采用ajax分页,会对SEO不利,因为数据都是从远程采用ajax调用的,而spider未必能找到这些数据。
找了一会,发现jQuery Quick Pagination这款分页插件不错,它的分页原理是对页面源码中已有的html标记进行分页。
比如可以采用这款插件,对页面中连续20个<li></li>标记进行每页5个<li></li>标记的分页。这样所有的数据其实都在html代码中,只是前端表现形式为ajax的分页。
demo:http://projects.allmarkedup.com/jquery_quick_paginate/demo.html
插件主页:http://projects.allmarkedup.com/jquery_quick_paginate/index.php



