在内容管理系统中,为用户提供便捷的功能可以显著提升用户体验。本文将详细介绍如何在Dedecms中实现自动打包文章中的图片并提供下载功能的方法。这一功能尤其适合那些需要频繁分享图片资源的网站,例如图片库或摄影作品展示平台。

几年前,许多QQ图片网站的内容是直接复制上去的,当时并未考虑提供下载功能。如今,为了满足用户需求,我们可以通过PHP的ZipArchive类来实现当用户点击下载时,自动将当前文章中的图片压缩成ZIP文件并提供下载的功能。以下是具体的实现代码:


include("data/common.inc.php"); // 加载数据库配置
$conn = mysql_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd);
mysql_select_db($cfg_dbname, $conn);
mysql_query("set Names '$cfg_db_language'");

$id = intval(isset($_GET@['id']) ? $_GET@['id'] : 0);

if ($id) {
    $zipUrl = 'uploads/zip/' . $id . '.zip';
    if (file_exists($zipUrl)) { // 判断文件是否存在
        echo '';
        exit;
    } else {
        $sql = "select url from " . $cfg_dbprefix . "uploads where arcid=$id";
        $query = mysql_query($sql);
        if (mysql_num_rows($query)) {
            $array = array();
            while ($rs = mysql_fetch_array($query)) {
                $array[] = substr($rs['url'], 1, strlen($rs['url']) - 1);
            }
            create_zip($array, $zipUrl, true); // 创建压缩文件
            echo '';
            exit;
        } else {
            echo '参数错误';
            exit;
        }
    }
} else {
    echo '参数错误';
    exit;
}

// 创建一个zip文件
function create_zip($files = array(), $destination = '', $overwrite = false) {
    if (file_exists($destination) && !$overwrite) {
        return false;
    }

    if (is_array($files)) {
        foreach ($files as $file) {
            if (file_exists($file)) {
                $valid_files[] = $file;
            }
        }
    }

    if (count($valid_files)) {
        $zip = new ZipArchive();
        if ($zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            return false;
        }

        foreach ($valid_files as $file) {
            $zip->addFile($file, $file);
        }

        $zip->close();
        return file_exists($destination);
    } else {
        return false;
    }
}
    

以上代码首先连接到Dedecms数据库,并根据传入的文章ID查询相关的图片URL。如果对应的ZIP文件已经存在,则直接通过JavaScript跳转到该文件进行下载;如果不存在,则先查询数据库获取所有相关图片路径,然后调用create_zip函数创建ZIP文件。


此方法的优点在于,对于同一文章的多次下载请求,系统只会执行一次打包操作,后续请求直接调用已生成的ZIP文件,从而有效减少服务器负载。


希望本文所述对大家在使用Dedecms建站时有所帮助。通过这种方式,您可以轻松为用户提供图片下载功能,同时优化服务器性能。