PHP里的md5函数与linux的md5sum命令的区别

有好几次碰到使用Linux的md5sum命令产出的散列值,跟PHP的md5函数,或者MySQL的md5函数产生的不一样的问题. 通常比较懒,就没细想,直接使用PHP产生的算了;没想过难道算法还会有不同. 其实没有不同的算法,md5在哪里的计算方法只有一个.原因不过是因为使用md5sum时,有时候不小心会把换行符也作为计算的内容,结果实际上是散列的对象不同,自然结果也就不同了.而在Linux命令行状态下,我通常注意不到换行的存在. 以字符串'123'为例,PHP的计算结果是: [source language="bash"] $ php -r 'echo md5("123");' 202cb962ac59075b964b07152d234b70 [/source] 比如下列语句实际上是对"123\n"进行求散列,而不是对'123'求散列. [source language="bash"] $ echo '123' | md5sum ba1f2511fc30423bdbb183fe33f3dd0f [/source] 正确的写法应该是通过echo的'-n'选项,让echo不要输出换行符,这样结果就一样了. [source language="bash"] $ echo -n '123'…

Continue Reading

php json_encode函数不支持BIGINT的问题

前几天看到新浪微博的微博平台微博id升级公告,也没怎么注意.感觉就是存储上要用string代替int,浪费点空间.对php应用应该没什么影响. 倒是新浪微博的32位id这么快就不够用了,让人感叹微博发展的神速. 今天搜索一些关键字,打开微博页面时,老是报告页面找不到.才发现,这玩意还真有影响. 那些打不开的页面的URL是这样的"http://api.t.sina.com.cn/1941569665/statuses/3.3430536723516E+15". Google上查了一下,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致. 在新的php(5.4?) json_decode里倒是有一个开关"JSON_BIGINT_AS_STRING"开关,可以使json_decode默认把BITINT当成string处理. 但是相信大家和我一样,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本. 一个折中的办法是把微博API返回的json字符串预处理一下,然后再调用json_decode. 也就是把 "id":12345678901234567890 换成 "id":"12345678901234567890" 代码片段如下,希望对和我类似情况的人有用. [source lang="php"] if (define('JSON_BIGINT_AS_STRING')) { $json = json_decode($data, false, 512, JSON_BIGINT_AS_STRING); }else{ //convert bigint to…

Continue Reading

PHP扩展 memcache vs. memcached

两个扩展的介绍基本一样(memcache, memcached),没有任何特别关于他们之间区别的说明. 那我们什么时候应该用哪个扩展呢? Stackoverflow上有比较详细的讨论: using memcache vs memcached with php 和memcache vs memcached 这里还有一个很清晰表格,对比了这两个扩展的具体特性. 主要区别是php memcached扩展比较新,几乎支持memcached的所有特性(如Delayed Get, Append/Prepend等). 但是它依赖libmemcached才能运行(在debian里面包名是libMemcached5). 所以如果你不使用如Delayed Get这样的特性,又不想多依赖libmemcached库, 完全可以使用memcache扩展. 反之请选择memcached扩展. 不过debian和ubuntu上直接用apt-get install php5-memcached安装的php memcached扩展,libmemcached库有些问题. 很多人报告不能正常使用. memcache扩展由于不依赖libmemcached库,没这个问题. 我的debian…

Continue Reading

joomla编辑theme时导致文件权限变成不可写的问题

最近我编辑joomla的Gantry theme的时候,经常碰到css等文件,保存以后变成不可写“unwritable”的情况。 把这些文件的权限改成755,通过joomla一编辑保存,又变成555了。 在网上Google了一下,发现碰到这个问题的人还真不少。 比如这里和这里,都用一堆人说这事。Gantry theme的用户也说这事。 开始我以为是apache或者php什么地方的配置有问题。但是写了个简单的php脚本,跑了一下发现没这个问题,创建出来的文件的权限很正常。 直到看到这篇文章,才发现这是个老问题,从2006就有人不停的在抱怨了。 起因就是在joomla的模板组件的controller文件administrator/components/com_templates/controller.php里有这么几行代码: [source lang="php"] // Try to make the template file unwriteable if (!$ftp['enabled'] && !JPath::setPermissions($file, '0555')) { JError::raiseNotice('SOME_ERROR_CODE', JText::_('Could not make the…

Continue Reading

Zen Coding,快速输入html和css之道

整理Eclipse for php的时候,无意间看到了这工具,Zen Coding。真是快速编辑html和css的利器,有多厉害,看看这里的演示吧。访问不到的请移步土豆。 作者的主要想法是,通过把编辑器变成一个简单的脚步解释环境,来提高编码的效率。我想这也是VIM这种编辑器反而比一些的IDE效率更高的主要原因。不过Zen Coding的想法更新颖,代码更少。 例如我们要输入这样一段html代码, [code language="html"] <div id=”header”> <ul class=”navigation”> <li><a href=”"></a></li> <li><a href=”"></a></li> <li><a href=”"></a></li> <li><a href=”"></a></li> </ul> </div> [/code] 以zen coding的方式,就只需要输入“div#header>ul.navigation>li*4>a”,然后按快捷键展开就好了。 心动了,来体验一下zen coding的魅力吧。这个在线的Zen Coding编辑器,是通过js,把普通的html textarea变成了不错的IDE。如何让你网站上的textarea也支持这个功能?试试这个吧。…

Continue Reading

End of content

No more pages to load

Close Menu