ホームページ バックエンド開発 PHPチュートリアル Yaf のマップ ルーティングの区切り文字に関連する問題

Yaf のマップ ルーティングの区切り文字に関連する問題

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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Power Query で複数の列をドラッグ アンド ドロップで並べ替える方法 Power Query で複数の列をドラッグ アンド ドロップで並べ替える方法 Mar 14, 2024 am 10:55 AM

この記事では、PowerQuery で複数の列をドラッグ アンド ドロップで並べ替える方法を説明します。さまざまなソースからデータをインポートする場合、列が希望の順序にならないことがよくあります。列の順序を変更すると、分析やレポートのニーズに合った論理的な順序で列を配置できるだけでなく、データの読みやすさが向上し、フィルタリング、並べ替え、計算の実行などのタスクが高速化されます。 Excelで複数の列を並べ替えるにはどうすればよいですか? Excel で列を再配置する方法はたくさんあります。列ヘッダーを選択し、目的の場所にドラッグするだけです。ただし、多くの列を含む大きなテーブルを扱う場合、このアプローチは面倒になる可能性があります。列をより効率的に再配置するには、拡張されたクエリ エディターを使用できます。クエリの強化

nginxの場所でuriをインターセプトする方法 nginxの場所でuriをインターセプトする方法 May 18, 2023 pm 12:07 PM

注: location の root および aliasroot 命令は、root によって設定されたディレクトリに検索ルートを設定するだけです。つまり、uri は切り詰められません。代わりに、元の uri がファイルを検索するディレクトリにジャンプするために使用されます。 aias 命令は一致する URI を切り捨て、エイリアスで設定したパスと残りの URI をサブパスとして使用して、その場所にある proxy_pass の URI を見つけます。proxy_pass の URL に URI がない場合、末尾が "/ 「」の場合、一致する URI は切り詰められます。末尾が「/」でない場合、proxy_pass URL に uri が含まれている場合、一致する URI は切り詰められません。

React Query データベース プラグイン: データをインポートおよびエクスポートする方法 React Query データベース プラグイン: データをインポートおよびエクスポートする方法 Sep 26, 2023 pm 05:37 PM

ReactQuery データベース プラグイン: データのインポートとエクスポートを実装するためのメソッド、特定のコード サンプルが必要 フロントエンド開発で 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

1 Unicode コンピュータ ストレージの基本単位は 8 ビットで構成されるバイトです。英語は 26 文字といくつかの記号のみで構成されているため、英語の文字はバイト単位で直接格納できます。ただし、他の言語 (中国語、日本語、韓国語など) では、文字数が多いため、エンコードに複数のバイトを使用する必要があります。コンピューター技術の普及に伴い、非ラテン文字エンコード技術は発展を続けていますが、依然として 2 つの大きな制限があります。 多言語サポートがないこと。 ある言語のエンコード スキームを別の言語で使用することはできません。また、統一された標準もありません。たとえば、中国語には GBK、GB2312、GB18030 など、多くのエンコード標準があります。エンコード方式が統一されていないため、開発者は異なるエンコード間で相互に変換する必要があり、必然的に多くのエラーが発生します。

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()))>>>

知識強化と事前トレーニングされた大規模モデルに基づくクエリ意図認識 知識強化と事前トレーニングされた大規模モデルに基づくクエリ意図認識 May 19, 2023 pm 02:01 PM

1. 背景 はじめに 近年、エンタープライズデジタル化が注目されており、人工知能、ビッグデータ、クラウドコンピューティングなどの新世代デジタル技術を活用して企業のビジネスモデルを変革し、企業ビジネスの新たな成長を促進することを指します。 。企業のデジタル化には、通常、業務運営のデジタル化と企業管理のデジタル化が含まれます。この共有化では主に企業管理レベルのデジタル化を導入します。情報のデジタル化とは、簡単に言えば、デジタル的な方法で情報を読み取り、書き込み、保存し、送信することを意味します。以前の紙の文書から現在の電子文書やオンラインで共同作業を行う文書に至るまで、情報のデジタル化は今日のオフィスの新たな常態となっています。現在、アリババはビジネス コラボレーションに DingTalk ドキュメントと Yuque ドキュメントを使用しており、オンライン ドキュメントの数は 2,000 万件以上に達しています。さらに、多くの企業は社内で

Nginx Location ディレクティブの URI 一致ルールとは何ですか? Nginx Location ディレクティブの URI 一致ルールとは何ですか? May 14, 2023 pm 11:58 PM

1. はじめに location ディレクティブは http モジュールの中核となる構成です. 事前定義された URL 一致ルールに基づいてユーザーから送信されたリクエストを受け取ります. 一致結果に基づいてリクエストはバックエンド サーバーに転送されます. 不正なリクエストは直接拒否されて返されます. 403、404、500エラー処理など2. ロケーション命令の構文 location[=|~|~*|^~|@]/uri/{…} または location@name{…} 3. URI マッチングモード ロケーション命令は 2 つのマッチングモードに分かれています: 1> 通常文字列のマッチング: = で始まるルール、または先頭文字 (~) なしのルール 2> 通常のマッチング: ~ または ~* で始まる通常のマッチングを示し、~*

See all articles