
当DedeCMS下载功能出现故障时,通常表现为以下三种情况:
根本原因主要集中在这四个方面:
首先检查PHP配置文件,确保以下关键参数正确设置:
打开php.ini文件,找到并修改以下配置项:
; 关闭安全模式(如果存在)
safe_mode = Off
; 确保文件上传功能开启
file_uploads = On
; 设置合适的临时目录,确保可写
upload_tmp_dir = "/tmp"
; 调整上传文件大小限制
upload_max_filesize = 100M
post_max_size = 100M
; 确保以下函数未被禁用
disable_functions = ; 检查这一行,确保没有禁用fopen、fread、fwrite等函数
修改完成后,重启Web服务器使配置生效:
Apache服务器
service httpd restart
或
systemctl restart apache2
Nginx服务器(通常配合PHP-FPM)
systemctl restart php-fpm
systemctl restart nginx
进入DedeCMS安装目录,执行以下权限设置命令:
设置目录权限为755
find /path/to/dedecms -type d -exec chmod 755 {} \;
设置文件权限为644
find /path/to/dedecms -type f -exec chmod 644 {} \;
对下载目录特别设置可写权限
chmod -R 777 /path/to/dedecms/uploads
chmod -R 777 /path/to/dedecms/data
注意:在生产环境中,uploads目录应设置为755,并通过设置Web服务器用户组权限来保证可写,而非直接使用777。
下载功能相关的核心文件位于以下路径:
从官方GitHub仓库获取原始文件进行对比:

下载原始文件(以downmix.inc.php为例)
wget https://raw.githubusercontent.com/dedecms/DedeCMS/master/include/downmix.inc.php -O downmix.inc.php.original
使用diff命令对比文件差异
diff /path/to/dedecms/include/downmix.inc.php downmix.inc.php.original
如果发现文件被修改或损坏,使用备份文件或官方原始文件替换:
备份当前文件
cp /path/to/dedecms/include/downmix.inc.php /path/to/dedecms/include/downmix.inc.php.bak
使用原始文件替换
cp downmix.inc.php.original /path/to/dedecms/include/downmix.inc.php
设置正确的文件权限
chmod 644 /path/to/dedecms/include/downmix.inc.php
登录MySQL数据库,检查下载相关的数据表:
mysql -u username -p
use dedecms_database;
检查下载表结构
DESC dede_downloads;
检查下载链接是否正常
SELECT id, title, downloadurl, filetype FROM dede_downloads LIMIT 10;
修复可能损坏的表
REPAIR TABLE dede_downloads;
如果发现downloadurl字段为空或格式错误,执行以下修复SQL:
更新下载链接路径(根据实际情况修改路径)
UPDATE dede_downloads
SET downloadurl = CONCAT('/uploads/soft/', filename)
WHERE downloadurl = '' OR downloadurl IS NULL;
更新文件大小信息
UPDATE dede_downloads d
JOIN (
SELECT aid, filesize
FROM dede_addonsoft
WHERE filesize > 0
) a ON d.id = a.aid
SET d.filesize = a.filesize
WHERE d.filesize = 0;
创建测试下载文件:
创建测试文件
echo "This is a test download file" > /path/to/dedecms/uploads/test_download.txt
设置权限
chmod 644 /path/to/dedecms/uploads/test_download.txt
通过DedeCMS后台添加下载资源:
查看生成的下载链接,通常格式为:
/plus/download.php?open=0&id=1&uhash=xxxxxxxx
直接访问下载处理脚本,添加调试信息:
临时修改download.php,在第30行后添加
error_reporting(E_ALL);
ini_set('display_errors', 1);
修改后访问下载链接,查看错误信息
示例:http://yourdomain.com/plus/download.php?open=0&id=1
在download.php中添加路径验证代码:
// 在文件开始处添加
$log_file = '/tmp/dedecms_download_debug.log';
// 在获取文件路径后添加日志记录
$fp = fopen($log_file, 'a');
fwrite($fp, "[" . date('Y-m-d H:i:s') . "] 文件路径: " . $filepath . "\n");
fwrite($fp, "[" . date('Y-m-d H:i:s') . "] 文件存在: " . (file_exists($filepath) ? '是' : '否') . "\n");
fclose($fp);
通过日志分析文件路径是否正确,文件是否存在。

如果使用Nginx服务器,需要在配置文件中添加以下规则:
location ~ ^/plus/download.php {
try_files $uri $uri/ /plus/download.php?$args;
确保PHP文件能够正常解析
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
处理大文件下载
proxy_max_temp_file_size 0;
proxy_buffering off;
}
设置下载文件目录的访问规则
location ^~ /uploads/ {
防止直接访问,只能通过download.php下载
internal;
或者允许访问,但设置合适的header
add_header Content-Disposition 'attachment';
expires 30d;
}
当网站使用CDN时,需要调整下载逻辑:
// 在download.php中修改文件输出部分
if ($cfg_remote_site == 'Y' && !empty($remote_file_url)) {
// 使用远程文件
$filepath = $remote_file_url;
header("Location: " . $filepath);
exit();
} else {
// 本地文件直接输出
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . basename($filepath) . "\"");
readfile($filepath);
exit();
}
创建下载功能监控脚本:
!/bin/bash
download_monitor.sh
DOMAIN="yourdomain.com"
TEST_FILE="/path/to/dedecms/uploads/monitor_test.txt"
LOG_FILE="/var/log/dedecms_download_monitor.log"
创建测试文件
echo "Monitor test file" > $TEST_FILE
测试下载
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "http://$DOMAIN/plus/download.php?open=0&id=1")
if [ "$RESPONSE" != "200" ]; then
echo "$(date) - 下载功能异常,HTTP状态码: $RESPONSE" >> $LOG_FILE
发送邮件或微信通知
mail -s "DedeCMS下载功能异常" admin@yourdomain.com
fi
清理测试文件
rm -f $TEST_FILE
添加到crontab,每小时执行一次:
0 /path/to/download_monitor.sh
当下载功能完全失效时,按顺序执行:
完成以上步骤后,下载功能应能恢复正常。如果问题依旧存在,检查Web服务器错误日志获取更详细的信息。












易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图