目錄分隔符,是定義php的內(nèi)置常量。在調(diào)試機器上,在windows我們習(xí)慣性的使用“\”作為文件分隔符,但是在linux上系統(tǒng)不認(rèn)識這個標(biāo)識,于是就要引入這個php內(nèi)置常量了:DIRECTORY_SEPARATOR
php的內(nèi)置常量DIRECTORY_SEPARATOR是一個顯示系統(tǒng)分隔符的命令,DIRECTORY_SEPARATOR是php的內(nèi)部常量,不需要任何定義與包含即可直接使用。
DIRECTORY_SEPARATOR是一個顯示系統(tǒng)分隔符的命令,DIRECTORY_SEPARATOR是PHP的內(nèi)部常量,不需要任何定義與包含即可直接使用。
眾所周知,在windows下路徑分隔符是(當(dāng)然/在部分系統(tǒng)上也是可以正常運行的),在linux上路徑的分隔符是/,這就導(dǎo)致了一個問題,比如開發(fā)機器是windows,有一個圖片上傳程序,調(diào)試機器上指定的上傳文件保存目錄是:define(‘ROOT’, dirname(FILE).”upload”),在本地調(diào)試都很正常,但是上傳到linux服務(wù)器的時候會發(fā)現(xiàn)會出錯。
這個問題就是出在文件的分隔符上,windows上習(xí)慣性的使用作為文件分隔符,但是在linux上人家是不認(rèn)識這個標(biāo)識的,人家只認(rèn)識/,于是就要引入下面這個php內(nèi)置變量了:DIRECTORY_SEPARATOR。
上面的寫法可以改寫為以下無錯寫法:
define(‘ROOT’, dirname(FILE).DIRECTORY_SEPARATOR.”upload”);
這樣就可以確保不會出錯了。
例如discuz里面是這樣寫的:define(‘S_ROOT’, dirname(FILE).DIRECTORY_SEPARATOR);
回到問題本身上,DIRECTORY_SEPARATOR是一個返回跟操作系統(tǒng)相關(guān)的路徑分隔符的php內(nèi)置命令,在windows上返回,而在linux或者類unix上返回/,就是這么個區(qū)別,通常在定義包含文件路徑或者上傳保存目錄的時候會用到。
1 2 | require_once dirname(FILE).DIRECTORY_SEPARATOR . './../../../wp-config.php'; require_once dirname(FILE).DIRECTORY_SEPARATOR.'inc/options.php'; |
這兩句PHP代碼,為什么前面部分用DIRECTORY_SEPARATOR,而后面部分卻用"/"呢
眾所周知,windows下的是\和/,而LINUX下的是/
在程序本地運行很正常,上傳到服務(wù)器后,發(fā)現(xiàn)圖片沒有顯示出來,圖片鏈接是絕對路徑 var/,而且當(dāng)中帶有 \ 但是我記得這個路徑已經(jīng)處理成相對路徑的
1 2 3 4 | $path = dirname(dirname(dirname(FILE))).'\\'; $search = array( $path, '\\'); $replace = array( '', '/'); return str_replace($search,$replace,$this->tempfolder).$this->filename_prefix.$public.'.jpg'; |
第一行代碼的用在LINUX "\\", 就不行。
解決的辦法是 用PHP 預(yù)定義常量DIRECTORY_SEPARATOR來代替'\','/'這樣的路徑分隔符,以前覺得既然windows,LINUX 都支持/,那都用成 / 得了,這是沒錯的。可是從這個例子可以看出,當(dāng)要對路徑字符串進(jìn)行處理的時候,就比較危險了,所以最好還是用DIRECTORY_SEPARATOR吧
今天在nginx部署項目,在瀏覽器輸入http://127.0.0.2/index.php/system/category/?action=list
老是提示error
nginx配置沒有問題,下了其他應(yīng)用,可以正常運行
查看了下index.php的代碼
發(fā)現(xiàn)
$uriArr = explode(DIRECTORY_SEPARATOR, $_SERVER['REQUEST_URI']);
var_dump($uriArr);
輸出是string
并沒有分割$_SERVER['REQUEST_URI']
去網(wǎng)上查了下資料,原來
DIRECTORY_SEPARATOR是php的內(nèi)置變量,顯示系統(tǒng)分隔符的,在win下 \ 在linux下 /
將語句改為$uriArr = explode('/', $_SERVER['REQUEST_URI']);
OK了
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇