溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php中$_SERVER['SCRIPT_NAME']與$_SERVER['SCRIPT_FILENAME']有什么不同

發(fā)布時間:2021-11-16 16:02:28 來源:億速云 閱讀:196 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“php中$_SERVER['SCRIPT_NAME']與$_SERVER['SCRIPT_FILENAME']有什么不同”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“php中$_SERVER['SCRIPT_NAME']與$_SERVER['SCRIPT_FILENAME']有什么不同”吧!

$_SERVER['SCRIPT_NAME']、$_SERVER['SCRIPT_FILENAME']及__FILE__不同

在PHP中,有時需要知道腳本所處的位置,這時會用到$_SERVER['SCRIPT_NAME']、$_SERVER['SCRIPT_FILENAME']及__FILE__。那么他們之間有什么不同呢?

1、$_SERVER['SCRIPT_NAME']
先說 $_SERVER['SCRIPT_NAME'] ,它是包含當(dāng)前運行腳本的路徑,這是從客戶端來看的路徑。假如你訪問的URL地址為 http://www.yourdomain.com/test/test.php,那么在腳本中 $_SERVER['SCRIPT_NAME'] 將會是 /test/test.php 。如果你想引用腳本自身,例如把一個表單提交給自己處理時,這可以用這個。
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">

2、$_SERVER['SCRIPT_FILENAME']
$_SERVER['SCRIPT_FILENAME'] 也是包含當(dāng)前運行腳本的路徑,與 $_SERVER['SCRIPT_NAME'] 不同的是,這是服務(wù)器端的絕對路徑。假如你訪問的URL地址為 http://www.yourdomain.com/test/test.php,那么在腳本中 $_SERVER['SCRIPT_FILENAME'] 可能會是 /home/a88888888/public_html/test/test.php (前一部分路徑因服務(wù)器而異)。說得通俗一點,這就是服務(wù)器硬盤上的路徑。

3、__FILE__
__FILE__是包含腳本文件本身的絕對路徑。它與$_SERVER['SCRIPT_FILENAME']有點不同,下面看一個實例。假設(shè)a.php包含了b.php。

test/a.php:
<?php include("b.php"); ?>

那 么在b.php中,$_SERVER['SCRIPT_FILENAME']可能會是 /home/a88888888/public_html /test/a.php。雖然$_SERVER['SCRIPT_FILENAME']是在b.php內(nèi),但b.php是在a.php內(nèi)運行的,因此得到 的是a.php的路徑。而在b.php中,__FILE__可能會是 /home/a88888888/public_html/test/b.php, 這是__FILE__所處的真正位置。
 

另外還有一個$_SERVER['PHP_SELF'],看上去似乎和$_SERVER['SCRIPT_NAME']一樣,不過如果你訪問的URL地址為 http://www.yourdomain.com/test/test.php/foo.bar,那么 $_SERVER['PHP_SELF'] 將會是 /test/test.php/foo.bar。服務(wù)器獲取當(dāng)前文件名時會用到!

來自  http://hi.baidu.com/lovehosejing/item/96af172986fb55929c63d1ec

PHP $_SERVER['SCRIPT_FILENAME'] 與 __FILE__

通常情況下,PHP $_SERVER['SCRIPT_FILENAME'] 與 __FILE__ 都會返回 PHP 文件的完整路徑(絕對路徑)與文件名:

<?php
echo 'SCRIPT_FILENAME 為:',$_SERVER['SCRIPT_FILENAME'];
echo '<br />';
echo '__FILE__ 為:',__FILE__;
?>

上述測試代碼拷貝至 test.php 并訪問該文件(http://127.0.0.1/php/test.php),得到如下結(jié)果:

SCRIPT_FILENAME 為:E:/web/html/php/test.php
__FILE__ 為:E:\web\html\php\test.php

提示:在 windows 平臺測試,得到結(jié)果如上所示可能會出現(xiàn)路徑分隔符的細微差別。

$_SERVER['SCRIPT_FILENAME'] 與 __FILE__ 區(qū)別

盡管 $_SERVER['SCRIPT_FILENAME'] 與 __FILE__ 非常相似,但在文件被 include 或 require 包含的時候,二者還是有細微區(qū)別。

將上述測試代碼拷貝至D:\xampp\htdocs\ZZZZ\test\test.php ,然后在剛才的 test.php 文件內(nèi)包含 inc.php :

<?php
include 'common/inc.php';
?>

這時候再訪問 test.php 文件時,輸出結(jié)果:

SCRIPT_FILENAME 為:D:/xampp/htdocs/ZZZZ/test/test.php
SCRIPT_NAME   為   "/ZZZZ/test/test.php" 
PHP_SELF   為    "/ZZZZ/test/test.php"

__FILE__ 為:D:\xampp\htdocs\ZZZZ\test\inc.php

可見二者的差別是:$_SERVER['SCRIPT_FILENAME'] 反映的是當(dāng)前執(zhí)行程序的絕對路徑及文件名;__FILE__ 反映的是原始文件(被包含文件)的絕對路徑及文件名。

感謝各位的閱讀,以上就是“php中$_SERVER['SCRIPT_NAME']與$_SERVER['SCRIPT_FILENAME']有什么不同”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對php中$_SERVER['SCRIPT_NAME']與$_SERVER['SCRIPT_FILENAME']有什么不同這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI