原帖由 unrealx2 于 2006-11-3 20:08 发表
關於第一個問題我在剛剛又重新測試一次,確定附件是可已轉換的,請查明您在轉換時是否有其他因素存在,在轉換完後是否有將附件依照指定方式移至規定的目錄,在不然可否列出更多的相關訊息,以便我做問題的查 ...
我前几天出去玩了,所以今天才看贴,我的leo的版本是LeoBBS X Build051231。
我看了一下你的代码,觉得转换失败原因是这样的。
- if(preg_match_all("/\[UploadFile=([\w\-]+\.[\w]{1,5})\]/is", $message, $attachfilearray)) {
- $haveattach = 1;
- $attachdir = $lb_attach.'/'.$fid.'/';
复制代码
首先新版的LeoBBS(从05的某个版开始)里的附件的BBCODE是[UploadFileDisp=XXX]而不是[UploadFile=XXX],所以你的转换程序转换不了这些代码。同时我看了leobss的后几个版本的代码,用的BB代码也是UploadFileDisp,所以我认为其他版的也不会好用。
再则附件不是直接存在$lb_attach/$fid里/,而是存在$lb_attach/$fid/$xid/里,这个$xid是什么我也不确定,只知道范围是1-99,也许是时间、序号之类的去掉百位以上。
所以我的办法是修改discuzcode.func.php代码,在如下代码前
- for($i = 0; $i <= $discuzcodes['pcodecount']; $i++) {
- $message = str_replace("[\tDISCUZ_CODE_$i\t]", $discuzcodes['codehtml'][$i], $message);
- }
复制代码
加上
- //LB转换数据后专用 $tid是你主题的最大id
- global $fid;
- if ($tid < 19766) {
- $lbfilepath = './attachments/old/';
- $message = preg_replace(array(
- "/\[UploadFileDisp=([^\[]+?)\.(gif|jpg|png|bmp|jpeg)\]/ies",
- "/\[UploadFileDisp=(.*)\]/ies"),
- array(
- "bbcodeurl('\\1', '<center><img src="".$lbfilepath.$fid."/\\1.\\2" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt=\'Click here to open new window\';}" onmouseover="if(this.resized) this.style.cursor=\'hand\';" onclick="if(this.resized) {window.open(\'".$lbfilepath.$fid."/\\1.\\2\');}"></center><br>')",
- "bbcodeurl('\\1', '【<a href="".$lbfilepath.$fid."/\\1" target="_blank" style="color:#0000FF;font-weight:bold">点击下载文件</a>】')"),
- $message);
- }
- unset($fid,$tid,$lbfilepath);
- //LB转换数据后专用
复制代码
然后再做了小程序,移动所有附件子目录中的文件到上级目录。
- $lbfilepath = '/var/www/html/non-cgi/usr07135747'; //后面不加"/"
- $discuzfilepath = '/var/www/html/attachments/lbupfile/'; //后加/
- if (!file_exists($lbfilepath)) {
- echo '变量 $lbfilepath 指定的目录不存在:'.$lbfilepath.'<br>';
- }
- if (!file_exists($discuzfilepath)) {
- echo '变量 $discuzfilepath 指定的目录不存在:'.$discuzfilepath;
- exit;
- }
- read_dir($lbfilepath);
- function read_dir($dir='') {
- $dh = opendir($dir);
- while (false !== ($filename = readdir($dh))) {
- if ($filename != 'index.html' && $filename != '.' && $filename != '..') {
- $dir2 = $dir.'/'.$filename;
- if (is_dir($dir2)) {
- read_dir($dir2);
- } else {
- if (@rename($dir2,$discuzfilepath.$filename)) {
- echo $discuzfilepath.$filename.'<br>';
- } else {
- echo '不能移动文件:'.$discuzfilepath.$filename.'<br>';
- }
- }
- }
- }
- }
复制代码
这样比较麻烦,但还算奏效。
另,我把我的leo中的code.cgi发上来,供你参考。看看你能不能在你的转换程序中加上这个逻辑判断,解决这个问题。我可以协助你测试。
[ 本帖最后由 rchench 于 2006-11-9 21:09 编辑 ] |