问题:用 xampp 套件的 php 测试程序,程序中用到了 memcache,xampp 中未编译这个 extension,因此无法运行。 如果为了 memcache,重新编译 Apache、PHP 和 MySQL,太费时间,没有收获,而且重要的是逃避了问题,没有解决。 这回找到了解决方法,可以用此方法编译其他 PECL […]
PHP
memcache PECL bug fix
使用 memcache 的过程中,遇到一个奇怪的问题,在 CentOS 环境下,PHP 的 memcache 扩展创建的客户端对象,在 delete 一个 key 的时候报错: [25-Nov-2009 13:57:04] PHP […]
Windows PHP dirname root
遇到奇怪的问题,在 Windows 环境下,你猜 dirname(‘/’) 返回虾米? string(1) “\” Linux 下呢? string(1) “/” 换个参数,dirname(‘/home/leakon/sofav.php’),如果你认为上面的不同,是因为 Windows 的目录分隔符是反斜线 “\”,那下面的结果如何解释? […]
Conference PHP Quebec 2009
一年一度的 PHP Quebec 大会,本月初在加拿大的蒙特利尔举办。这次大会的主题是 “Get Further with PHP”,中文怎么说呢,“与PHP 一起深入发展”? 这是官方主页: http://conf.phpquebec.com/en 我第一次听说这个 PHP Quebec 是在 2008 年,从网上找到一本 […]
SofavDB_Debug_PDO MySQL 执行时间 日志
这个类可以完全替代 PDO,如果你需要知道自己的程序跟 MySQL 交互花费多少时间,而你又有洁癖,不想把自己的代码搞得一团糟,那我强烈地建议你试试这个 SofavDB_Debug_PDO。 通常,创建一个 PDO 连接,都是 new PDO()。 在开发环境中,你只需要把上面那个语句替换成 new SofavDB_Debug_PDO() 即可。 然后,凡是通过 prepare 的 […]
Apache 漏洞 PHP 文件 上传
标题党一下,其实这个不应该算是 Apache 的漏洞。 简述漏洞情况: 有的网站有文件上传功能,尤其是可以上传 rar 文件的。如果文件名是 abc.php.rar,而且这个文件被放在了 http://www.leakon.com/uploads/abc.php.rar,你在地址栏输入这个地址,Apache 就会调用 PHP 模块去解析 abc.php.rar。 为什么会解析呢? 因为 Apache […]
PHP clone 复制对象 优化对象创建速度
用 clone 结构来复制一个对象。 PHP 的对象赋值,默认是引用传递。 如果需要一个对象的副本,只能用 clone。 从性能上考虑,当在一个循环中需要反复创建一个新对象的时候,可以考虑在外层创建,在循环内层用 clone 来复制对象。这样性能将会得到很大提高。 这里有实地测试的代码和测试结果可以参考: <<PHP 对象克隆 性能优化示例>> 引用一下结论: […]
PHP MySQL localhost 127.0.0.1
今天刚发现一个问题,PHP连接MySQL的时候,不同环境的localhost会有不同的结果。 我的服务器装了2套PHP,其中有一个是用源码编译的,另一个是xampp集成包。 编译的php用于生产环境,xampp用来建立测试环境。 把线上的代码放到测试环境下,居然报告无法连接MySQL! 刚开始以为是端口的问题,可是我在命令行下怎么连接都没问题。最后抱着试试看的想法,把localhost改成了127.0.0.1,这回居然成功了。 我不能理解,线上代码运行的好好的,配置文件就是localhost呀,怎么到测试环境就必须改成127.0.0.1才行? 两套环境,主要的区别就是PHP,虽然版本都一样,不过xampp是编译好的,我估计问题出在这里。 然后立刻写了一个测试程序: $connA = mysql_connect(‘127.0.0.1:3306’, ‘leakon’, ‘pass’); $connB = […]
PHP 安全设置 %5c magic_quotes_gpc GBK
安全问题。 今天看到一个朋友的blog上,写到PHP的安全设置,应该开启magic_quotes_gpc,避免SQL注入等。 可是,我在用Symfony开发时,文档上说应该关闭php.ini的magic_quotes_gpc,以前我不知道为什么,今天突然有些明白了。 这个设置,只能起到非常有限的安全作用,却有可能带来更严重的问题。 PHP的放置SQL注入,很多网站或教程上,都写着用addslashes或mysql_escape_string来过滤,或者用自动的magic_quote。这些函数的作用,就是查询字符串中的单引号、双引号和斜线”\”,在这些字符前面插入一个斜线”\”。 如果遇到了”頫運鳿黒靄錦鳿黒靄錦”这样的字符,而你的数据库、网页又是GBK编码的话,上面的3种过滤函数,都会给你带来麻烦,因为这些字符的第二个字节的编码,是%5c,恰好是”\”对应的编码。 原本是2个字节的汉字,被这些函数变成了3个字节,最后的2个字节是连续的”\”,而这第3个”\”会把后续的引号转义,因此SQL语句就会出错,导致更新无法执行。 安全建议: 设置php.ini,默认关闭magic_quotes_gpc 使用mysql_real_escape_string对字符串变量进行转义,注意,转义前判断magic_quotes_gpc是否已开启 使用utf-8编码,可以有效避免此类问题
PHP 文件下载 IE 无法打开页面
IE 又有一个弱得不行的问题让我发现! 有个项目,要限制文件的下载权限,只有注册用户才可以下载,用户登录后,点击下载链接,弹出保存附件的提示。 我用 PHP 写了一个下载类,支持断点续传的。 今天发现一个问题,在 IE 7 下,点击链接,可以弹出对话框,提示 “打开”、”保存” 和 “取消”,点击打开没问题,点击保存,却马上弹出错误提示 “该页面无法打开”! 这时可以注意到一个细节,弹出保存对话框的时候,正常情况下窗口左边会根据文件类型显示图标,而此时却是一个没有类型的默认图标。 […]