当前位置:首页 > CMS教程 > DeDecms > 列表

DeDeCMS v5后台上传图片时出现错误的解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-03-25 12:40:31 浏览: 评论:0 

使用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.  
  15. } catch (ex) { 
  16.   this.debug(ex); 

其中:if (serverData.substring(0, 7) === "FILEID:") 这句的判断为假导致如上图的问题.

查看serverData的值没有发现什么异常,但是判断始终为假,问题就出在serverData.substring(0, 7) 始终都不等于"FILEID:",调整了截取边界也一样有错,于是乎,请来了HttpAnalyzer一看,哦,原来如此.

虽然这么看着没什么问题,但实际问题在这,前面多了三个字节:ef bb bf,大致一找原来这是utf-8的bom问题,是修改文件时在文件头自动加入的这三个字节导致的连锁反应.

但是那么多文件要找出是哪个文件的问题倒是有点头大,后来找到一篇文章《转两篇 移除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. $auto = 1; 
  9. checkdir($basedir); 
  10. function checkdir($basedir){ 
  11. if ($dh = opendir($basedir)) { 
  12.   while (($file = readdir($dh)) !== false) { 
  13.    if ($file != '.' && $file != '..'){ 
  14.     if (!is_dir($basedir."/".$file)) { 
  15.      echo "filename: $basedir/$file "
  16.      echo checkBOM("$basedir/$file")." <br>"
  17.     }else//开源软件:phpfensi.com 
  18.      $dirname = $basedir."/".$file
  19.      checkdir($dirname); 
  20.     } 
  21.    } 
  22.   } 
  23. closedir($dh); 
  24. function checkBOM ($filename) { 
  25. global $auto
  26. $contents = file_get_contents($filename); 
  27. $charset[1] = substr($contents, 0, 1); 
  28. $charset[2] = substr($contents, 1, 1); 
  29. $charset[3] = substr($contents, 2, 1); 
  30. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { 
  31.   if ($auto == 1) { 
  32.    $rest = substr($contents, 3); 
  33.    rewrite ($filename$rest); 
  34.    return ("<font color=red>BOM found, automatically removed.</font>"); 
  35.   } else { 
  36.    return ("<font color=red>BOM found.</font>"); 
  37.   } 
  38. else return ("BOM Not Found."); 
  39. function rewrite ($filename$data) { 
  40. $filenum = fopen($filename"w"); 
  41. flock($filenum, LOCK_EX); 
  42. fwrite($filenum$data); 
  43. fclose($filenum); 
  44. ?> 

保存为a.php,放在网站根目录访问下就可以了.

如果在访问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. $auto = 1; 
  9. checkdir($basedir); 
  10. echo ("<br><br><font color=green>completed!</font><br>"); 
  11. function checkdir($basedir
  12. if ($dh = opendir($basedir))  
  13.   while (($file = readdir($dh)) !== false)  
  14.   { 
  15.    if ($file != '.' && $file != '..'
  16.    { 
  17.     if (!is_dir($basedir."/".$file))  
  18.     { 
  19.      //echo "filename: $basedir/$file "; 
  20.      checkBOM("$basedir/$file"); 
  21.     } 
  22.     else 
  23.     { 
  24.      $dirname = $basedir."/".$file
  25.      checkdir($dirname); 
  26.     } 
  27.    } 
  28.   } 
  29.   closedir($dh); 
  30. function checkBOM ($filename) { 
  31. global $auto
  32. $contents = file_get_contents($filename,NULL,NULL,0,10); 
  33. $charset[1] = substr($contents, 0, 1); 
  34. $charset[2] = substr($contents, 1, 1); 
  35. $charset[3] = substr($contents, 2, 1); 
  36. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { 
  37.   if ($auto == 1) { 
  38.    //$rest = substr($contents, 3); 
  39.    //rewrite ($filename, $rest); 
  40.    echo ($filename."--------"."<font color=red>BOM found</font><br>"); 
  41.   } else { 
  42.    //return ("<font color=red>BOM found.</font>"); 
  43.   } 
  44. //else return ("BOM Not Found."); 
  45. function rewrite ($filename$data) { 
  46. $filenum = fopen($filename"w"); 
  47. flock($filenum, LOCK_EX); 
  48. fwrite($filenum$data); 
  49. fclose($filenum); 
  50. ?>

Tags: DeDeCMS传图片 DeDeCMS出现错误

分享到: