Yaf中地图路由下delimiter的有关问题
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去解析,所以程序出现了问题。
感谢鸟哥快速的答复!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans cet article, nous allons vous montrer comment réorganiser plusieurs colonnes dans PowerQuery par glisser-déposer. Souvent, lors de l'importation de données provenant de diverses sources, les colonnes peuvent ne pas être dans l'ordre souhaité. La réorganisation des colonnes vous permet non seulement de les organiser dans un ordre logique adapté à vos besoins d'analyse ou de reporting, mais elle améliore également la lisibilité de vos données et accélère les tâches telles que le filtrage, le tri et l'exécution de calculs. Comment réorganiser plusieurs colonnes dans Excel ? Il existe de nombreuses façons de réorganiser les colonnes dans Excel. Vous pouvez simplement sélectionner l'en-tête de colonne et le faire glisser vers l'emplacement souhaité. Cependant, cette approche peut devenir fastidieuse lorsqu’il s’agit de grands tableaux comportant de nombreuses colonnes. Pour réorganiser les colonnes plus efficacement, vous pouvez utiliser l'éditeur de requête amélioré. Améliorer la requête

Remarque : Les instructions root et aliasroot dans location définissent uniquement la racine de recherche sur le répertoire défini par root, c'est-à-dire que l'uri ne sera pas tronqué. Au lieu de cela, l'uri d'origine sera utilisé pour accéder au répertoire pour trouver le fichier. L'instruction aias tronquera l'URI correspondant, puis utilisera le chemin défini par l'alias plus l'URI restant comme sous-chemin pour trouver l'URI de proxy_pass dans l'emplacement Si l'URL de proxy_pass n'a pas d'URI, si la queue est "/". ", l'URI correspondant sera tronqué. Si la queue n'est pas "/", alors l'URI correspondant ne sera pas tronqué si l'URL proxy_pass contient l'URI

Plug-in de base de données ReactQuery : méthodes pour implémenter l'importation et l'exportation de données, des exemples de code spécifiques sont nécessaires. Avec l'application généralisée de ReactQuery dans le développement front-end, de plus en plus de développeurs commencent à l'utiliser pour gérer les données. Dans le développement réel, nous devons souvent exporter des données vers des fichiers locaux ou importer des données de fichiers locaux dans la base de données. Afin d'implémenter ces fonctions plus facilement, vous pouvez utiliser le plug-in de base de données ReactQuery. Le plugin de base de données ReactQuery fournit une série de méthodes

Cet article explique comment utiliser PowerQuery pour diviser les données en lignes. Lors de l'exportation de données à partir d'autres systèmes ou sources, il est courant de rencontrer des situations dans lesquelles les données sont stockées dans des cellules combinant plusieurs valeurs. Avec PowerQuery, nous pouvons facilement diviser ces données en lignes, ce qui facilite leur traitement et leur analyse. Cela peut se produire si l'utilisateur ne comprend pas les règles d'Excel et saisit accidentellement plusieurs données dans une cellule, ou si les données ne sont pas formatées correctement lors d'un copier/coller à partir d'autres sources. Le traitement de ces données nécessite des étapes supplémentaires pour extraire et organiser les informations à des fins d'analyse ou de reporting. Comment diviser les données dans PowerQuery ? Les transformations PowerQuery peuvent être basées sur une variété de facteurs différents tels que le mot

1L'unité de base du stockage informatique Unicode est l'octet, composé de 8 bits. Étant donné que l'anglais ne comprend que 26 lettres et un certain nombre de symboles, les caractères anglais peuvent être stockés directement en octets. Mais d'autres langues (comme le chinois, le japonais, le coréen, etc.) doivent utiliser plusieurs octets pour le codage en raison du grand nombre de caractères. Avec la diffusion de la technologie informatique, la technologie de codage des caractères non latins continue de se développer, mais il existe encore deux limitations majeures : pas de support multilingue : le schéma de codage d'une langue ne peut pas être utilisé dans une autre langue et il n'existe pas de norme unifiée : par exemple, il existe de nombreuses normes d'encodage en chinois telles que GBK, GB2312, GB18030, etc. Étant donné que les méthodes d'encodage ne sont pas unifiées, les développeurs doivent effectuer des conversions entre différents encodages, et de nombreuses erreurs se produiront inévitablement.

Quelles sont les similitudes et les différences entre __str__ et __repr__ ? Nous connaissons tous la représentation des chaînes. La fonction intégrée repr() de Python peut exprimer des objets sous forme de chaînes pour faciliter notre identification. Il s'agit de la "représentation sous forme de chaîne". repr() obtient la représentation sous forme de chaîne d'un objet via la méthode spéciale __repr__. Si __repr__ n'est pas implémenté, lorsque nous imprimons une instance d'un vecteur sur la console, la chaîne résultante peut l'être. >>>classExample:pass>>>print(str(Example()))>>>

1. Introduction générale La numérisation des entreprises est un sujet brûlant ces dernières années. Elle fait référence à l'utilisation de technologies numériques de nouvelle génération telles que l'intelligence artificielle, le big data et le cloud computing pour changer le modèle économique des entreprises, favorisant ainsi une nouvelle croissance de leur activité. . La numérisation des entreprises comprend généralement la numérisation des opérations commerciales et la numérisation de la gestion de l'entreprise. Ce partage introduit principalement la numérisation au niveau de la gestion de l'entreprise. La numérisation de l’information, en termes simples, signifie lire, écrire, stocker et transmettre des informations de manière numérique. Des anciens documents papier aux documents électroniques actuels et aux documents collaboratifs en ligne, la numérisation des informations est devenue la nouvelle norme dans les bureaux d'aujourd'hui. Actuellement, Alibaba utilise DingTalk Documents et Yuque Documents pour la collaboration commerciale, et le nombre de documents en ligne a atteint plus de 20 millions. De plus, de nombreuses entreprises

1. Introduction La directive location est la configuration de base du module http. Elle reçoit les requêtes envoyées par les utilisateurs sur la base de règles de correspondance d'URL prédéfinies. Sur la base des résultats de correspondance, la requête est transmise au serveur backend. Les requêtes illégales sont directement rejetées et renvoyées. 403. 404, 500 gestion des erreurs, etc. 2. Syntaxe de l'instruction de localisation location[=|~|~*|^~|@]/uri/{…} ou location@name{…} 3. Mode de correspondance d'URI L'instruction de localisation est divisée en deux modes de correspondance : 1> Ordinaire caractères Correspondance de chaîne : règles commençant par = ou sans caractères de début (~) 2> Correspondance régulière : commencer par ~ ou ~* indique une correspondance régulière, ~*
