Archive for category 编程技术
php的strtotime在处理am/pm时的一个BUG
今天在处理一个采集数据时发现采集到的时间是空的,到源网站看了一下,发现是有时间的。联想到之前一个am/pm的问题,然后就有了如下测试。
测试代码:
- $date = date('Y-m-d');
- $array = array('00:00am','00:00pm','00:01am','00:01pm', '01:01am','01:01pm','12:00am','12:00pm','12:01am','12:01pm');
- foreach ($array as $time) {
- echo $date . ' ' . $time.'<br />';
- echo strtotime($date . ' ' . $time).'<br />';
- echo date('Y-m-d H:i:s', strtotime($date . ' ' . $time)).'<br /><hr />';
- }
大家可以先自己想想预期的答案是什么,再往下看:
Read the rest of this entry »
UTF-8编码内简繁互转的PHP实现
昨天,因为项目需要对文字进行简繁互转,网上基本上是内码互转,即GB2312编码和BIG5编码之间的互转,我始终是UTF-8编码。关于UTF-8内的简繁互转,只有1篇,但被可耻的转了N次,占据了几页搜索页。我随便试了下,发现可以,等正式放到项目中才发现,只有一部分是正常的,只好自己想办法了。突然想到PHP的iconv函数,这是一个内码转换的函数,表面上看好像和我的需求不符,其实不然,我们可以通过曲线救国的方式来实现。先将UTF-8(简体字)转为GB2312编码,再将GB2312编码转为BIG5编码,然后再将BIG5转为UTF-8,这样比正常直接转多了2步,应该会有不少性能损失,具体损失多少,还没测试。到目前为止,还没有发现有不能转的字。下面放出代码:
- class ChineseTransfer {
- public static function big5_gb2312($in) {
- $in = iconv('UTF-8', 'BIG5', $in);
- $in = iconv('BIG5', 'GB2312', $in);
- $out = iconv('GB2312', 'UTF-8', $in);
- return $out;
- }
- public static function gb2312_big5($in) {
- $in = iconv('UTF-8', 'GB2312', $in);
- $in = iconv('GB2312', 'BIG5', $in);
- $out = iconv('BIG5', 'UTF-8', $in);
- return $out;
- }
- }
Erlang学习–输出MD5值
来源:http://www.ha24.cn/?p=197
Erlang输出的md5值是16位二进制的,就算转成list也和我们经常用的32位字符串不一样,这是转换代码:
- -module(md5).
- -compile(export_all).
- md5(S) ->
- Md5_bin = erlang:md5(S),
- Md5_list = binary_to_list(Md5_bin),
- lists:flatten(list_to_hex(Md5_list)).
- list_to_hex(L) ->
- lists:map(fun(X) -> ini_to_hex(X) end, L).
- ini_to_hex(N) when N < 256 ->
- [hex(N div 16), hex(N rem 16)].
- hex(N) when N < 10 ->
- $0 + N;
- hex(N) when N >= 10, N < 16 ->
- $a + (N - 10).
命令行下进行svn合并
平常进行SVN操作都直接在命令行下,当然合并也要在命令行下操作,SVN合并的命令是 svn merge,具体的帮助请用 svn merge –help查看。
用实例来说明吧:
主干: /trunk
某分支:/branches/1.02.05
现在要把1.02.05分支上的修改合并到主干上,步骤如下:
1.先查看1.02.05从哪个版本迁出的,当前版本是多少
假设得到的迁出版本是1000,当前版本是2000
2.进入主干版本,进行合并操作
svn merge /branches/1.02.05 -r 999:2000
注意,这里起始版本要我们查询到的起始版本-1。
在合并过程中少不了出现冲突的提示,看看哪个版本需要保留,哪个版本要删除,耐心解决。
最后用svn status查看影响了多少个文件,有可能出现有整个文件处于冲突状态,用svn resolved解决,再svn commit -m ‘message’ 提交,提交后注意测试看看有没有BUG。
安装php-memcached,libmemcached提示“configure: error: “could not find memcached binary””的解决
先发一下牢骚,这些名字怎么这么接近,甚至是一样的。服务端:memcached,PHP客户端扩展:memcache,memcached,顺便想个别的名字不行吗,我想搜索关于php-memcached的资料,90%以上会搜索到服务端的memcached。
以下是正题。
如果memcached和php-memcached是在同一台机子里运行,一般不会出现这个问题,真出现了,只要加上”with-memcached=你的memcached路径”即可。
我这里碰到的情况是,memcached安装在另外一台机子,上面只有mysql和memcached。需要安装php-memcached的机器是没有memcached的,在安装libmemcached时,就会出现标题的报错,这时,只要从安装有memcached的机器那复制memcached放到本地的/usr/bin下即可顺利通过。
[转载]50点提高PHP编程效率
这些总结很 实用,希望给来我博客的人一点帮助。来源:Web思想者。
1、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
2、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
3、$row[’id’] 的速度是$row[id]的7倍。
4、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
5、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
6、注销那些不用的变量尤其是大数组,以便释放内存。
7、尽量避免使用__get,__set,__autoload。
8、require_once()代价昂贵。
Read the rest of this entry »
[转载]从PHP5.2.x迁移到PHP5.3.x
php官方已经不再积极更新php5.2.x了,看到一篇文章讲从php5.2.x升级到php5.3.x的,先做个记录。目前的项目还是基于php5.2.x,时机成熟再迁移吧,毕竟这是劳民伤财的事。
来源:Web思想者论坛,以下为原文:
目录
一、PHP 5.3.x中发生了什么变化
二、向后不兼容的变化
三、新功能
四、Windows支持的变化
五、SAPI modules中的变化
六、PHP 5.3.x中不建议使用的功能
七、PHP 5.3.x中去除不推荐的功能
八、新参数
九、新函数
十、新的stream wrappers
十一、新的类常量
十二、新方法
十三、新扩展
十四、移除的扩展
十五、扩展中的其他变化
十六、新的类
十七、新的全局常量
十八、INI文件handling的变化
十九、其他变化
Read the rest of this entry »
xhprof自定义日志存放目录和文件名
用xhprof来分析PHP代码性能已经一段时间了,之前都按默认的配置,发现存放日志都要在同一个地方,文件名还是很不好识别的,极不方便,今天看了看xhprof的代码,发现这都可以配置的,罪过呀。
先POST一下原来的调用代码:
- $xhprof_random = mt_rand();
- if (function_exists('xhprof_enable') && $xhprof_random === 1) {
- xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
- }
- define('ROOT', dirname(__FILE__));
- // Your code here
- if (function_exists('xhprof_disable') && $xhprof_random === 1) {
- $xhprof_data = xhprof_disable();
- if (file_exists(ROOT . '/xhprof')) {
- require_once ROOT . '/xhprof_lib/utils/xhprof_lib.php';
- require_once ROOT . '/xhprof_lib/utils/xhprof_runs.php';
- $xhprof_runs = new XHProfRuns_Default();
- $xhprof_runs->save_run($xhprof_data, 'xhprof');
- }
- }
查看/xhprof_lib/utils/xhprof_runs.php,可以看到在new XHProfRuns_Default()时,可以传一个参数,该参数即是日志存放路径,在调用save_run方法时,可以传第三个参数来指定文件名,这样一来,在分析日志时,通过日志文件名就知道是哪个请求的,方便多了,新的代码:
- $xhprof_random = mt_rand();
- if (function_exists('xhprof_enable') && $xhprof_random === 1) {
- xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
- }
- define('ROOT', dirname(__FILE__));
- // Your code here
- if (function_exists('xhprof_disable') && $xhprof_random === 1) {
- $xhprof_data = xhprof_disable();
- if (file_exists(ROOT . '/xhprof')) {
- require_once ROOT . '/xhprof_lib/utils/xhprof_lib.php';
- require_once ROOT . '/xhprof_lib/utils/xhprof_runs.php';
- $xhprof_runs = new XHProfRuns_Default('../xhprof');
- $file_name = 'gateway_' . $_GET['action'] . '_' . microtime(TRUE);
- $xhprof_runs->save_run($xhprof_data, 'xhprof', $file_name);
- }
- }
[转载]可同时区分IE8、IE7、IE6、Firefox3、Firefox2的CSS hacks
从phpchina上看到的,转过来,做个备忘。
可同时区分IE8、IE7、IE6、Firefox3、Firefox2的CSS hacks:
- color:/*\**/#00f\9; /* IE8 */
- }
- .test,
- .test:-moz-any-link{
- color:#f60; /* Firefox2 */
- }
- .test,
- .test:default{
- color:#000; /* Firefox3 */
- *color:#f00; /* IE7 */
- _color:#0f0; /* IE6 */
- }
可同时区分IE8、IE7、IE6、Firefox的CSS hacks:
- .test{
- color:#000; /* Firefox */
- color:/*\**/#00f\9; /* IE8 */
- *color:#f00; /* IE7 */
- _color:#0f0; /* IE6 */
- }
关于IE8的hacks:
- .test{
- color:/*\**/#00f\9; /* IE8 only */
- color:#00f\9; /* 适用于所有IE版本 */
- }
近期评论