簡體   English   中英

$_SERVER['PHP_SELF'] 和 $_SERVER['SCRIPT_NAME'] 有什么區別?

[英]What's the difference between $_SERVER['PHP_SELF'] and $_SERVER['SCRIPT_NAME']?

我有一個 php 框架,我使用$_SERVER['SCRIPT_NAME']來優化可移植性。 這樣我就不再需要手動配置路徑了。

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);

但我注意到$_SERVER['SCRIPT_NAME']$_SERVER['PHP_SELF']返回完全相同的字符串。 那么,有什么區別呢? 我應該如何選擇它們?

區別

http://sandbox.phpcode.eu/g/3e38d.php/test

腳本名稱是文件的絕對路徑。

PHP_SELF是您當前所在的腳本(以及.php之后的“路徑”)

就像$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST']

http://sandbox.phpcode.eu./g/f5093.php

http://sandbox.phpcode.eu/g/f5093.php

發現一處不同

SCRIPT_NAME

包含當前腳本的路徑。 這對於需要指向自身的頁面很有用。 __FILE__常量包含當前(即包含的)文件的完整路徑和文件名。

PHP_SELF

當前執行腳本的文件名,相對於文檔根目錄。 例如,地址http://example.com/test.php/foo.bar的腳本中的$_SERVER['PHP_SELF']將是/test.php/foo.bar __FILE__常量包含當前(即包含的)文件的完整路徑和文件名。 如果 PHP 作為命令行處理器運行,則此變量包含自 PHP 4.3.0 以來的腳本名稱。 以前它不可用。

來源php.net

有一件事:

查看http://www.yoursite.com/example/index.php/dir/test

$_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

$_SERVER['SCRIPT_NAME'] == '/example/index.php';

ETA:我自己試過

在 localhost http://127.0.0.1:8887/index.php/dir/test上試過這個

echo $_SERVER['PHP_SELF'] . "<br />";
echo $_SERVER['SCRIPT_NAME'];

Output 是:

/index.php/dir/test 
/index.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM