易截截图软件、单文件、免安装、纯绿色、仅160KB

tokyo tyrant 在 php 上不能自动反序列化的问题

前一阵试用 tokyo tyrant 碰到一个麻烦,
在php上用memcache接口,取出数据的时候,不会自动反序列化。比如了一个 array(1,2,3,4,5),出来就是 'a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;}' 了。

Wireshark 跟踪了一下,发现和标准memcached返回的数据里差一个字节。去看了下 memcached
协议,发现这个字节是个客户端的标记 flag 。存储的时候放置这个标志,取的时候照样返回。php 的 memcache
扩展应该就是用这个字节来标志是否是 php 的数据。如果匹配则反序列化。对比 tokyo tyrant
的源代码,发现它在存取的时候无视了这个标记位(其实还无视了一些其他东西,比如过期时间之类的,只用了 key 和 value
以及他们的长度),所以就有了这个结果。
之前考虑改 tokyo tyrant ,做了个补丁。不过正如 xdanger
所说,这个办法不好。之前测试得不仔细,后来试了几个不同的类型,果然是出了问题。于是又考虑再改 php
的客户端。让它不管什么类型存储的时候都去做序列号。似乎是解决了反序列号问题。这样修改版的客户端放的东西原版的能正常读取,但原版客户端一旦放了常规值就会出毛病。这一下同时改了客户端和服务端,另外,压缩的问题也还是没解决。看来这个问题还真的很难。
php 客户端补丁,修改 memcache.c
 http://syre.blogbus.com/files/12229540080.diff

 tokyo tyrant 补丁,修改 ttserver.c
http://syre.blogbus.com/files/12227686210.diff


相关文档:

关于php的引用

文档是这么说的:
PHP 的引用允许用两个变量来指向同一个内容。意思是,当这样做时:
<?php
$a
=&
$b
;
?>

这意味着 $a
和 $b

指向了同一个变量。
注: $a
和 $b

在这里是完全相同的,这并不是 $a
指向了 $b

或者相反,而是 $a
和 $b
指向了同一个地方。
所以:
<?ph ......

PHP相关杂项知识


php -h可以获取帮助信息。PHP版本号信息:/your_current_path/php -v,PHP运行脚本:/your_current_path/php your_file_path,PHP运行语句/your_current_path/php -r your_code_snippet。
代码执行结束后,PHP会根据具体执行情况自动的释放,如果执行过程中内存消耗较大,可以利用NULL或unset来释放内存。区别在于,前者 ......

javascript 转换为UNIX时间戳,PHP可用

//转换为UNIX时间戳
function strtotimestamp(datestr)
{
    var new_str = datestr.replace(/:/g,"-");
    new_str = new_str.replace(/ /g,"-");
    var arr = new_str.split("-");
    var datum = new Date(Date. ......

php post数据,cookie程序


<?php
 
 $url="这里写请求地址";//http://pmtest.webgame.com.cn/d.php
 $data="这里写post数据";//如:a=123&b=456 表示传两个参数a和b
 $rfr="发出数据的页面的地址";
 $cookie="这里写cookie";//如:PHPSESSIDs=123456; b=11212
 /*
 例子:
 $rfr="http://*.c ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号