php最简单的支持curl方法,无需复制libeay32.dll、ssleay32.dll到system32下

因为工作需要,需要程序支持curl,虽然最新的php5.4.7有php_curl.dll,但是不起作用。

在网络上找来找去,都是要把php_curl.dll、libeay32.dll、ssleay32.dll复制到system32下的。虽然应该可以成功,但是因为我偶尔需要把我的服务器包移植到其它地方去。所以这种复制文件到system32下的方法,实在是不适合我。就如同别人要把php.ini复制到system32下,同样不适合我一样。

功夫不负有心人。终于在网络的一个角落里找到了解决方法:

[cc lang=”ini”]
LoadFile “D:/path/to/php/ssleay32.dll”
LoadFile “D:/path/to/php/libeay32.dll”
[/cc]

把这两行放在了LoadModule下边。

OK搞定!

PHP的json_decode为Null的处理办法

今天在处理一个导入问题时,遭遇到了json_decode为NULL的问题。找来找去,自己的数据正常,但是POST之后会被PHP自动转义,转义后无法正确解析,需要处理:

[cc lang=”php”]
if (isset($_POST[‘c’])) {
$s = $_POST[‘c’];
if (get_magic_quotes_gpc())
$s = stripslashes($s); //stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
//do something
}
[/cc]

虽然有同学说与rn有关,但是在我这里没有证据表明这些字符会导致Null的问题。但是应该是会受到影响到,我会继续观察。

php数据库类:Zebra_Database的一点教训!

最近由于工作需要开始使用PHP开发部分程序,于是用到了Zebra_Database,这个类还是非常不错的,可能是由时间比较赶的原因,没有很仔细的看源码,只是草草的看了几眼官方的文档,觉着能用了就开始用了。

直到今天,开发的程序不知什么原因,在家里调试的很好,到公司从SVN更新下来以后就是无法链接到数据库,郁闷了一天了。终于发现是我写sql语句的时候没有把非字符串的一个ID用引号引上!太不小心了,这么低级的错误,实在不应该出现。

另外,昨天晚上在看源码的时候才发现它在返回数据条数的时候,有两个方法从字面上看差不多:found_rows、returned_rows()。

最早的时候,因为没有看源码,只看到有一个found_rows就直接拿来用了,今天才看到returned_rows而这个才是在select后应该用的那个,我的那个天啊!

看来,不管时间是不是充足,都应该力所能及的把源码看一下,最起码把里面的文档注释看一遍才对。

教训,谨记。

40个迹象表明你还是PHP菜鸟

你是PHP菜鸟,如果你:

1. 不会利用如phpDoc这样的工具来恰当地注释你的代码
2. 对优秀的集成开发环境如Zend Studio或Eclipse PDT视而不见
3. 从未用过任何形式的版本控制系统,如Subclipse
4. 不采用某种编码与命名标准,以及通用约定,不能在项目开发周期里贯彻落实
5. 不使用统一开发方式
6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函数)
7. 不在编码之前彻底规划你的程序
8. 不使用测试驱动开发
9. 不在错误开启状态下进行编码和测试(译注:参考PHP函数error_reporting)
10. 对调试器的好处视而不见
11. 不重构你的代码
12. 不使用类似MVC模式把程序的不同层次划分开
13. 不知道这些概念:KISS, DRY, MVC, OOP, REST
14. 不用return而是直接在你的函数或类中输出(echo/print)内容
15. 对单元测试或通用测试的优点视而不见
16. 总是返回硬编码的HTML,却不返回纯粹的数据,字符串,或对象
17. 总是对“消息”和“配置参数”进行硬编码
18. 不对SQL查询语句做优化
19. 不使用__autoload(译注:参考PHP手册相关描述)
20. 不允许智能错误处理(译注:参考PEAR的ErrorStack)
21. 使用$_GET替代$_POST来做具有破坏性的传递操作
22. 不知道怎么利用正则表达式
23. 从未听说过SQL注入或跨站脚本
24. 不允许简易配置,也不允许类的构造函数接受参数传递而后执行set/get方法,或运行时的常量定义
25. 不理解面向对象编程(OOP)的优势和劣势
26. 不视情形大小而滥用OOP
27. 自认为实现可复用的软件一定等于/需要让你的代码遵循OOP
28. 不利用智能缺省值
29. 没有单一的配置文件
30. 不想暴露文件源码,却用.inc后缀名取代了.php
31. 不使用数据库抽象层
32. 不能保持DRY作风,即不重复自己,如果你总是在复制粘贴一些东西,说明你设计得很差劲
33. 没有实现让一个函数/类/方法只做一件事,也不能组合利用它们
34. 没能尝试OOP的特长,如抽象类、接口、多态、继承,访问控制修饰符(译注:如public, private, protected)
35. 不用现有的设计模式优化你的程序体系设计
36. 不允许你的用户在你拥有很多文件或目录的情况下定义基础目录
37. 污染了名称空间,比如用常见字符串命名你的库函数
38. 使用数据库表时不使用表前缀
39. 不使用统一的模板引擎
40. 不关注已有的PHP开发框架,懒于探索;其实先进的开发理念和美妙代码就蕴含其中。

奇怪的PHP文件不能被解释问题的处理

Gentoo安装好后一直没有用到Apache2+Mysql+PHP,最近才把配置工作做好,可是很奇怪的一个问题是有些PHP文件可以被很好的解释执行,另一些则不能,一旦请求就会将原代码输出,做PHP不起作用状。经过对比这些文件后发现,每个PHP文件都要有!DOCTYPE标签才能被正确的解释执行,即使有全套的:<html><head><title>my own program:array</title></head><body>…

Gentoo安装好后一直没有用到Apache2+Mysql+PHP,最近才把配置工作做好,可是很奇怪的一个问题是有些PHP文件可以被很好的解释执行,另一些则不能,一旦请求就会将原代码输出,做PHP不起作用状。

经过对比这些文件后发现,每个PHP文件都要有!DOCTYPE标签才能被正确的解释执行,即使有全套的:
<html>
<head><title>my own program:array</title></head>
<body>
<?php
//PHP  code
?>
</body></html>
也无济于事。但是当加了!DOCTYPE之后,则一切归于正常了:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/xhtml1-loose.dtd">
<html>
<head><title>my own program:array</title></head>
<body>
<?php
//PHP  code
?>
</body></html>