程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Yaf中map路由下delimiter的問題,yafdelimiter

Yaf中map路由下delimiter的問題,yafdelimiter

編輯:關於PHP編程

Yaf中map路由下delimiter的問題,yafdelimiter


  由於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去解析,所以程序出現了問題。

  感謝鳥哥快速的答復!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved