in PHP what does it mean by a function being binary-safe ?

On January 13, 2012, in php, by 校长

It means the function will work correctly when you pass it arbitrary binary data (i.e. strings containing non-ASCII bytes and/or null bytes). For example, a non-binary-safe function might be based on a C function which expects null-terminated strings, so if the string contains a null character, the function would ignore anything after it. This is [...]

localization

On October 19, 2011, in php, by 校长

原文: http://phpadvent.org/2010/localization-by-anthony-gentile 翻译:校长 RoyGu http://roygu.com 当我们创建一个网站时,一个非常重要的考虑是:网站的受众/访客。无论网站是销售商品、提供服务亦或是信息资讯,都须考虑当国外用户访问时页面如何呈现。如果他们想在你的网站上购买商品、使用服务或获取资讯,你的网站能够正常服务他们吗?应该提供正常服务吗?本地化让用户界面符合用户的预期,如:日期格式、货币以及本地语言文本。 许多以英语为母语的人并没有意识到这点,尽管英语的普及率很高,但说英语的人仍只占很小比率。这篇文章统计了世界上分布最广的语言是英语,但英语并不是人们说得最多的语言(现在排第三)。互联网上有如此多的有用信息,很大一部分不是用英文描述的。用计算机解决语言相关的问题是一件困难的事情,但是创建一个国际友好的网站并不是我们想象的那么难。虽然今天介绍的方法不能适用于10种不同语言的网站,但是对于需要提供两三种语言的网站非常有效果。比如,在美国,讲西班牙语的人数在显著增加,拥有一个能用西班牙语言交流的电子商务网站,将扩大你的潜在客户群。 在讲如何为网站实现本地化之前,我想花点时间谈论下字符编码。即使你无法预见你的网站是否需要提供本地化功能,了解字符(charsets)编码相关的知识都是非常有必要的。字符编码是用来帮助软件识别用户期望字符集的。例如,通用的ISO 8859-1字符集是西欧的通用字符集。因此,在这种字符集中可以用英文字母表示德语中的原音。但如果我在这种字符集中想显示可拉伯字符,如:ق,那么很可能会显示成� 或 Ù。这就意味着,在ISO 8859-1字符集下,不能正确识别阿拉伯字符。 一种非常友好的跨语言字符编码是兼容ASCII码的UTF-8编码,它代表Unicode字符集,特别是在传统应用中较为常见。在网站中使用UTF-8,其支持的字符非常多,能够最大地满足用户需求。为了正确地实现一种字符编码,你要确保在你整个应用中编码保持一致。如果你使用UTF-8,那么Apache、数据库 表、PHP以及PHP可用的功能和文档类型都应该设置成UTF-8。如果这些都不是一致的,你最终可能会得到不同字符编码的混合数据,这种问题即使能补救也比较困难。 // Apache httpd.conf or .htaccess // This will add a charset to the Content-Type response header. AddDefaultCharset UTF-8 // php.ini default_charset = “UTF-8″ // Example PHP function htmlentities($data, ENT_COMPAT, ‘UTF-8′); // XML <?xml version=”1.0″ encoding=”UTF-8″ ?> // HTML <meta http-equiv=”Content-Type” content=”text/html; [...]

原来method_exists等方法不区分大小写

On September 15, 2011, in php, by 校长

今天突然回头想想刚开发完项目的新功能,好像我新增的action都是以双单词出现的,如:actionNewUser,但是在Router中只是简单的对URL中action做ucfirest(strtolower($action))处理,百思不得其解,这尼玛怎么就能找到该action呢? 但是事实往往是红果果的,经过测试发现method_exits和call_user_func_array等方法不区分方名法大小写。 千言万语不如上一图: 原来是我了解得不够,下次一定记得,哈哈,还大惊小怪的!!!! 一、大小写敏感 1. 变量名区分大小写 2. 常量名默认区分大小写,通常都写为大写 3. php.ini配置项指令区分大小写 二、大小写不敏感 1. 函数名、方法名、类名 不区分大小写,但推荐使用与定义时相同的名字 2. 魔术常量不区分大小写,推荐大写 3. NULL、TRUE、FALSE不区分大小写 4. 类型强制转换,不区分大小写,包括: * (int),(integer) – 转换成整型 * (bool),(boolean) – 转换成布尔型 * (float),(double),(real) – 转换成浮点型 * (string) – 转换成字符串 * (array) – 转换成数组 * (object) – 转换成对象

PHP下载:解决中文文件名乱码

On July 29, 2011, in php, by 校长

通过把Content-Type设置为application/octet-stream, 可以把动态生成的内容当作文件来下载,相信这个大家都会。 那么用Content-Disposition设置下载的文件名, 这个也有不少人知道吧。 基本上,下载程序都是这么写的: <?php $filename = “document.txt”; header(‘Content-Type: application/octet-stream’); header(‘Content-Disposition: attachment; filename=’ . $filename); print “Hello!”; ?> 这样用浏览器打开之后,就可以下载document.txt。 但是,如果$filename是UTF-8编码的,有些浏览器就无法正常处理了。 比如把上面那个程序稍稍改一下: <?php $filename = “中文 文件名.txt”; header(‘Content-Type: application/octet-stream’); header(‘Content-Disposition: attachment; filename=’ . $filename); print “Hello!”; ?> 把程序保存成UTF-8编码再访问,IE6下载的文件名就会乱码。 FF3下下载的文件名就只有“中文”两个字。Opera 9下一切正常。 输出的header实际上是这样子: Content-Disposition: attachment; filename=中文 文件名.txt 其实按照RFC2231的定义, 多语言编码的Content-Disposition应该这么定义: Content-Disposition: attachment; filename*=”utf8”%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt” 即: filename后面的等号之前要加 * filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。 最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来 [...]

原来PHP原生支持Memcached存储session

On May 3, 2011, in php, by 校长

转自:http://blog.csdn.net/ctowoo/archive/2009/09/28/4607858.aspx 一般地, Session 是以文本文件形式存储在服务器端的。如果使用 Seesion,或者该 PHP 文件要调用 Session 变量,那么就必须在调用 Session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,PHP 自动完成 Session 文件的创建。其默认 Session 的存放路径是服务器的系统临时文件夹。 但是如果碰到大数据量的Sesstion的时候, 使用基于文件的Session存取瓶颈可能都是在磁盘IO操作上,现在利用Memcached来保存Session数据,直接通过内存的方式,效率自然能够提高不少。 在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。 其缺点是 session 数据都保存在 memory 中,一旦宕机,数据将会丢失。但对 session 数据来说并不是严重的问题。 如何用 memcached 来存储 session呢?以下是基本的配置步骤: 1. 安装 memcached (略过,不清楚的筒子可以查看我的另一篇文章:http://blog.csdn.net/ctowoo/archive/2009/09/26/459 6701.aspx ) 在 phpinfo 输出中的 “Registered save handlers” 会有 “files user sqlite”。 2. [...]

用error_log函数写缓存

On April 30, 2011, in php, by 校长

恩,没错,@伪造 在看ezSQL源代码的时候,总是看到作者用error_log函数写缓存,如: error_log( serialize($result_cache), 3, $cache_file); 来看看error_log的原型: bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) error_log() log types 0 message is sent to PHP’s system logger, using the Operating System’s system logging mechanism or a file, depending on what the error_log configuration directive is set [...]