PBOOTCMS在運(yùn)行時(shí)間久了之后,有可能會(huì)造成服務(wù)器卡頓。
通過慢日志發(fā)現(xiàn),是file.php中的path_delete() 函數(shù)會(huì)導(dǎo)致的。
可以使用以下改進(jìn)過的代碼,使用中。
/**
 * 刪除目錄及目錄下所有文件或刪除指定文件
 *
 * @param string $path 待刪除目錄路徑
 * @param bool $delDir 是否刪除目錄,true 刪除目錄,false 僅清空目錄
 * @param array $exFile 排除的文件/目錄名
 * @return bool 是否成功
 */
function path_delete($path, $delDir = false, $exFile = array())
{
    $result = true;
    if (!file_exists($path)) {
        return true; // 不存在直接返回成功
    }
    if (is_dir($path)) {
        $dirs = scandir($path);
        if ($dirs !== false) {
            foreach ($dirs as $value) {
                if ($value === '.' || $value === '..' || in_array($value, $exFile)) {
                    continue;
                }
                $dir = $path . '/' . $value;
                // 遞歸刪除子目錄或文件
                $subResult = is_dir($dir) ? path_delete($dir, $delDir, $exFile) : unlink($dir);
                if (!$subResult) {
                    $result = false;
                    error_log("Failed to delete: $dir");
                }
            }
            // 刪除自身目錄
            if ($delDir && !rmdir($path)) {
                $result = false;
                error_log("Failed to remove directory: $path");
            }
        } else {
            $result = false;
            error_log("Failed to scan directory: $path");
        }
    } else {
        if (!unlink($path)) {
            $result = false;
            error_log("Failed to delete file: $path");
        }
    }
    return $result;
}