首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Session 定期自動清理實作指南

     編輯:PHP 綜合知識

PHP 預設的 Session 機制會在 15 分鐘後自動清除變數,但在實際部署中,這項設定有時並不生效,導致 /tmp 目錄堆積大量 Session 檔案,影響伺服器效能。本文將示範如何透過修改 php.ini、建立分層儲存目錄、撰寫清理腳本並配合 Crontab 實現 Session 的定期自動清理。

一、調整 Session 儲存路徑與分層機制

開啟 php.ini,找到 session.save_path 並設定為分層路徑,例如:

session.save_path = "2;/tmp/session"

這會在 /tmp/session 下建立兩級子目錄(0-9、a-z 共 36×36=1296 個資料夾),有效分散檔案數量,避免單一目錄過大導致檔案系統效能下降。

二、建立 Session 目錄與權限初始化腳本

新增 Shell 腳本 Cleartmpsen.sh,用於建立目錄結構、設定擁有者權限,並自動修改 php.ini:

#!/bin/bash
# Version:1.0
# Author:Byrd
# Site:www.t4x.org
# Contact:root#t4x.org
# This script will clear php session before 3 hours.

i="0 1 2 3 4 5 6 7 8 9 a b c d e f"
for byrd in $i; do
  for x in $i; do
    mkdir -p /tmp/session/$byrd/$x
  done
done

chown -R bywww:bywww /tmp/session
chmod -R 1777 /tmp/session

# 清理 180 分鐘前的舊 Session 檔案
find /tmp/session -amin +180 -exec rm -rf {} \;

# 自動修改 php.ini(若尚未設定)
if [ `grep 'session.save_path =' /usr/local/php/lib/php.ini | wc -l` -eq 3 ]; then
  sed -i 's#;session.save_path = "/tmp"#;session.save_path = "/tmp"\nsession.save_path = "2;/tmp/session"#g' /usr/local/php/lib/php.ini
else
  exit 1
fi

三、加入排程任務定期執行

編輯 root 的 Crontab,每週日凌晨 3 點執行清理腳本:

# This is a config php session BY:BYRD AT:2015-11-12
0 3 * * 0 /bin/bash /byrd/scripts/Cleartmpsen.sh >/dev/null 2>&1

四、重啟 PHP-FPM 使設定生效

修改 php.ini 後,必須重啟 PHP 進程(如 systemctl restart php-fpm 或 service php-fpm restart),Session 才會寫入新路徑。

完成上述步驟,即可實現 PHP Session 的自動分層儲存與定期清理,有效避免 /tmp 目錄爆滿導致的系統異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved