PBOOTCMS在运行时间久了之后,有可能会造成服务器卡顿。
通过慢日志发现,是file.php中的path_delete() 函数会导致的。
可以使用以下改进过的代码,使用中。
/**
 * 删除目录及目录下所有文件或删除指定文件
 *
 * @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;
}当然,也可以使用非递归实现的目录和文件删除函数,用栈结构避免了深递归调用,适合大量文件和深层目录,性能更稳健且不易卡死。
我们的网站后台默认有一个留言的提醒数据:但是如果要有多个留言表单,那么我们自定义的留言表单却没有这个...
在之前的文章中,我们有讲过,如何使用扩展字段来此入HTML代码并添加预览功能。文章链接可查看:https://ww...
以下内容来源于PB交流QQ群。第一:NGINX配置。#拦截常见敏感后台路径访问(例如dede、admin、wp-login等),...
在外贸网站建设中,我们会遇到有客户说需要用户前端留言的时候可以上传自定义的文件或者图片等资料。那么这...