V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vst93
V2EX  ›  PHP

有人遇到过 predis 的密码特殊符号问题吗 ?

  •  
  •   vst93 · 2021-08-11 21:55:32 +08:00 · 1659 次点击
    这是一个创建于 960 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天遇到一个密码包含 @ 的 reids,用 https://github.com/predis/predis 死活连不上,看了下包代码感觉是这个包没处理这种情况,有遇到过的朋友吗?希望不吝赐教


    别和我说百度查,我已经折腾了很久了。。。。

    13 条回复    2021-08-12 11:11:18 +08:00
    Kinnice
        1
    Kinnice  
       2021-08-11 22:09:52 +08:00 via Android
    vst93
        2
    vst93  
    OP
       2021-08-11 22:27:30 +08:00 via iPhone
    @Kinnice 请审题
    Mitt
        3
    Mitt  
       2021-08-11 22:51:03 +08:00
    你是不是用的 URI,URL 编码一下密码
    vst93
        4
    vst93  
    OP
       2021-08-12 08:51:39 +08:00 via iPhone
    @Mitt 识货,predis 不行
    vst93
        5
    vst93  
    OP
       2021-08-12 08:52:12 +08:00 via iPhone
    @Mitt 试过,predis 不行
    qwerthhusn
        6
    qwerthhusn  
       2021-08-12 08:57:59 +08:00
    快!修改,PR
    qq1340691923
        7
    qq1340691923  
       2021-08-12 09:06:09 +08:00
    快!换语言
    Kinnice
        8
    Kinnice  
       2021-08-12 10:00:31 +08:00
    @vst93 ??? ![Snipaste_2021-08-12_09-59-55.png]( https://i.loli.net/2021/08/12/5RNwuy1sTzcLMdp.png)
    Kinnice
        9
    Kinnice  
       2021-08-12 10:04:54 +08:00
    ![Snipaste_2021-08-12_10-03-32.png]( https://i.loli.net/2021/08/12/5S4UmoCpXwLPYMv.png)
    vst93
        10
    vst93  
    OP
       2021-08-12 10:29:16 +08:00
    @Kinnice 感谢,不过我的实际情况是运维还配置了 username (redis6 以上支持 username),如果方便还请麻烦您试试配置 username 后密码带“@”的情况
    vst93
        11
    vst93  
    OP
       2021-08-12 10:37:06 +08:00
    @Kinnice 因为这种情况下我的密码去掉 @ ,提示的是密码错误,带上 @提示的是配置错误,我猜测与 "tcp://username:password@host:port" 的内部解析有关 password 带 @导致解析不到正确 配置,但是 password url_encode 后,predis 不会解析回来就很难受了,无奈英文不太好,墙内外查了一圈居然没什么人提着问题
    vst93
        12
    vst93  
    OP
       2021-08-12 11:03:21 +08:00
    问题解决了,包不存在问题,主要是 username 是 redis6 以后的,所以要用 username 首先包要升到最新 的,然后 config 里加上 username=>xxxx 就行了,或者用 如下 方式

    -------------

    $options = [
    'cluster' => 'redis',
    'db' => 0
    ];
    $servers = [
    "tcp://username:password@host:port"
    ];

    new Client($servers,$options);


    以上问题已解决,感谢 @Kinnice 的回复
    vst93
        13
    vst93  
    OP
       2021-08-12 11:11:18 +08:00
    更正:应该是 $servers = [
    "tcp://host:port?username=xxx&password=xxx"
    ];
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   937 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:52 · PVG 04:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.