php专区

 首页 > php专区 > PHP应用 > CMS建站 > DeDeCMS v5后台上传图片时出现错误的解决方法

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

分享到:
【字体:
导读:
          使用DeDe CMS v5.5的网站在后台上传图片时出现错误,作为web生手的我很是迷茫。印象里之前并没有做什么改动,于是百思不得其解,Google、百度、DeDe官网搜索了一大圈,发现有这个问题的人不...

使用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. //remove the utf-8 boms 
  2. //by magicbug at gmail dot com 
  3. if (isset($_GET['dir'])){ //config the basedir 
  4. $basedir=$_GET['dir']; 
  5. }else
  6. $basedir = '.'
  7. $auto = 1; 
  8. checkdir($basedir); 
  9. function checkdir($basedir){ 
  10. if ($dh = opendir($basedir)) { 
  11.   while (($file = readdir($dh)) !== false) { 
  12.    if ($file != '.' && $file != '..'){ 
  13.     if (!is_dir($basedir."/".$file)) { 
  14.      echo "filename: $basedir/$file "
  15.      echo checkBOM("$basedir/$file").
    "
  16.     }else//开源软件:phpfensi.com 
  17.      $dirname = $basedir."/".$file
  18.      checkdir($dirname); 
  19.     } 
  20.    } 
  21.   } 
  22. closedir($dh); 
  23. function checkBOM ($filename) { 
  24. global $auto
  25. $contents = file_get_contents($filename); 
  26. $charset[1] = substr($contents, 0, 1); 
  27. $charset[2] = substr($contents, 1, 1); 
  28. $charset[3] = substr($contents, 2, 1); 
  29. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { 
  30.   if ($auto == 1) { 
  31.    $rest = substr($contents, 3); 
  32.    rewrite ($filename$rest); 
  33.    return ("BOM found, automatically removed."); 
  34.   } else { 
  35.    return ("BOM found."); 
  36.   } 
  37. else return ("BOM Not Found."); 
  38. function rewrite ($filename$data) { 
  39. $filenum = fopen($filename"w"); 
  40. flock($filenum, LOCK_EX); 
  41. fwrite($filenum$data); 
  42. fclose($filenum); 
  43. ?> 

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

如果在访问a.php的时候报错如:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

那就试用下面的修改版检查出有bom的文件自己修改吧.

  1. //remove the utf-8 boms 
  2. //by magicbug at gmail dot com 
  3. if (isset($_GET['dir'])){ //config the basedir 
  4. $basedir=$_GET['dir']; 
  5. }else
  6. $basedir = '.'
  7. $auto = 1; 
  8. checkdir($basedir); 
  9. echo ("

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

 

分享到:
dedecms首页导航菜单二级栏目调用标签 - ...
dedecms首页导航菜单二级栏目调用标签 第一种方法:  {dede:channelartlist typeid='top' row='8'}   {dede:field name='id'/}——{dede:field name='typeurl'/}——{dede:field name='typename'/}   {dede:channel t...
dedecms 取消后台验证码方法
DEDECMSv5.5后台验证码的步骤 找到DEDE后台目录,也就是默认的 /dede/login.php教程 在Dreamweaver8里面是第44行 找到以下代码: if($validate=='' || $validate != $svali) 把上面的代码替换成以下代码: if( false ) 然后直接保存就可以了,这样后台登录的时候就可以不用输入验证码就可以登录...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……