php $_SERVER['orig_script_name']

WBOY
リリース: 2016-06-23 14:36:12
オリジナル
1094 人が閲覧しました

それは、あるプロジェクトで新しい機能を構築したいのですが、その新機能は会社が新たに開発したフレームワークを使用して作られているからです。

このフレームワークは本当に素晴らしい、本当に素晴らしいです。主な点は次のとおりです:

1. このフレームワークのソース コードにはコメントがありません

3.部門はその使用に慣れています

必要に応じて、このフレームワークを使用して何かを作成する方法は 1 つだけです。ソース コードを見て、最初にフレームワークの実装原理を理解してから、この鳥のものを使用して、ものを作ります。

リクエストを処理するクラスを見たとき、次のコードが目に入りました:

              <p class="sycode">                   1     static         function     get_base_url(){     2          $filename         =     (    isset    (    $_SERVER    [    '    SCRIPT_FILENAME    '    ]))     ?         basename    (    $_SERVER    [    '    SCRIPT_FILENAME    '    ])     :         ''    ;     3          if     (    isset    (    $_SERVER    [    '    ORIG_SCRIPT_NAME    '    ])     &&         basename    (    $_SERVER    [    '    ORIG_SCRIPT_NAME    '    ])     ===         $filename    ) {     4          $base_url         =         $_SERVER    [    '    ORIG_SCRIPT_NAME    '    ];      5      }     elseif     (    isset    (    $_SERVER    [    '    SCRIPT_NAME    '    ])     &&         basename    (    $_SERVER    [    '    SCRIPT_NAME    '    ])     ===         $filename    ) {     6          $base_url         =         $_SERVER    [    '    SCRIPT_NAME    '    ];     7      }     elseif     (    isset    (    $_SERVER    [    '    PHP_SELF    '    ])     &&         basename    (    $_SERVER    [    '    PHP_SELF    '    ])     ===         $filename    ) {     8          $base_url         =         $_SERVER    [    '    PHP_SELF    '    ];     9      }     else     {    10          $path         =         isset    (    $_SERVER    [    '    PHP_SELF    '    ])     ?         $_SERVER    [    '    PHP_SELF    '    ]     :         ''    ;    11          $file         =         isset    (    $_SERVER    [    '    SCRIPT_FILENAME    '    ])     ?         $_SERVER    [    '    SCRIPT_FILENAME    '    ]     :         ''    ;    12          $segs         =         explode    (    '    /    '    ,         trim    (    $file    ,         '    /    '    ));    13          $segs         =         array_reverse    (    $segs    );    14          $index         =         0    ;    15          $last         =         count    (    $segs    );    16          $base_url         =         ''    ;    17          do     {    18          $seg         =         $segs    [    $index    ];    19          $base_url         =         '    /    '         .         $seg         .         $base_url    ;    20          ++    $index    ;    21      }     while     ((    $last         >         $index    )     &&     (    false         !==     (    $pos         =         strpos    (    $path    ,         $base_url    )))     &&     (    0         !=         $pos    ));    22      }    23          24          $request_uri         =     self    ::    get_request_uri();    25          if     (    0         ===         strpos    (    $request_uri    ,         $base_url    )) {    26          return     self    ::    dirname    (    $base_url    );    27      }    28          if     (    0         ===         strpos    (    $request_uri    ,         dirname    (    $base_url    ))) {    29          return     self    ::    dirname    (    $base_url    );    30      }    31          32          $truncatedrequest_uri         =         $request_uri    ;    33          if     ((    $pos         =         strpos    (    $request_uri    ,         '    ?    '    ))     !==         false    ) {    34          $truncatedrequest_uri         =         substr    (    $request_uri    ,         0    ,         $pos    );    35      }    36          37          $basename         =         basename    (    $base_url    );    38          if     (    empty    (    $basename    )     ||         !    strpos    (    $truncatedrequest_uri    ,         $basename    )) {    39          return    ;    40      }    41          42          if     ((    strlen    (    $request_uri    )     >=         strlen    (    $base_url    ))    43          &&     ((    false         !==     (    $pos         =         strpos    (    $request_uri    ,         $base_url    )))     &&     (    $pos         !==         0    ))) {    44          $base_url         =         substr    (    $request_uri    ,         0    ,         $pos         +         strlen    (    $base_url    ));    45      }     46          return         rtrim    (self    ::    dirname    (    $base_url    )    ,         '    /    '    );    47      }              </p>
ログイン後にコピー

今日初めて変数 $_SERVER['ORIG_SCRIPT_NAME'] を見ました。 。何のために?本当に分かりません。

以前は、変数 $_SERVER['SCRIPT_NAME''] しか知りませんでした。

不明な点があると、必ず真相を突き止めます。それを調べないと不快です。

Du Niang で検索すると、次のような一節がありました。

要知道PHP当前是通过CGI来运行,还是在Apache内部运行,可以检查一下环境变量orig_script_name。
ログイン後にコピー
如果PHP通过CGI来运行,这个变量的值就是/Php/Php.exe。
ログイン後にコピー
如果Apache将PHP脚本作为模块来运行,该变量的值应该是/Phptest.php
ログイン後にコピー

そこで、ふと気づきました。それが理由であることがわかりました。

php を上手に学びたければ、それを習得するために一生懸命努力する必要があるようです。

これはただのメモです。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート