故障现象:
在 Windows Server 2003+IIS6.0 环境下,原先配置好的 PHP5.0.4
可以正常工作。但在同一台机器上,Apache2.2.8+PHP5.2.5下正常运行的代码,在 IIS 下不能正确执行 exec()
函数。比如,exec(’cd’,$arr,$ret) 语句,其执行结果,$arr 数组的值应该是包含该语句的 php 文件做在的
Windows 路径,但结果却是“C:\Windows”文件夹。并且不能正确执行其他外部 exe 程序。
诊断:
IIS 配置里,已经开放 isapi 扩展允许。
Windows\system32\cmd.exe 已经加过 IUSR_… 账户权限。
要执行的外部 exe 程序,已经拷贝到 Windows\system32 文件夹下,也已经加过 IUSR_… 账户权限。
网站所在的文件夹,已经赋予 IUSR_… 账户权限。
怀疑是 PHP 版本过低,或哪里权限不阅读全文>
发表于 @ 2009年07月04日 20:21:00|举报收藏
无限分类谈得太多了,无非三种方法“路径”“左右值”“父id”,网上的讨论得比较多,具体实现就不再次讨论了。三种方法,各有优缺点。
“父id”的优点在于实现简单和移动节点简单,缺点在于查询麻烦。
我想,对于“父id”这种无限分类的查询,多数人都是使用递归来实现了,性能自然不用说,分成n条sql去查询,对mysql的造成不少负载。
如果,仔细考虑下个递归过程,完全可以一次把数据查询出来,然后在程序里循环生成。
每次递归无非是查询一下当前id是否有子节点,然后子节点又递归下去,,也就是只要解决查询某个id是否有子节点就可以完成了。
解决这个问题的方法很简单,再配合hash table来查询,键是parent_id值是分类集合,用php实现起来很简单。
假如,有分类如下
system --> linux
system --> unix
system --> windows
system -->阅读全文>
发表于 @ 2009年06月26日 13:15:00|举报收藏
开发黄金组合LAMP(Linux+Apache+MySQL+PHP)已经流行了好几年。即LAMP之后,PHP社区最近开始推广起GLAMMP组合。这个组合在LAMP之上又加进来一个G和一个M。这新加进来的两个字母各是什么意思呢?
GGearman
Gearman是BradFitzpatrick的一个作品,用Perl写的任务调度程序,提供一个服务器端和多种语言的客户端接口,包括C/Perl/Python/Ruby等。
gearman可以用在各个方面,最简单就是在不同语言之间架起一座桥梁。比如你可能希望你的php程序调用一个c函数,那么用gearman就可以实现
了,当然了实际你可以通过写一个php扩展来实现同样的工作,但是比如你要php调用java,perl,或者python那么,gearman就非常棒
了。
gearman另一个应用方面是负载分担,你可以将worker放在不同的服务器(或者一些列服务器)上,比如你的php程序需要图片转换,但是不希望本
地服务器有太多的这阅读全文>
发表于 @ 2009年05月25日 21:25:00|举报收藏
1、下载Oracle即时客户端程序包 — Basic: 运行 OCI、OCCI 和 JDBC-OCI 应用程序所需的所有文件
①、打开以下网址(本文以32位版为例):
(Linux 32位版)http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
(Linux 64位版)http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxx86_64soft.html
②、下载以下几个文件:
oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm
2、安装Oracl阅读全文>
发表于 @ 2009年04月29日 02:02:00|举报收藏
mysql_insert_id返回的是一个int。因为php的int是signed long(64位机器上是用63个位来保存数据),所以即使在64位机器上,当mysql使用unsigned bigint(64个位来保存数据)的时候,mysql_insert_id()还是有可能返回一个错误的值。
解决方法有很多。
1)使用mysql的内置函数。SELECT LAST_INSERT_ID()这条语句会返回当前会话里最后的一个auto_increment id。地球人都知道,用sql查询,返回的数据,都是以string保存的。所以这里不存在整型数值过大的问题。
2)使用PDO或者mysqli。PDO里类似的函数会返回一个string,而mysqli,则是根据结果的大小返回一个int或者string。前段时间还给mysqli提交了和这个问题有关的一个文档的bug(#47979)。
这个问题以前我还真没注意过,因为从来没遇到过使用auto_increment id的表能达到这么大的数据量。就算是在32位机器上,php的int的最大值也是2147483647阿(php -r ‘阅读全文>
发表于 @ 2009年04月29日 01:44:00|举报收藏
PHP没有中间件,导致了对很多麻烦。比如,对数据库的操作必须要链接数据库,然后做SQL操作。WEB程序直接操作数据库的方法,这样会带来很多人为因素的事故隐患,以及管理上的麻烦,尤其是对大型的网站应用来说。规范的模式应该是,WEB程序传递参数到一个服务程序上,由该服务程序进行判断并最终操作数据库或者其它数据文件,这样做到了明确权限控制,和业务类型集中管理。去年伴随着ICE的推出,PHP终于有了可以使用的中间件。在PHP的发展史上,应该是一个里程碑。
一、什么是中间件?
中间件是一种可复用软件。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
在中间件发展史上,有三款相当成功的中间件。RPC(Remote process call 远程过程调用),是SUN公司首推,目前在Solaris、Linux、BSD等操作系统下都属于在Kernel级支持的软件,支持TCP、UDP、UNIX-Socket等多种网络协议,大名鼎鼎的NFS就是依靠RPC开发而成的。W阅读全文>
发表于 @ 2009年04月18日 15:06:00|举报收藏
写在前面的话:PHP每次运行重建环境,这样的运行方式本身就决定了PHP没有传统意义上的单例。
单例模式(singleton)也被叫做单件模式。使用它的目的是为了确保某个类只有一个实例。因为它的实现方式很简单,所以多数模式书籍都把单例模式作为入门模式来介绍,可以说对很多模式爱好者来说,单例模式是他们最熟悉的设计模式。可惜这间接造成了单例模式使用的泛滥,以至于到了无所不在的地步,比如说,ZendFramework里连前端控制器都是单例的。那么,单例模式是邪恶的么?
下面看一个实际编程时很多人愿意采用的单例模式例子:
注意:正常的单例模式应该设置一个私有化的__construct,但是出于下文的需要,我省略的它,至于限制__clone的行为,因为我嫌它占地方,所以也没写,这两点你自己注意一下就好了,和文本讨论的问题关系不大。完整的例子可以参考:http://www.php.net/manual/en /language.oop5.patterns.php。
class Database
{
private static $instance;
阅读全文>
发表于 @ 2009年04月06日 02:00:00|举报收藏
飞信是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的,基于手机应用以及与Internet深度互通的即时通讯产品,可免费给好友发送短信。
1、下载中国移动飞信PC客户端软件(http://www.fetion.com.cn/downloads/pc.aspx),并注册开通飞信。注册成为飞信用户,下载飞信PC客户端、使用PC客户端基本功能,不收取费用。
2、通过PC客户端,邀请并添加免费短信接收方的手机号码(仅限中国移动)到您的飞信好友,该手机号需要通过通过PC客户端、或回复短信接受您的邀请;
3、通过 http://sms.api.bz/ 提供的 API 接口,即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。
飞信免费发短信API接口在线演示: http://sms.api.bz/
飞信免费发短信API接口调用方式(通过HTTP访问以下网址、支持GET和POST):
http://sms.api.bz/fetion.php?username=您的移动阅读全文>
发表于 @ 2009年04月06日 01:52:00|举报收藏
今天看到的一个小技巧。
原文:http://www.eb163.com/club/thread-1712-1-1.html
首先我们看一下php手册中关于删除cookie的说明
------以下引用php手册内容--------------
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。
下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除
例子
// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束阅读全文>
发表于 @ 2009年04月05日 03:31:00|举报收藏
对于一个网站其实很多时候都需要对动态的生成所使用的CSS/JS,其中主要是CSS/JS中所包含的一些URL,当然这些URL信息也可以使用相对路径来实现,但在一些情况下使用相对路径并不能解决这个难题。
按照Yahoo YSlow(http://developer.yahoo.com/yslow/help)的建议1,就是必须减少HTTP的请求,当然手动把所有代码合并是一种方法,但这种方法反而会带来两个更糟的问题,把所有CSS/JS都合并到一个文件中,当然不利于代码的阅读和管理。如果使用jQuery,因为不同的Plugin都是会放在不同的js文件中,和Yahoo YSlow的建议有较大的冲突,当然是用动态语言来合并这些js文件应该是个不错的idea。合并过程中还可以使用jsmin.php来进行js文件的压缩。
如想使用这个技术可参考以下的几篇说明:
1. Automatic merging and versioning of CSS/JS files with PHP
2. Adding JSMin to my CSS/JS merging scrip阅读全文>
发表于 @ 2009年03月13日 00:05:00|举报收藏
php-fpm文档中文翻译
原文链接:http://php-fpm.anight.org/
wiki:http://www.php-fpm.com/
什么是 FastCGI
FastCGI 是一个可伸缩、高速的在web server和脚本语言间通迅的接口。关于FastCGI技术的更多信息可以在官方网站和Wikipedia看到。
FastCGI 被许多脚本语言所支持,包括 php,如果用 --enable-fastcgi 选项编译的话。
多数流行的web server都支持 FastCGI。包括Apache(mod_fastcgi和mod_fcgid),Zeus,nginx和lighttpd。
FastCGI 的主要优点是把动态语言和 web server 分离开来。这种技术允许 web server 和动态语言运行在不同的主机上。这可以改进可扩展性和安全性而没有大的效率损失。
php-fpm 可以和任何支持外部 FastCGI 技术的 web server 一起使用。
php-fpm是做啥用的
很不幸,官方网站 php.net 阅读全文>
发表于 @ 2009年03月12日 23:46:00|举报收藏
一、开篇
在开始这个专题之前,先说一点题外话。大多数人学习编程语言的时候,首先关注的是这种语言的语法及其常用函数。我学习C,Java,Php等语言就是按照这样的方式开始的。一般情况下,这个阶段需要一个月左右的时间就会完全掌握,并能基本熟练地使用。对于已有经验的同学,可能时间更短。其实各种语言的语法和常用函数都差别不大,有很多相通的地方。如果您在学习一种编程语言的时候,拿一些真正的项目任务作为实践,效果更佳,实践远胜于理论。
我们在掌握了一门编程语言之后,又会向两个方向发展:一个方向是向上延伸,从事系统框架结构的探索;另一方向是向下延伸,从事系统底层方面的研究,我大体画了一下这个学习演变过程的示意图。
注:虽然我的形象一直用着“高高手”,但我只是个菜鸟,如有雷同,纯属巧合,欢迎善意拍砖。
php的语法非常简单,正是它的简单性,使它成为了当前互联网第一编程语言。你不需要具备很多的知识就能上手,比如:你学习C语言,就必须非常了解各个变量如何定义,指针如何操作,内存如何创建销毁等等。再比如:你学习Java语言,就必须具有面向对象(阅读全文>
发表于 @ 2009年03月12日 21:37:00|举报收藏
近期研究一些突破验证码方面的知识,记录下来。一方面算是对这几天学习知识的总结帮助自己理解;另一方面希望对研究这方面的技术同学有所帮助;另外也希望引起网站管理者的注意,在提供验证码时多些考虑进去。由于刚刚接触这方面的知识,理解比较浅显,有错误再所难免,欢迎拍砖。
验证码的作用: 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。其实现代的验证码一般是防止机器批量注册的,防止机器批量发帖回复。目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。
所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
我们最常见的验证码
1,四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。
2,随机数字图片验证码。图片上的字符比较中规中矩,有的可能加入一些随机干扰素,还有一些是随机字符颜色,验证作用比上一个好。没有基本图形图像学知识的人,不可破!
3,各种图片格式的随机数字+随机大写英文字母+随机干扰像素阅读全文>
发表于 @ 2009年03月03日 20:46:00|举报收藏
-r 参数可以直接执行一段代码,不需要 阅读全文>
发表于 @ 2009年03月03日 00:31:00|举报收藏
先通过一个例子来解释一下基本概念,看看什么是“迟静态绑定(Late static binding)”:
class A
{
public static function whoami()
{
return __CLASS__;
}
public static function identity()
{
return self::whoami();
}
}
class B extends A
{
public static function whoami()
{
return __CLASS__;
}
}
echo B::identity();
在PHP5.3之前输出A,在PHP5.3之后输出B。由此可以看出,PHP5.3之后,静态方法绑定的时机从编译时延迟到了执行时,我们把这种能力称之为“迟静态绑定(Late static binding)”,PHP5.3甚至更直接的创建了一个get_called_class阅读全文>
发表于 @ 2009年03月02日 16:19:00|举报收藏