Heim >php教程 >PHP源码 >php session实现多级目录存放

php session实现多级目录存放

WBOY
WBOYOriginal
2016-06-08 17:19:511244Durchsuche

session多级目录存放用到的不多,但有一些朋友会如此来设置了,但小编发现多级目录存放有时会碰到无效的问题,这里我们来看看。

<script>ec(2);</script>


当一个目录下有很多文件时,服务器的处理性能会变低,php默认的session仅仅存放在/tmp目录下,未进行分级,当有一定的访问量时,就存在性能问题了。

首先,修改 php.ini的 session.save_path 选项修改如下:
session.save_path = “2;/tmp/session” (去掉前面分号)
表示把session存放在 “/tmp/session” 目录下,并且分成 2 级子目录

一般情况下2级目录就够了,就能够处理相当大的访问量了

———————–

其他注释

session.hash_function = 0
; 生成SID的散列算法。SHA-1的安全性更高一些
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
; 建议使用SHA-1。

session.hash_bits_per_character = 4
; 指定在SID字符串中的每个字符内保存多少bit,
; 这些二进制数是hash函数的运算结果。
; 4: 0-9, a-f
; 5: 0-9, a-v
; 6: 0-9, a-z, A-Z, “-“, “,”
; 建议值为 5

————————–

php源码文件中ext/session/mod_files.sh文件,可以辅助生成目录,就不用自己在写脚本了


#! /bin/sh
 
if test "$2" = ""; then
echo "usage: $0 basedir depth"
exit 1
fi
 
if test "$2" = "0"; then
exit 0
fi
 
hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if test "$3" -a "$3" -ge "5"; then
hash_chars="$hash_chars g h i j k l m n o p q r s t u v"
if test "$3" -eq "6"; then
hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"
fi
fi
 
for i in $hash_chars; do
newpath="$1/$i"
mkdir $newpath || exit 1
sh $0 $newpath `expr $2 - 1` $3
done
设置为可执行之后,运行以下命令来创建哈希目录:
#cd /root/soft_install/php-5.3.5/ext/session
#./mod_files.sh /tmp/session 2 5

三个参数依次表示,存放路径, 几级目录,每个目录生成多少个目录(参考session.hash_bits_per_character)

另外需要注意修改 /tmp/session的权限,保证运行php的帐号有权限读写

php中设置多级目录session的问题


在 php.ini 中找到 session.save_path 将值设置为 session.save_path = '3;/tmp/session'; 即可开启三级目录保存session。但是php不会自动生成目录结构,这时可以借助源码包 ext/session 目录下的 mod_files.sh 来生成目录

$ bash mod_files.sh /tmp/session 3

生成完成后发现仍然不能生成session,纠结了半天,打开mod_files.bat才发现玄机,原来后面还需要带一个参数,对应于 php.ini 中的 session.hash_bits_per_character ,这个值默认是4,development和production版本的默认配置里是5,于是用下面的命令从新生成目录

$ bash mod_files.sh /tmp/session 3 5

终于可以登录了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn