session_start()大家一定很熟悉,它的使用方便我們不用Cookie就可以記錄用戶的相關狀態。今天我在安裝一個程序,居然出現了錯誤,原因是我的集成環境的問題。我用的是APMServ 5.2.6這個集成環境的,運行程序后出現了:
1
2 3 |
Warning
:
session_start
(
)
[
function
.session
-start
]
: open_basedir restriction in effect
.
File
(C
:\WINDOWS\TEMP\
) is not within the allowed path
(s
)
:
(F
:/APMServ5
.2
.6
/www
/htdocs
/zzw
.la
/;F
:/APMServ5
.2
.6
/tmp
/uploadtemp
/;
) in F
:\APMServ5
.2
.6\www\htdocs\zzw
.la\
include\common
.php on line
77
Fatal error: session_start() [<a href='function.session-start'>function.session-start</a>]: Failed to initialize storage module: files (path: ) in F:\APMServ5.2.6\www\htdocs\zzw.la\include\common.php on line 77 |
仔細一看,原來是session_start()出錯了。原來環境中配置的目錄是在:
1
|
X
:\APMServ5
.2
.6\tmp\sessiondata
|
提示上卻說是的C:\WINDOWS\TEMP這個目錄沒權限。這是因為我們的WEB用戶每權限寫入這個目錄。那現在怎么辦呢,看看PHP.INI這個配置文件,依然沒找到設置session的目錄,那如何修改這個目錄啊,保證能正常讀寫呢?
上網查查,結果很多結果不能讓人滿意。都說的似是而非的。但是思路卻有了,我們可以指定一個目錄,在當前腳本里。這樣,一定有訪問權限的。
以我的錯誤為例,錯誤是common.php文件中的77行出錯。看一下77行的代碼:
1
2 |
session_start
(
)
;
$group_info = cache_read ( 'group_' . ( isset ( $_SESSION [ 'group_id' ] ) |
那我們可以在這個腳本里加上一行代碼,指定我們的SESSION緩存目錄。我們可以這么做:
1
|
ini_set
(
'session.save_path'
,
dirname
(
__FILE__
)
.
'/../dirname/'
)
;
|
dirname自己定義,這樣就不會出現上述錯誤了!