欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

DEDE图片集上传图片时出错显示(FILEID)的解决办法 有大用

shiping1 的头像
下面的方法 有大用

之前用dedecms做的一个项目,编码为utf8,在用swfupload上传图片时正常。后来因为各种原因,将utf8转为gbk,但 是在上传图片时总是报错,弹出框显示FILEID:X,百度谷歌找了一通也没有找到,调试了半天也没有成功。弄了一下午无语了,因为代码都正确,就是不出结果,后来把一个PHP高手叫过来一起解决。后来总结:

报错的图片位置:

朋友在看了一会,用的浏览器是Google Chrome浏览器,因为此浏览器可以进行调试,高度代码及图片如下:

 
因为在输出的过程中,出现了三个回车,问题就在这里。于是乎在输出的过程中将其清除则可以,因为具体位置也不好找,所以就用了PHP自带的一个函数将其清除,具体如下:
在/dede/swfupload.php的
1
echo "FILEID:".$_SESSION['fileid'];

的上边加一句

PHP 代码复制内容到剪贴板  

1
ob_end_clean();

 

这回能上传了,但上传后图片依然输不出来,于是在chrome的指引下,还多出几个回车,于是这的上边加一句,在

PHP 代码 复制内容到剪贴板
1
2
header('Content-type: image/jpeg'); 
header('Content-Length: '.strlen($_SESSION['file_info'][$id]));
的上边加一句
PHP 代码 复制内容到剪贴板
1
ob_end_clean();

这回终于可以输出了!看来ob_end_clean(); 函数的作用很大啊!

学习一下:

1
ob_end_clean //清空(擦除)缓冲区并关闭输出缓冲
以后自己要习惯用调试工具来进行调试代码

来自  http://my.oschina.net/54programmer/blog/161252






DEDE图片集上传图片时出错显示(FILEID)的解决办法

(万一如果上面的方法不行 可用下面的方法试着执行)

简介:这是DEDE图片集上传图片时出错显示(FILEID)的解决办法的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=339374' scrolling='no'>
DEDE图片集上传图片时出错显示(FILEID)的解决办法 - 发表于:网络资源网ASQQ8.NET - 教程分享

以下是全文转载,经过测试,在我的VPS上是可行的,坛子里没有搜索到,所以特别在这里分享下,如果遇到过这问题的,就可以照此方法尝试了。

某日,某使用DeDe CMS v5.5的网站在后台上传图片时出现如下错误:


作为web生手的我很是迷茫。印象里之前并没有做什么改动,于是百思不得其解。Google、百度、DeDe官网搜索了一大圈,发现有这个问题的人不少,但是没有一个给出解决的办法。只好自己试着分析分析……

找到提示出错的相关js文件:DEDECMS教程-ASQQ8.NET

/dede/handlers.js

发现有这么一段:

function uploadSuccess(file, serverData) {
try {
  var progress = new FileProgress(file,  this.customSettings.upload_target);
  if (serverData.substring(0, 7) === "FILEID:") {
   addImage("swfupload.php?dopost=thumbnail&id=" + serverData.substring(7), serverData.substring(7));

   progress.setStatus("获取缩略图...");
   progress.toggleCancel(false);
  } else {
   addImage("img/error.gif", 0);
   progress.setStatus("有错误!");
   progress.toggleCancel(false);
   alert(serverData);

  }


} catch (ex) {
  this.debug(ex);
}
}

其中:

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的代码解决了这个问题

代码如下:见附件 下载 a.php.txt 改成a.php执行

<?php
//remove the utf-8 boms
//by magicbug at gmail dot com

if (isset($_GET['dir'])){ //config the basedir
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}

$auto = 1;

checkdir($basedir);

function checkdir($basedir){
if ($dh = opendir($basedir)) {
  while (($file = readdir($dh)) !== false) {
   if ($file != '.' && $file != '..'){
    if (!is_dir($basedir."/".$file)) {
     echo "filename: $basedir/$file ";
     echo checkBOM("$basedir/$file")." <br>";
    }else{
     $dirname = $basedir."/".$file;
     checkdir($dirname);
    }
   }
  }
closedir($dh);
}
}

function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  if ($auto == 1) {
   $rest = substr($contents, 3);
   rewrite ($filename, $rest);
   return ("<font color=red>BOM found, automatically removed.</font>");
  } else {
   return ("<font color=red>BOM found.</font>");
  }
}
else return ("BOM Not Found.");
}

function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>保存为a.php,放在网站根目录访问下就可以了。

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

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

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

<?php
//remove the utf-8 boms
//by magicbug at gmail dot com

if (isset($_GET['dir'])){ //config the basedir
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}

$auto = 1;

checkdir($basedir);
echo ("<br><br><font color=green>completed!</font><br>");

function checkdir($basedir)
{
if ($dh = opendir($basedir)) 
{
  while (($file = readdir($dh)) !== false) 
  {
   if ($file != '.' && $file != '..')
   {
    if (!is_dir($basedir."/".$file)) 
    {
     //echo "filename: $basedir/$file ";
     checkBOM("$basedir/$file");
    }
    else
    {
     $dirname = $basedir."/".$file;
     checkdir($dirname);
    }
   }
  }
  closedir($dh);
}

}

function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename,NULL,NULL,0,10);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  if ($auto == 1) {
   //$rest = substr($contents, 3);
   //rewrite ($filename, $rest);
   echo ($filename."--------"."<font color=red>BOM found</font><br>");
  } else {
   //return ("<font color=red>BOM found.</font>");
  }
}
//else return ("BOM Not Found.");
}

function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>

爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

http://biancheng.dnbcw.info/php/339374.html pageNo:8
来自 http://www.cnblogs.com/ooooo/archive/2011/11/12/2246171.html


DEDE图片集上传图片时出错显示(FILEID)

  • 浏览:521
  • |
  • 更新:

 

DEDE图片集上传图片时出错显示(FILEID)的解决办法

 

 

以下是全文转载,经过测试,在我的VPS上是可行的,坛子里没有搜索到,所以特别在这里分享下,如果遇到过这问题的,就可以照此方法尝试了。

某日,某使用DeDe CMS v5.5的网站在后台上传图片时出现如下错误:

作为web生手的我很是迷茫。印象里之前并没有做什么改动,于是百思不得其解。Google、百度、DeDe官网搜索了一大圈,发现有这个问题的人不少,但是没有一个给出解决的办法。只好自己试着分析分析……

 

找到提示出错的相关js文件:DEDECMS教程-598080707.NET

/dede/handlers.js

发现有这么一段:

function uploadSuccess(file, serverData) {try {  var progress = new FileProgress(file,  this.customSettings.upload_target);  if (serverData.substring(0, 7) === "FILEID:") {   addImage("swfupload.php?dopost=thumbnail&id=" + serverData.substring(7), serverData.substring(7));

   progress.setStatus("获取缩略图...");   progress.toggleCancel(false);  } else {   addImage("img/error.gif", 0);   progress.setStatus("有错误!");   progress.toggleCancel(false);   alert(serverData);

  }

} catch (ex) {  this.debug(ex);}}

   

 

其中:

 

if (serverData.substring(0, 7) === "FILEID:")    

 

这句的判断为假导致如上图的问题。

查看serverData的值没有发现什么异常,但是判断始终为假

问题就出在serverData.substring(0, 7) 始终都不等于"FILEID:"

调整了截取边界也一样有错,于是乎,请来了HttpAnalyzer一看,哦,原来如此:

虽然这么看着没什么问题DEDECMS教程-598080707.NET

但实际问题在这:

前面多了三个字节:ef bb bf

大致一找原来这是utf-8的bom问题,是修改文件时在文件头自动加入的这三个字节导致的连锁反应

但是那么多文件要找出是哪个文件的问题倒是有点头大……

后来找到一篇文章《转两篇 移除PHP中BOM的方法》按照其中给出的清除BOM的代码解决了这个问题

代码如下:

<?php//remove the utf-8 boms//by magicbug at gmail dot com

if (isset($_GET['dir'])){ //config the basedir$basedir=$_GET['dir'];}else{$basedir = '.';}

$auto = 1;

checkdir($basedir);

function checkdir($basedir){if ($dh = opendir($basedir)) {  while (($file = readdir($dh)) !== false) {   if ($file != '.' && $file != '..'){    if (!is_dir($basedir."/".$file)) {     echo "filename: $basedir/$file ";     echo checkBOM("$basedir/$file")." <br>";    }else{     $dirname = $basedir."/".$file;     checkdir($dirname);    }   }  }closedir($dh);}}

function checkBOM ($filename) {global $auto;$contents = file_get_contents($filename);$charset[1] = substr($contents, 0, 1);$charset[2] = substr($contents, 1, 1);$charset[3] = substr($contents, 2, 1);if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  if ($auto == 1) {   $rest = substr($contents, 3);   rewrite ($filename, $rest);   return ("<font color=red>BOM found, automatically removed.</font>");  } else {   return ("<font color=red>BOM found.</font>");  }}else return ("BOM Not Found.");}

function rewrite ($filename, $data) {$filenum = fopen($filename, "w");flock($filenum, LOCK_EX);fwrite($filenum, $data);fclose($filenum);}?>保存为a.php,放在网站根目录访问下就可以了。

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

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

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

<?php//remove the utf-8 boms//by magicbug at gmail dot com

if (isset($_GET['dir'])){ //config the basedir$basedir=$_GET['dir'];}else{$basedir = '.';}

$auto = 1;

checkdir($basedir);echo ("<br><br><font color=green>completed!</font><br>");

function checkdir($basedir){if ($dh = opendir($basedir)){  while (($file = readdir($dh)) !== false)  {   if ($file != '.' && $file != '..')   {    if (!is_dir($basedir."/".$file))    {     //echo "filename: $basedir/$file ";     checkBOM("$basedir/$file");    }    else    {     $dirname = $basedir."/".$file;     checkdir($dirname);    }   }  }  closedir($dh);}

}

function checkBOM ($filename) {global $auto;$contents = file_get_contents($filename,NULL,NULL,0,10);$charset[1] = substr($contents, 0, 1);$charset[2] = substr($contents, 1, 1);$charset[3] = substr($contents, 2, 1);if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  if ($auto == 1) {   //$rest = substr($contents, 3);   //rewrite ($filename, $rest);   echo ($filename."--------"."<font color=red>BOM found</font><br>");  } else {   //return ("<font color=red>BOM found.</font>");  }}//else return ("BOM Not Found.");}

function rewrite ($filename, $data) {$filenum = fopen($filename, "w");flock($filenum, LOCK_EX);fwrite($filenum, $data);fclose($filenum);}?>

 
来自 http://jingyan.baidu.com/article/455a9950fdc2ffa167277842.html

附件大小
Plain text icon a.php.txt1.32 KB
普通分类: