V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
incrediblink
V2EX  ›  问与答

朕在给 ThinkSNS 写 API 时遇到了史前大难题!

  •  
  •   incrediblink · 2015-06-18 18:30:05 +08:00 · 3279 次点击
    这是一个创建于 3437 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道在V2EX问这种事情会不会太low了

    是这样的,朕最近为了给自己的ThinkSNS小站写一个桌面客户端。是用ThinkPHP(妈呀不行气质更low了!QAQ)框架弄的,登录验证、获取微博信息这些都实现了,正在朕心中翻涌起滚滚巨浪心想着能一统江山的时候,出现了谜之难题。

    朕的发布文字微博的函数是这样写的

    function textTweet($uid, $content){
    $Feed = M('feed');
    $Feed->uid = $uid;
    $Feed->publish_time = time();
    $Feed->type = 'post';
    $feed_id = $Feed->add();
    $FeedData = M('feed_data');
    $FeedData->feed_id = $feed_id;
    $FeedData->feed_data = "a:16:{s:7:\"content\";s:24:\"".$content."\";s:4:\"body\";s:24:\"".$content."\";s:10:\"source_url\";s:0:\"\";s:9:\"attach_id\";s:0:\"\";s:3:\"uid\";i:283;s:3:\"app\";s:6:\"public\";s:4:\"type\";s:4:\"post\";s:10:\"app_row_id\";i:0;s:13:\"app_row_table\";s:4:\"feed\";s:12:\"publish_time\";i:".time().";s:4:\"from\";s:1:\"0\";s:12:\"repost_count\";i:0;s:13:\"comment_count\";i:0;s:6:\"is_del\";i:0;s:9:\"is_repost\";i:0;s:8:\"is_audit\";i:1;}";
    $FeedData->client_ip = get_client_ip();
    $FeedData->feed_content = $content;
    $FeedData->add();
    return $feed_id;
    }

    求别吐槽文风…然后那个谜一样的feed_data大概就是万恶之源

    POST以后确确实实输出了Feed_id(是的你没看错那个key就是密钥)

    然而在Timeline里面显示出来是空空的

    数据库里面的feeddata明明活蹦乱跳的啊!QAQ

    嗯,问了一只触触,他说TS是读缓存的,然而朕清了服务器缓存后还是一片空白。所以朕就找到大家了…希望大家不要嫌弃朕……

    23 条回复    2015-06-19 20:36:00 +08:00
    giuem
        1
    giuem  
       2015-06-18 18:32:23 +08:00 via Android
    自称 朕,真是恶心
    blacktulip
        2
    blacktulip  
       2015-06-18 18:33:17 +08:00   ❤️ 9
    皇上自行圣裁即可,草民不敢乱言。
    laoertongzhi
        3
    laoertongzhi  
       2015-06-18 18:36:59 +08:00
    皇上自行圣裁即可,草民不敢乱言。
    laoertongzhi
        4
    laoertongzhi  
       2015-06-18 18:37:09 +08:00
    皇上自行圣裁即可,草民不敢乱言。+1
    incrediblink
        5
    incrediblink  
    OP
       2015-06-18 18:45:50 +08:00
    @giuem @blacktulip @laoertongzhi (´・ω・`)用“朕”自称只是一个玩笑,绝对没有其他的意思,如果冒犯了大家在此道歉, 以后会改过的。
    Septembers
        6
    Septembers  
       2015-06-18 18:49:47 +08:00 via Android   ❤️ 1
    $FeedData->feed_data的字符串可以反序列化后用var_dump打印出来改成array再序列化 看起来会稍微好点
    543400
        7
    543400  
       2015-06-18 19:13:14 +08:00 via Android
    (≧▽≦) 楼主萌萌哒
    itfanr
        8
    itfanr  
       2015-06-18 19:15:08 +08:00   ❤️ 1
    @incrediblink 以后乖乖的吧
    49
        9
    49  
       2015-06-18 19:37:15 +08:00 via Android
    @giuem 不觉得如何,朕本来就是以前很平凡的自称,只是始皇帝把它高贵化了。
    现在人人皆可成朕啊。何必心生分别。
    和而不同。
    LMkillme
        10
    LMkillme  
       2015-06-18 19:48:05 +08:00
    @49 就跟「小姐」一样?
    oott123
        11
    oott123  
       2015-06-18 19:54:39 +08:00
    你知道 phpserialize 这个函数么……
    thinkif
        12
    thinkif  
       2015-06-18 19:54:48 +08:00
    大胆,在朕面前敢自称朕,你让其他的朕们怎么看。。。
    oott123
        13
    oott123  
       2015-06-18 19:55:56 +08:00
    记忆偏差了,抱歉,这函数就叫 serialize
    http://php.net/manual/zh/function.serialize.php
    oott123
        14
    oott123  
       2015-06-18 19:58:47 +08:00   ❤️ 2
    刚刚忘了说你的问题在哪了。
    s:24 这个地方,24是代表字符串长度;然而你的 $content 的长度不确定,反序列化的时候就挂了……
    incrediblink
        15
    incrediblink  
    OP
       2015-06-18 20:38:12 +08:00
    @oott123 (❁´▽`❁)谢谢小天使!
    tSQghkfhTtQt9mtd
        16
    tSQghkfhTtQt9mtd  
       2015-06-18 21:33:42 +08:00
    我想知道你的POST测试工具是什么
    oott123
        17
    oott123  
       2015-06-18 21:41:46 +08:00
    @liwanglin12 目测 postman ,chrome app
    tSQghkfhTtQt9mtd
        18
    tSQghkfhTtQt9mtd  
       2015-06-18 21:54:42 +08:00
    @oott123 哦。。的确是,旧版的不长这样,没认出来。。
    incrediblink
        19
    incrediblink  
    OP
       2015-06-19 08:00:01 +08:00
    @oott123 其实昨天晚上看到你说的还是云里雾里,但是睡觉翻来覆去的时候突然想通,今天立马(写了一段很丑的代码)就实现了!小天使万岁!( ´∀`)
    oott123
        20
    oott123  
       2015-06-19 08:53:35 +08:00 via Android
    @incrediblink 你该不会吧 24 换成了 strlen 吧…
    incrediblink
        21
    incrediblink  
    OP
       2015-06-19 08:56:10 +08:00
    @oott123 (つД`)我在你心中就这么呆吗!
    现在我把代码改成这样了w
    ```
    $unserialized_feed_data[content] = $content;
    $unserialized_feed_data[body] = $content;
    $unserialized_feed_data[source_url] = "";
    $unserialized_feed_data[attach_id] = 0;
    $unserialized_feed_data[uid] = $uid;
    $unserialized_feed_data[app] = "public";
    $unserialized_feed_data[type] = "post";
    $unserialized_feed_data[app_row_id] = 0;
    $unserialized_feed_data[app_row_table] = "feed";
    $unserialized_feed_data[publish_time] = $time;
    $unserialized_feed_data[from] = 0;
    $unserialized_feed_data[repost_count] = 0;
    $unserialized_feed_data[comment_count] = 0;
    $unserialized_feed_data[is_del] = 0;
    $unserialized_feed_data[is_repost] = 0;
    $unserialized_feed_data[is_audit] = 1;
    $FeedData->feed_data = serialize($unserialized_feed_data);
    ```
    oott123
        22
    oott123  
       2015-06-19 19:46:08 +08:00   ❤️ 1
    @incrediblink 哈哈哈哈哈哈还是好呆……
    首先你这个代码,数组下标里应该用字符串,如 $data["from"] 而不是 $data[from], 不然会报一个 Warning 级别的错误,这属于未定义常量。
    其次,你可以写成 $data = array(
    'a'=> 'b',
    'c'=> 'd'
    );
    的形式,不用写那么复杂……
    另外我觉得你应该好好系统的学一下 PHP 了……
    incrediblink
        23
    incrediblink  
    OP
       2015-06-19 20:36:00 +08:00
    @oott123 臣妾遵旨(´-ι_-`)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5228 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:16 · PVG 17:16 · LAX 01:16 · JFK 04:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.