問題タブ [pathinfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - cgi.fix_pathinfo = 0 の何が問題になっていますか?
nginx
リクエストを処理するためのセットアップを試みていphp
ます。このリンクは言う:
このガイドは、php.ini cgi.fix_pathinfo = 1 (デフォルト) で正常に実行されます。cgi.fix_pathinfo = 0 に変更することを主張するガイドもありますが、そうすると PHP_SELF 変数が壊れます (DOCUMENT_URI と等しくありません)。
ただし、これはそのような警告を発しません。
php.ini で cgi.fix_pathinfo=0 を設定します。これにより、PHP インタープリターは指定されたリテラル パスのみを試行し、ファイルが見つからない場合は処理を停止します。
php
ドキュメントから判断する:
これを 1 に設定すると、PHP CGI はそのパスを仕様に準拠するように修正します。ゼロを設定すると、PHP は以前と同じように動作します。デフォルトではオンになっています。PATH_TRANSLATED ではなく SCRIPT_FILENAME を使用するようにスクリプトを修正する必要があります。
デフォルト値のままにしておく方がよいでしょう。
では、まず壊れたPHP_SELF
変数を再現するにはどうすればよいでしょうか。じゃあどっち?0に設定cgi.fix_pathinfo
するのは良い考えですか?または、他のソリューションを選択する必要がありますか?
php - Symfony2 は URL のパス情報を明示的に取得します
たとえば、私は URL を持っていますhttp://server/mysite/web/app_dev.php/resource/1
。私はGET
リクエストを行っており、対応するアクションはResourceController::getAction
です。
このコントローラ アクションで を呼び出すと$request->getPathInfo()
、 が返されます/resource/1
。
しかし、同じコントローラーで、別のリソースの URL を使用して Request オブジェクトを作成し、それを呼び出すgetPathInfo()
と、より長いバージョンが返されます。
この場合getPathInfo()
だけ返品するにはどうすればよいでしょうか?/another_resource/1
また
http://server/mysite/web/app_dev.php/another_resource/1
エンドポイント URLを/another_resource/1
Symfony2に変換する最も安全な方法を誰でも提案できますか?
なぜこれが必要なのか知りたい場合
コントローラー アクションは、リクエスト コンテンツでいくつかの URL を受信しています。アクションは、これらの URL を解析して、対応するリソースを認識する必要があります。$router->match
URLからパラメータを取得する機能を利用しようとしています。一致関数は/another_resource/1
部分のみを想定しています。
php - マルチバイト UTF-8 ファイル名を使用した PHP basename() および pathinfo()
PHP 関数の basename() と pathinfo() が、マルチバイトの utf-8 名で奇妙な動作をすることがわかりました。最初のラテン文字または句読点まで、すべての非ラテン文字が削除されます。ただし、その後の非ラテン文字は保持されます。
しかし不思議なことに、pathinfo() の dirname 部分は正常に動作します:
PHP のドキュメントでは、basename()およびpathinfo()pathinfo(..., PATHINFO_BASENAME)
関数はロケールを認識していると警告していますが、これはとの間の不一致を正当化するものではありません。またpathinfo(..., PATHINFO_DIRNAME)
、ラテン文字との相対的な位置に応じて、同一の非ラテン文字が破棄または受け入れられるという事実は言うまでもありません。文字。
PHPのバグのようです。
「ベース名」チェックは、セキュリティ上の問題が直接トラバーサルを回避するために非常に重要であるため、ユニコード入力で適切に機能する信頼できるベース名フィルターはありますか?