Discuz插件或模板下载时,提示“文件无法下载,请确认 “data/download/” 目录是否可写”
Discuz插件或模板下载时,提示“文件无法下载,请确认 “data/download/” 目录是否可写”,但实际文件夹权限正常可以写入。
原因:可能是插件或模板中存在中文文件名,但Discuz X3.5已经使用了UTF8,不再支持GBK编码,而插件或模板作者可能在Windows平台压缩,压缩后的文件名使用了默认的GBK编码。于是,中文文件名编码为GBK,安装时却按UTF8编码进行解码,因此乱码。文件名乱码,导致下载后无法插件文件,于是提示上述错误。
解决方法:
source\admincp\admincp_cloudaddons.php 文件的大约90行处,原代码:
$filename = $tmpdir.'/'.$file.'._addons_';
$dirname = dirname($filename);
dmkdir($dirname, 0777, false);
$fp = fopen($filename, !$data['Part'] ? 'w' : 'a');
if(!$fp) {
dir_clear($tmpdir);
@unlink($md5tmp);
cloudaddons_faillog($_GET['rid'], 101);
cpmsg('cloudaddons_download_write_error', '', 'error');
}
修改为:
$filename = $tmpdir.'/'.$file.'._addons_';
$dirname = dirname($filename);
dmkdir($dirname, 0777, false);
$fp = fopen($filename, !$data['Part'] ? 'w' : 'a');
if(!$fp) {
$current_encode = mb_detect_encoding($file, array("ASCII","GB2312","GBK",'BIG5','UTF-8'));
$file = mb_convert_encoding($file, 'UTF-8', $current_encode);
$filename = $tmpdir.'/'.$file.'._addons_';
$dirname = dirname($filename);
dmkdir($dirname, 0777, false);
$fp = fopen($filename, !$data['Part'] ? 'w' : 'a');
if(!$fp) {
dir_clear($tmpdir);
@unlink($md5tmp);
cloudaddons_faillog($_GET['rid'], 101);
cpmsg('cloudaddons_download_write_error', '', 'error');
}
}
失败后,将文件名编码转换一次,然后再次进行写入尝试。
此修改仅在遇到问题时使用,修改并安装完毕后,建议恢复到原始代码。
转载请注明来源,谢谢。
有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]。