欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Yaf中地图路由下delimiter的有关问题

程序员文章站 2024-02-06 15:01:16
...
Yaf中map路由下delimiter的问题

  由于map路由下用户请求的url会按照"/"分级对应到controllers下的目录下的Controller上,action则默认为indexAction,所以想要实现/key1/param1/key2/param2这种形式进行传参,就要通过delimiter来讲url分割成req_uri和query_str两个部分。

  在实践中,定义了delimiter(尽管并没有用到它的功能),这时,如果用户的请求(更多的是爬虫或扫站)无意中包含以下形式:/aaa/bbb[delimiter](xxx)?/key1/param1/key2/param2...,会造成程序崩溃。

  将这个问题提给鸟哥后,鸟哥迅速给出了修复(18~19行):

 1 if (Z_TYPE_P(delimer) == IS_STRING 2             && Z_STRLEN_P(delimer)) { 3         if ((query_str = strstr(req_uri, Z_STRVAL_P(delimer))) != NULL 4             && *(query_str - 1) == '/') { 5             tmp  = req_uri; 6             rest = query_str + Z_STRLEN_P(delimer); 7             if (*rest == '\0') { 8                 req_uri     = estrndup(req_uri, query_str - req_uri); 9                 query_str     = NULL;10                 efree(tmp);11             } else if (*rest == '/') {12                 req_uri     = estrndup(req_uri, query_str - req_uri);13                 query_str   = estrdup(rest);14                 efree(tmp);15             } else {16                 query_str = NULL;17             }18         } else {19             query_str = NULL;20         }

通过delimer获取了query_str后,判断delimer的前一个字符是"/"的情况,却没有判断不是的情况,导致不符合/aaa/bbb/[delimer]/key1/param1/...形式的urk被截断成req_uri和query_str去解析,所以程序出现了问题。

  感谢鸟哥快速的答复!

Yaf中地图路由下delimiter的有关问题

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • Yaf中地图路由下delimiter的有关问题
  • 专题推荐