首頁 後端開發 php教程 Yaf中地图路由下delimiter的有关问题

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

Jun 13, 2016 pm 12:23 PM
query str uri

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行):

 

<span style="color: #008080;"> 1</span> <span style="color: #0000ff;">if</span> (Z_TYPE_P(delimer) == <span style="color: #008080;">IS_STRING</span><span style="color: #008080;"> 2</span>             &&<span style="color: #000000;"> Z_STRLEN_P(delimer)) {</span><span style="color: #008080;"> 3</span>         <span style="color: #0000ff;">if</span> ((query_str = <span style="color: #008080;">strstr</span>(req_uri, Z_STRVAL_P(delimer))) != <span style="color: #0000ff;">NULL</span><span style="color: #008080;"> 4</span>             && *(query_str - 1) == '/'<span style="color: #000000;">) {</span><span style="color: #008080;"> 5</span>             tmp  =<span style="color: #000000;"> req_uri;</span><span style="color: #008080;"> 6</span>             rest = query_str +<span style="color: #000000;"> Z_STRLEN_P(delimer);</span><span style="color: #008080;"> 7</span>             <span style="color: #0000ff;">if</span> (*rest == '\0'<span style="color: #000000;">) {</span><span style="color: #008080;"> 8</span>                 req_uri     = estrndup(req_uri, query_str -<span style="color: #000000;"> req_uri);</span><span style="color: #008080;"> 9</span>                 query_str     = <span style="color: #0000ff;">NULL</span><span style="color: #000000;">;</span><span style="color: #008080;">10</span> <span style="color: #000000;">                efree(tmp);</span><span style="color: #008080;">11</span>             } <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> (*rest == '/'<span style="color: #000000;">) {</span><span style="color: #008080;">12</span>                 req_uri     = estrndup(req_uri, query_str -<span style="color: #000000;"> req_uri);</span><span style="color: #008080;">13</span>                 query_str   =<span style="color: #000000;"> estrdup(rest);</span><span style="color: #008080;">14</span> <span style="color: #000000;">                efree(tmp);</span><span style="color: #008080;">15</span>             } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {</span><span style="color: #008080;">16</span>                 query_str = <span style="color: #0000ff;">NULL</span><span style="color: #000000;">;</span><span style="color: #008080;">17</span> <span style="color: #000000;">            }</span><span style="color: #008080;">18</span>         } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {</span><span style="color: #008080;">19</span>             query_str = <span style="color: #0000ff;">NULL</span><span style="color: #000000;">;</span><span style="color: #008080;">20</span>         }
登入後複製

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

  感谢鸟哥快速的答复!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何透過拖曳放在Power Query中重新排序 如何透過拖曳放在Power Query中重新排序 Mar 14, 2024 am 10:55 AM

在這篇文章中,我們將向你們展示如何透過拖放在PowerQuery中重新排序多個欄位。通常,從各種來源匯入資料時,列可能不是所需的順序。重新排序列不僅允許您按照符合您的分析或報告需求的邏輯順序排列它們,還可以提高資料的可讀性,並加快過濾、排序和執行計算等任務。如何在Excel中重新排列多個列?在Excel中,重新排列列的方法有多種。您可以簡單地選擇列標題,然後將其拖曳到所需位置。但是,當處理包含許多列的大表時,這種方法可能會變得繁瑣。為了更有效率地重新排列列,您可以使用增強查詢編輯器。透過增強查詢編

nginx location中uri的截取如何實現 nginx location中uri的截取如何實現 May 18, 2023 pm 12:07 PM

說明:location中的root和aliasroot指令只是將搜尋的根設定為root設定的目錄,即不會截斷uri,而是使用原始uri跳轉該目錄下查找文件aias指令則會截斷匹配的uri,然後使用alias設定的路徑加上剩餘的uri作為子路徑進行查找location中的proxy_pass的uri如果proxy_pass的url不帶uri如果尾部是"/",則會截斷匹配的uri如果尾部不是"/",則不會截斷匹配的uri如果proxy_pass的url帶uri

React Query 資料庫外掛程式:實作資料匯入和匯出的方法 React Query 資料庫外掛程式:實作資料匯入和匯出的方法 Sep 26, 2023 pm 05:37 PM

ReactQuery資料庫外掛:實作資料匯入和匯出的方法,需要具體程式碼範例隨著ReactQuery在前端開發中的廣泛應用,越來越多的開發者開始使用它來管理資料。而在實際開發中,我們經常需要將資料匯出到本機檔案或從本機檔案匯入資料到資料庫。為了更方便地實現這些功能,可以使用ReactQuery資料庫插件。 ReactQuery資料庫外掛提供了一系列方

如何使用Power Query將資料拆分為NTFS 如何使用Power Query將資料拆分為NTFS Mar 15, 2024 am 11:00 AM

本文將介紹如何使用PowerQuery將資料進行行拆分。從其他系統或來源匯出資料時,常常會遇到資料儲存在儲存格中組合多個值的情況。透過PowerQuery,我們可以輕鬆將這樣的資料拆分成行,讓資料更易於處理和分析。若使用者不了解Excel的規則並意外將多個資料輸入到一個儲存格,或從其他來源複製/貼上資料時未正確格式化,就會發生這種情況。要處理這些數據,需要額外的步驟來提取和整理信息,以便進行分析或報告。如何在PowerQuery中拆分資料? PowerQuery轉換可以根據各種不同因素(例如字

Python內建類型str原始碼分析 Python內建類型str原始碼分析 May 09, 2023 pm 02:16 PM

1Unicode電腦儲存的基本單位是位元組,由8個位元組組成。由於英文只由26個字母加若干符號組成,因此英文字元可以直接用位元組來保存。但是其他語言(例如中日韓等),由於字元眾多,不得不使用多個位元組來進行編碼。隨著電腦科技的傳播,非拉丁文字元編碼技術不斷發展,但是仍有兩個比較大的限制:不支援多語言:一種語言的編碼方案不能用於另一種語言沒有統一標準:例如中文就有GBK、GB2312、GB18030等多種編碼標準由於編碼方式不統一,開發人員就需要在不同編碼之間來回轉換,不可避免地會出現很多錯

基於知識增強和預訓練大模型的 Query 意圖識別 基於知識增強和預訓練大模型的 Query 意圖識別 May 19, 2023 pm 02:01 PM

一、背景介紹企業數位化是近年來很熱的一個話題,它是指運用人工智慧、大數據、雲端運算等新一代數位技術,改變企業的業務模式,從而推動企業業務產生新的成長。企業數位化一般來說包括業務經營的數位化和企業管理的數位化。本次分享主要介紹企業管理層面的數位化。資訊數位化,簡單來說,就是把訊息用數位化的方式進行讀寫、儲存和傳遞。從以前的紙本文檔到現在的電子文檔以及線上協同文檔,資訊數位化已經變成了現在辦公室的新常態。目前阿里使用釘釘文件和語雀文件進行業務協同,線上文件數量已經達到了2000萬以上。另外很多企業內部會

Python中__str__和__repr__有什麼異同點 Python中__str__和__repr__有什麼異同點 Apr 29, 2023 pm 07:58 PM

__str__和__repr__有什麼異同?字串的表示形式我們都知道,Python的內建函數repr()能夠把物件用字串的形式表達出來,方便我們辨認。這就是“字串表示形式”。 repr()就是透過__repr__這個特殊方法得到一個物件的字串表示形式的。如果沒有實作__repr__,當我們在控制台裡列印一個向量的實例時,得到的字串可能會是。 >>>classExample:pass>>>print(str(Example()))>>>

Nginx Location指令URI符合規則是什麼 Nginx Location指令URI符合規則是什麼 May 14, 2023 pm 11:58 PM

1.介紹location指令是http模組當中最核心的一項配置,根據預先定義的url匹配規則來接收用戶發送的請求,根據匹配結果,將請求轉發到後台伺服器、非法的請求直接拒絕並返回403、 404、500錯誤處理等。 2.location指令語法location[=|~|~*|^~|@]/uri/{…}或location@name{…}3、uri匹配模式location指令分為兩種匹配模式:1>普通字符串匹配:以=開頭或開頭無引導字元(~)的規則2>正則匹配:以~或~*開頭表示正則匹配,~*

See all articles