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]


老刀的技术日志 » Discuz插件或模板下载时,提示“文件无法下载,请确认 “data/download/” 目录是否可写”

发表评论