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自己定义,这样就不会出现上述错误了!