usmannasir / cyberpanel

Cyber Panel - The hosting control panel for OpenLiteSpeed
GNU General Public License v3.0
1.49k stars 582 forks source link

[BUG] PHP session.save_path not updated for PHP 8.1 on Upgrade #1091

Open jordantrizz opened 1 year ago

jordantrizz commented 1 year ago

Describe the bug PHP session files aren't cleared for lsphp8.1 due to php.ini using the default path of /tmp, which will eventually fill up the server's storage.

To Reproduce

  1. Install a previous version of Cyberpanel.
  2. Upgrade.
  3. grep 'session.save_path' /usr/local/lsws/lsphp/etc/php//litespeed/php.ini

Expected behaviour session.save_path should equal /var/lib/lsphp/session/lsphp81

Screenshots

❯ grep 'session.save_path' /usr/local/lsws/lsphp*/etc/php/*/litespeed/php.ini
/usr/local/lsws/lsphp72/etc/php/7.2/litespeed/php.ini:;     session.save_path = "N;/path"
/usr/local/lsws/lsphp72/etc/php/7.2/litespeed/php.ini:;     session.save_path = "N;MODE;/path"
/usr/local/lsws/lsphp72/etc/php/7.2/litespeed/php.ini:session.save_path = '/var/lib/lsphp/session/lsphp72'
/usr/local/lsws/lsphp72/etc/php/7.2/litespeed/php.ini:;       (see session.save_path above), then garbage collection does *not*
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini:;     session.save_path = "N;/path"
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini:;     session.save_path = "N;MODE;/path"
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini:session.save_path = '/var/lib/lsphp/session/lsphp73'
/usr/local/lsws/lsphp73/etc/php/7.3/litespeed/php.ini:;       (see session.save_path above), then garbage collection does *not*
/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini:;     session.save_path = "N;/path"
/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini:;     session.save_path = "N;MODE;/path"
/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini:session.save_path = '/var/lib/lsphp/session/lsphp74'
/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini:;       (see session.save_path above), then garbage collection does *not*
/usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini:;     session.save_path = "N;/path"
/usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini:;     session.save_path = "N;MODE;/path"
/usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini:session.save_path = '/var/lib/lsphp/session/lsphp80'
/usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini:;       (see session.save_path above), then garbage collection does *not*
/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini:;     session.save_path = "N;/path"
/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini:;     session.save_path = "N;MODE;/path"
/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini:;session.save_path = "/tmp"
/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini:;       (see session.save_path above), then garbage collection does *not*

Operating system: Ubuntu 20.04

CyberPanel version: Current Version: 2.3 Build: 4 Current Commit: d32d25fa9acd163e5bcffebd05f0dd565710e964w

Additional Running https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/setup_php_sessions.sh does resolve the issue, but older installations and upgraded installations still have this issue. Perhaps this should be run on upgrades as new PHP versions are released.

❯ bash setup_php_sessions.sh

LSPHP 72
session.save_path => /var/lib/lsphp/session/lsphp72 => /var/lib/lsphp/session/lsphp72

LSPHP 73
session.save_path => /var/lib/lsphp/session/lsphp73 => /var/lib/lsphp/session/lsphp73

LSPHP 74
session.save_path => /var/lib/lsphp/session/lsphp74 => /var/lib/lsphp/session/lsphp74

LSPHP 80
session.save_path => /var/lib/lsphp/session/lsphp80 => /var/lib/lsphp/session/lsphp80

LSPHP 81
session.save_path => /var/lib/lsphp/session/lsphp81 => /var/lib/lsphp/session/lsphp81

Installing PHP Session cleaning cron
Checking cleansessions file
#!/bin/bash
for version in $(ls /usr/local/lsws|grep lsphp); do echo ""; echo "PHP $version"; session_time=$(/usr/local/lsws/${version}/bin/php -i |grep -Ei 'session.gc_maxlifetime'| grep -Eo "[[:digit:]]+"|sort -u); find -O3 "/var/lib/lsphp/session/${version}" -ignore_readdir_race -depth -mindepth 1 -name 'sess_*' -type f -cmin "${session_time}" -delete; done