为了账号安全,请及时绑定邮箱和手机立即绑定

清理php会话文件

清理php会话文件

PHP
临摹微笑 2019-08-13 14:24:26
清理php会话文件在我的网站上,我使用PHP会话。会话信息存储在我的./session路径中的文件中。几个月后,我发现这些会话文件永远不会被删除,现在这个目录中有145.000个。应该如何清理?我是否必须以编程方式执行此操作,或者是否可以使用某个可以自动执行此清理的设置?编辑忘记提及:此站点在提供程序上运行,因此我无法访问命令行。我确实有ftp-access,但是会话文件属于另一个用户(我猜的是webserver进程运行的那个)从我得到的第一个答案我认为它不仅仅是服务器或PHP上的设置,所以我想我会必须在PHP中为它实现一些东西,并定期从浏览器调用它(可能来自在我家自己的机器上运行的cron作业)
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

Debian / Ubuntu使用/etc/cron.d/php5中定义的cronjob处理此问题


# /etc/cron.d/php5: crontab fragment for php5

#  This purges session files older than X, where X is defined in seconds

#  as the largest value of session.gc_maxlifetime from all your php.ini

#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime


# Look for and purge old sessions every 30 minutes

09,39 *     * * *     root   [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm

maxlifetime脚本通过检查php.ini只返回会话应该保持活动的分钟数,它看起来像这样


#!/bin/sh -e


max=1440


for ini in /etc/php5/*/php.ini; do

        cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);

        [ -z "$cur" ] && cur=0

        [ "$cur" -gt "$max" ] && max=$cur

done


echo $(($max/60))


exit 0


查看完整回答
反对 回复 2019-08-13
?
心有法竹

TA贡献1866条经验 获得超5个赞

如果有人想用cronjob做这件事,请记住:

find .session/ -atime +7  -exec rm {} \;

当有很多文件时,真的很慢。

考虑使用此代替:

find .session/ -atime +7 | xargs -r rm

如果你的文件名中有空格,请使用:

find .session/ -atime +7 -print0 | xargs -0 -r rm

xargs将使用要删除的文件填充命令行,然后运行比rm命令少得多-exec rm {} \;rm命令,这将调用每个文件的命令。

只是我的两分钱


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 342 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信