找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1171|回复: 0

[分享] DEDE图片集上传图片时出错显示(FILEID)的解决方法

[复制链接]
发表于 2018-2-28 10:35:34 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
某日,某使用DeDe CMS v5.5的网站在后台上传图片时出现如下错误:
作为web生手的我很是迷茫。印象里之前并没有做什么改动,于是百思不得其解。Google、百度、DeDe官网搜索了一大圈,发现有这个问题的人不少,但是没有一个给出解决的办法。只好自己试着分析分析……
找到提示出错的相关js文件:
/dede/handlers.js
发现有这么一段:

代码如下:
  1. function uploadSuccess(file, serverData) {
  2. try {
  3. var progress = new FileProgress(file, this.customSettings.upload_target);
  4. if (serverData.substring(0, 7) === "FILEID:") {
  5. addImage("swfupload.php?dopost=thumbnail&id=" + serverData.substring(7), serverData.substring(7));
  6. progress.setStatus("获取缩略图...");
  7. progress.toggleCancel(false);
  8. } else {
  9. addImage("img/error.gif", 0);
  10. progress.setStatus("有错误!");
  11. progress.toggleCancel(false);
  12. alert(serverData);
  13. }
  14. } catch (ex) {
  15. this.debug(ex);
  16. }
  17. }
复制代码

其中:

代码如下:
if (serverData.substring(0, 7) === "FILEID:")


这句的判断为假导致如上图的问题。
查看serverData的值没有发现什么异常,但是判断始终为假
问题就出在serverData.substring(0, 7) 始终都不等于"FILEID:"
调整了截取边界也一样有错,于是乎,请来了HttpAnalyzer一看,哦,原来如此:
虽然这么看着没什么问题DEDE教程-ASQQ8.NET
但实际问题在这:
前面多了三个字节:ef bb bf
大致一找原来这是utf-8的bom问题,是修改文件时在文件头自动加入的这三个字节导致的连锁反应
但是那么多文件要找出是哪个文件的问题倒是有点头大……网络资源网-ASQQ8.NET
后来找到一篇文章《转两篇 移除PHP中BOM的方法》按照其中给出的清除BOM的代码解决了这个问题
代码如下:

代码如下:
  1. <?php
  2. //remove the utf-8 boms
  3. //by magicbug at gmail dot com
  4. if (isset($_GET['dir'])){ //config the basedir
  5. $basedir=$_GET['dir'];
  6. }else{
  7. $basedir = '.';
  8. }
  9. $auto = 1;
  10. checkdir($basedir);
  11. function checkdir($basedir){
  12. if ($dh = opendir($basedir)) {
  13. while (($file = readdir($dh)) !== false) {
  14. if ($file != '.' && $file != '..'){
  15. if (!is_dir($basedir."/".$file)) {
  16. echo "filename: $basedir/$file ";
  17. echo checkBOM("$basedir/$file")."
  18. ";
  19. }else{
  20. $dirname = $basedir."/".$file;
  21. checkdir($dirname);
  22. }
  23. }
  24. }
  25. closedir($dh);
  26. }
  27. }
  28. function checkBOM ($filename) {
  29. global $auto;
  30. $contents = file_get_contents($filename);
  31. $charset[1] = substr($contents, 0, 1);
  32. $charset[2] = substr($contents, 1, 1);
  33. $charset[3] = substr($contents, 2, 1);
  34. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  35. if ($auto == 1) {
  36. $rest = substr($contents, 3);
  37. rewrite ($filename, $rest);
  38. return ("<font color=red>BOM found, automatically removed.</font>");
  39. } else {
  40. return ("<font color=red>BOM found.</font>");
  41. }
  42. }
  43. else return ("BOM Not Found.");
  44. }
  45. function rewrite ($filename, $data) {
  46. $filenum = fopen($filename, "w");
  47. flock($filenum, LOCK_EX);
  48. fwrite($filenum, $data);
  49. fclose($filenum);
  50. }
  51. ?>
复制代码
保存为a.php,放在网站根目录访问下就可以了。
ps:如果在访问a.php的时候报错如:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
那就试用下面的修改版检查出有bom的文件自己修改吧
  1. <?php
  2. //remove the utf-8 boms
  3. //by magicbug at gmail dot com
  4. if (isset($_GET['dir'])){ //config the basedir
  5. $basedir=$_GET['dir'];
  6. }else{
  7. $basedir = '.';
  8. }
  9. $auto = 1;
  10. checkdir($basedir);
  11. echo ("
  12. <font color=green>completed!</font>
  13. ");
  14. function checkdir($basedir)
  15. {
  16. if ($dh = opendir($basedir))
  17. {
  18. while (($file = readdir($dh)) !== false)
  19. {
  20. if ($file != '.' && $file != '..')
  21. {
  22. if (!is_dir($basedir."/".$file))
  23. {
  24. //echo "filename: $basedir/$file ";
  25. checkBOM("$basedir/$file");
  26. }
  27. else
  28. {
  29. $dirname = $basedir."/".$file;
  30. checkdir($dirname);
  31. }
  32. }
  33. }
  34. closedir($dh);
  35. }
  36. }
  37. function checkBOM ($filename) {
  38. global $auto;
  39. $contents = file_get_contents($filename,NULL,NULL,0,10);
  40. $charset[1] = substr($contents, 0, 1);
  41. $charset[2] = substr($contents, 1, 1);
  42. $charset[3] = substr($contents, 2, 1);
  43. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  44. if ($auto == 1) {
  45. //$rest = substr($contents, 3);
  46. //rewrite ($filename, $rest);
  47. echo ($filename."--------"."<font color=red>BOM found</font>
  48. ");
  49. } else {
  50. //return ("<font color=red>BOM found.</font>");
  51. }
  52. }
  53. //else return ("BOM Not Found.");
  54. }
  55. function rewrite ($filename, $data) {
  56. $filenum = fopen($filename, "w");
  57. flock($filenum, LOCK_EX);
  58. fwrite($filenum, $data);
  59. fclose($filenum);
  60. }
  61. ?>
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 15:44 , Processed in 0.046135 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表