Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[插件] 远程附件(+备份)for discuz4.* 5.*

[复制链接]
 楼主| plainer13 发表于 2006-5-12 20:13:11 | 显示全部楼层
原帖由 孤情一刀 于 2006-5-12 20:11 发表
有没手动安装的方法?

其实改动不大,有时间贴上
回复

使用道具 举报

0315 发表于 2006-5-12 20:27:54 | 显示全部楼层
这个要支持一下
回复

使用道具 举报

qtwrk 发表于 2006-5-12 20:29:03 | 显示全部楼层
路过
回复

使用道具 举报

amoshuang 发表于 2006-5-12 20:32:55 | 显示全部楼层
ding
回复

使用道具 举报

 楼主| plainer13 发表于 2006-5-12 21:06:44 | 显示全部楼层

手动安装-测试贴

不太可靠,由于时间仓促 ,可能存在括号不匹配等问题,请帮助修改,完成之后会重发一遍。

安装方法:

首先到后台,升级数据库,执行以下SQL:

  1. CREATE TABLE cdb_ftpstoreerror (
  2. aid Integer(5) NOT NULL AUTO_INCREMENT,
  3. attachment Varchar(100) NOT NULL,
  4. dateline Integer(10) NOT NULL,
  5. PRIMARY KEY (aid)
  6. );

  7. CREATE TABLE cdb_ftpbackuperror (
  8. aid Integer(5) NOT NULL AUTO_INCREMENT,
  9. attachment Varchar(100) NOT NULL,
  10. dateline Integer(10) NOT NULL,
  11. PRIMARY KEY (aid)
  12. );
复制代码

1、把 attchftp.php 文件放在论坛根目录,并修改里面的值。

2、打开 common.inc.php,找到:


  1. require_once DISCUZ_ROOT.'./config.inc.php';
复制代码

在上面添加:


  1. require_once DISCUZ_ROOT.'./attchftp.php';
复制代码


3、打开 admin/forum.inc.php,找:



  1. $tids = 0;
  2.                 $query = $db->query("SELECT tid FROM {$tablepre}threads WHERE attachment>'0' AND fid='$fid'");
  3.                 while($thread = $db->fetch_array($query)) {
  4.                         $tids .= ','.$thread['tid'];
  5.                 }

  6.                 if($tids) {
  7.                         $query = $db->query("SELECT filename FROM {$tablepre}attachments WHERE tid IN ($tids)");
  8.                         while($attach = $db->fetch_array($query)) {
  9.                                 @unlink($attachdir.'/'.$attach['filename']);
  10.                         }
  11.                         $db->query("DELETE FROM {$tablepre}attachments WHERE tid IN ($tids)");
  12.                 }
复制代码

修改成:


  1. $tids = 0;
  2.                 $query = $db->query("SELECT tid FROM {$tablepre}threads WHERE attachment>'0' AND fid='$fid'");
  3.                 while($thread = $db->fetch_array($query)) {
  4.                         $tids .= ','.$thread['tid'];
  5.                 }

  6.                 if($tids) {
  7.                         if(!($ftplist['store']['on'])) {
  8.                                 $query = $db->query("SELECT filename FROM {$tablepre}attachments WHERE tid IN ($tids)");
  9.                                 while($attach = $db->fetch_array($query)) {
  10.                                         @unlink($attachdir.'/'.$attach['filename']);
  11.                                 }
  12.                                 $db->query("DELETE FROM {$tablepre}attachments WHERE tid IN ($tids)");
  13.                         } else {
  14.                                 del_ftp_attach($ftplist['store'], $attach['attachment']);
  15.                                                                
  16.                                if($ftplist['backup']['on']){
  17.                                                                
  18.                                           del_ftp_attach($ftplist['backup'],$attach['attachment']);
  19.                                                                 }
  20.                         }
  21.                        }
复制代码


4、打开 include/post.func.php,找到:


  1. // watermark filename
复制代码

在上面加上:


  1. global $ftplist,$fid, $timestamp;
复制代码

再找:


  1. $target = $attachdir.'/'.stripslashes($attach['attachment']);
复制代码

在下面加上:


  1. if(!$ftplist['store']['on']) {
复制代码

再找:


  1. $attacharray[] = $attach;
  2.                         }
  3.                 } else {
  4.                         showmessage('post_attachment_save_error');
  5.                 }
复制代码

下面加上:


  1. } else {
  2.                         $attach_fname = substr($filename, 0, 64) . '_' . random(12) . '.' . $extension;
  3.                         $ftp_store_hd = ftpconnect($ftplist['store']);
  4.                                                
  5.                         //ftp_cdup($result);
  6.                         if($attach_subdir) {
  7.                                 if(!@ftp_chdir($ftp_store_hd, $attach_subdir)) {
  8.                                         ftp_mkdir($ftp_store_hd, $attach_subdir);
  9.                                         ftp_chdir($ftp_store_hd, $attach_subdir);
  10.                                 }
  11.                                 $attach_fname0 = $attach_subdir . '/' . $attach_fname;
  12.                         } else {
  13.                                 $attach_fname0 = $attach_fname;
  14.                         }
  15.                         $db->query("INSERT INTO {$tablepre}ftpstoreerror(attachment, dateline) VALUES('{$attach_fname0}', '{$timestamp}')");
  16.                         $teid = $db->insert_id();
  17.                         if(@ftp_put($ftp_store_hd, $attach_fname, $attach['tmp_name'], FTP_BINARY)) {
  18.                                 @ftp_close($ftp_store_hd);                     
  19.                                 $db->query("DELETE FROM {$tablepre}ftpstoreerror WHERE aid={$teid}");
  20.                                 $attach['filename'] = $attach['name'];
  21.                                 $attach['filesize'] = $attach['size'];
  22.                                 $attach['perm'] = $allowsetattachperm ? $attachperm[$key] : 0;
  23.                                 $attach['description'] = cutstr(dhtmlspecialchars($attachdesc[$key]), 100);
  24.                                 $attach['attachment'] = $attach_fname0;
  25.                                 $attacharray[] = $attach;
  26.                                                 if($ftplist['backup']['on']){
  27.                                                 $ftp_backup_hd=ftpconnect($ftplist['backup']);
  28.                                                 if($attach_subdir) {
  29.                                 if(!@ftp_chdir($ftp_backup_hd, $attach_subdir)) {
  30.                                         ftp_mkdir($ftp_backup_hd, $attach_subdir);
  31.                                         ftp_chdir($ftp_backup_hd, $attach_subdir);
  32.                                 }
  33.                                 
  34.                         }
  35.                                                 $db->query("INSERT INTO {$tablepre}ftpbackuperror(attachment,dateline) VALUES('{$attach_fname0}','{$timestamp}')");
  36.                                                 $teid=$db->insert_id();
  37.                                                 if(@ftp_put($ftp_backup_hd,$attach_fname,$attach['tmp_name'],FTP_BINARY)){
  38.                                                                 @ftp_close($ftp_backup_hd);
  39.                                                                 $db->query("DELETE FROM {$tablepre}ftpbackuperror WHERE aid={$teid}");
  40.                                                                 }
  41.                                                 }
  42.                                                                
  43.                                                                
  44.                         } else {
  45.                                 showmessage('post_attachment_save_error');
  46.                         }
  47.                 }
复制代码

5、打开 include/editpost.inc.php,找:


  1. @unlink($attachdir.'/'.$attach['attachment']);
复制代码

改成:


  1. if(!$ftplist['store']['on']) {
  2.                                                 @unlink($attachdir.'/'.$attach['attachment']);
  3.                                         } else {
  4.                                                 del_ftp_attach($ftplist['store'], $attach['attachment']);
  5.                                                                                                 if($ftplist['backup']['on'])
  6.                                                                                                 del_ftp_attach($ftplist['backup'],$attach['attachment']);
  7.                                         }
复制代码



再找:


@unlink($attachdir.'/'.$attach['attachment']);
改成:
if(!$ftplist['store']['on']) {
                                        @unlink($attachdir.'/'.$attach['attachment']);
                                } else {
                                        del_ftp_attach($ftplist['store'], $attach['attachment']);
                                                                                if($ftplist['backup'])
                                                                                del_ftp_attach($ftplist['backup'],$attach['attachment']);
                                }

6、打开topicadmin.php,找:


找(共两处):


  1. @unlink($attachdir.'/'.$attach['attachment']);
复制代码

改成:


  1. if(!$ftplist['store']['on']) {
  2.                                                 @unlink($attachdir.'/'.$attach['attachment']);
  3.                                         } else {
  4.                                                 del_ftp_attach($ftplist['store'],$att['attachment']);
  5.                                                                                                 if($ftplist['backup']['on'])
  6.                                                                                                 del_ftp_attach($ftplist['backup'],$att['attachment']);
  7.                                         }
复制代码

7、打开attachment.php,找:


  1. if(is_readable($filename) && $attachexists) {
复制代码

在上面添加:


  1. if(!$ftplist['store']['on']) {
复制代码

再找:


  1. else {

  2.         showmessage('attachment_nonexistence');

  3. }
复制代码
在下面添加:


  1. } else {
  2. ob_end_clean();
  3. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  4. header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  5. header('Cache-Control: private');
  6. header('Pragma: no-cache');
  7. header('Content-Encoding: none');
  8. if(!$download && $isimage) {
  9.         header('Content-Disposition: '.(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ').'filename='.$attach['filename']);
  10. } else {
  11.         header('Content-Disposition: attachment; filename='.$attach['filename']);
  12. }
  13. header('Content-Type: '.$attach['filetype']);
  14. if($download) {
  15.         $result = ftpconnect($ftplist['store']);
  16.         $ftp_path = dirname($attach[attachment]);
  17.         $ftp_file = basename($attach[attachment]);
  18.         ftp_chdir($result,$ftp_path);
  19.         $tmpfile = tempnam( getcwd()."/", "temp" );
  20.         if(ftp_get($result, $tmpfile, $ftp_file, FTP_BINARY)){
  21.                 ftp_quit($result);
  22.                 readfile($tmpfile);
  23.                 unlink($tmpfile);
  24.                 exit;
  25.                } else {
  26.                 showmessage('attachment_nonexistence');
  27.         }
  28.         unlink($tmpfile);
  29.         ftp_quit($result);
  30. } else {
  31.         readfile($ftplist['store']['url'].'/'.$attach['attachment']);
  32. }
  33. if(!$isimage) {        
  34.         updatecredits($discuz_uid, $creditspolicy['getattach'], -1);
  35. }
  36. }
复制代码


8、完成。

====================================
付上卸载代码:


  1. DROP TABLE cdb_ftpstoreerror ;
  2. DROP TABLE cdb_ftpbackuperror;
复制代码

[ 本帖最后由 plainer13 于 2006-5-12 21:48 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| plainer13 发表于 2006-5-12 21:14:51 | 显示全部楼层

手动安装更新

5月13日更新
安装方法:

首先到后台,升级数据库,执行以下SQL:

  1. CREATE TABLE cdb_ftpstoreerror (
  2. aid Integer(5) NOT NULL AUTO_INCREMENT,
  3. attachment Varchar(100) NOT NULL,
  4. dateline Integer(10) NOT NULL,
  5. PRIMARY KEY (aid)
  6. );

  7. CREATE TABLE cdb_ftpbackuperror (
  8. aid Integer(5) NOT NULL AUTO_INCREMENT,
  9. attachment Varchar(100) NOT NULL,
  10. dateline Integer(10) NOT NULL,
  11. PRIMARY KEY (aid)
  12. );
复制代码

1、把 attchftp.php 文件放在论坛根目录,并修改里面的值。

2、打开 common.inc.php,找到:


  1. require_once DISCUZ_ROOT.'./config.inc.php';
复制代码

在上面添加:


  1. require_once DISCUZ_ROOT.'./attchftp.php';
复制代码


3、打开 admin/forum.inc.php,找:



  1. $tids = 0;
  2.                 $query = $db->query("SELECT tid FROM {$tablepre}threads WHERE attachment>'0' AND fid='$fid'");
  3.                 while($thread = $db->fetch_array($query)) {
  4.                         $tids .= ','.$thread['tid'];
  5.                 }

  6.                 if($tids) {
  7.                         $query = $db->query("SELECT filename FROM {$tablepre}attachments WHERE tid IN ($tids)");
  8.                         while($attach = $db->fetch_array($query)) {
  9.                                 @unlink($attachdir.'/'.$attach['filename']);
  10.                         }
  11.                         $db->query("DELETE FROM {$tablepre}attachments WHERE tid IN ($tids)");
  12.                 }
复制代码

修改成:



  1.                 $tids = 0;
  2.         $query = $db->query("SELECT tid FROM {$tablepre}threads WHERE attachment>'0' AND fid='$fid'");
  3.         while($thread = $db->fetch_array($query)) {
  4.              $tids .= ','.$thread['tid'];
  5.         }

  6.        if($tids) {
  7.              $query = $db->query("SELECT filename FROM {$tablepre}attachments WHERE tid IN ($tids)");
  8.                                                  
  9.                                 
  10.               while($attach = $db->fetch_array($query)) {
  11.                      if(!($ftplist['store']['on'])){
  12.                                         @unlink($attachdir.'/'.$attach['filename']);
  13.                                         }
  14.                                         else{
  15.                                                 del_ftp_attach($ftplist['store'], $attach['attachment']);
  16.                                                 if($ftplist['backup']['on']){
  17.                                             del_ftp_attach($ftplist['backup'],$attach['attachment']);
  18.                         }
  19.                                         }
  20.                     $db->query("DELETE FROM {$tablepre}attachments WHERE tid IN ($tids)");
  21.                }
  22.                         
  23.        }

复制代码


4、打开 include/post.func.php,找到:


  1. // watermark filename
复制代码

在上面加上:


  1. global $ftplist,$fid, $timestamp;
复制代码

再找:


  1. $target = $attachdir.'/'.stripslashes($attach['attachment']);
复制代码

在下面加上:


  1. if(!$ftplist['store']['on']) {
复制代码

再找:


  1. $attacharray[] = $attach;
  2.                         }
  3.                 } else {
  4.                         showmessage('post_attachment_save_error');
  5.                 }
复制代码

下面加上:


  1. } else {
  2.                         $attach_fname = substr($filename, 0, 64) . '_' . random(12) . '.' . $extension;
  3.                         $ftp_store_hd = ftpconnect($ftplist['store']);
  4.                                                
  5.                         //ftp_cdup($result);
  6.                         if($attach_subdir) {
  7.                                 if(!@ftp_chdir($ftp_store_hd, $attach_subdir)) {
  8.                                         ftp_mkdir($ftp_store_hd, $attach_subdir);
  9.                                         ftp_chdir($ftp_store_hd, $attach_subdir);
  10.                                 }
  11.                                 $attach_fname0 = $attach_subdir . '/' . $attach_fname;
  12.                         } else {
  13.                                 $attach_fname0 = $attach_fname;
  14.                         }
  15.                         $db->query("INSERT INTO {$tablepre}ftpstoreerror(attachment, dateline) VALUES('{$attach_fname0}', '{$timestamp}')");
  16.                         $teid = $db->insert_id();
  17.                         if(@ftp_put($ftp_store_hd, $attach_fname, $attach['tmp_name'], FTP_BINARY)) {
  18.                                 @ftp_close($ftp_store_hd);                     
  19.                                 $db->query("DELETE FROM {$tablepre}ftpstoreerror WHERE aid={$teid}");
  20.                                 $attach['filename'] = $attach['name'];
  21.                                 $attach['filesize'] = $attach['size'];
  22.                                 $attach['perm'] = $allowsetattachperm ? $attachperm[$key] : 0;
  23.                                 $attach['description'] = cutstr(dhtmlspecialchars($attachdesc[$key]), 100);
  24.                                 $attach['attachment'] = $attach_fname0;
  25.                                 $attacharray[] = $attach;
  26.                                                 if($ftplist['backup']['on']){
  27.                                                 $ftp_backup_hd=ftpconnect($ftplist['backup']);
  28.                                                 if($attach_subdir) {
  29.                                 if(!@ftp_chdir($ftp_backup_hd, $attach_subdir)) {
  30.                                         ftp_mkdir($ftp_backup_hd, $attach_subdir);
  31.                                         ftp_chdir($ftp_backup_hd, $attach_subdir);
  32.                                 }
  33.                                 
  34.                         }
  35.                                                 $db->query("INSERT INTO {$tablepre}ftpbackuperror(attachment,dateline) VALUES('{$attach_fname0}','{$timestamp}')");
  36.                                                 $teid=$db->insert_id();
  37.                                                 if(@ftp_put($ftp_backup_hd,$attach_fname,$attach['tmp_name'],FTP_BINARY)){
  38.                                                                 @ftp_close($ftp_backup_hd);
  39.                                                                 $db->query("DELETE FROM {$tablepre}ftpbackuperror WHERE aid={$teid}");
  40.                                                                 }
  41.                                                 }
  42.                                                                
  43.                                                                
  44.                         } else {
  45.                                 showmessage('post_attachment_save_error');
  46.                         }
  47.                 }
复制代码

5、打开 include/editpost.inc.php,找:


  1. @unlink($attachdir.'/'.$attach['attachment']);
复制代码

有2处

都改成:
  1. if(!$ftplist['store']['on']) {
  2.                                         @unlink($attachdir.'/'.$attach['attachment']);
  3.                                 } else {
  4.                                         del_ftp_attach($ftplist['store'], $attach['attachment']);
  5.                                                                                 if($ftplist['backup'])
  6.                                                                                 del_ftp_attach($ftplist['backup'],$attach['attachment']);
  7.                                 }
复制代码

6、打开topicadmin.php,找:


找(共两处):


  1. @unlink($attachdir.'/'.$attach['attachment']);
复制代码

改成:


  1. if(!$ftplist['store']['on']) {
  2.                                                 @unlink($attachdir.'/'.$attach['attachment']);
  3.                                         } else {
  4.                                                 del_ftp_attach($ftplist['store'],$att['attachment']);
  5.                                                                                                 if($ftplist['backup']['on'])
  6.                                                                                                 del_ftp_attach($ftplist['backup'],$att['attachment']);
  7.                                         }
复制代码

7、打开attachment.php,找:


  1. if(is_readable($filename) && $attachexists) {
复制代码

在上面添加:


  1. if(!$ftplist['store']['on']) {
复制代码

再找:


  1. else {

  2.         showmessage('attachment_nonexistence');

  3. }
复制代码
在下面添加:


  1. } else {
  2. ob_end_clean();
  3. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  4. header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  5. header('Cache-Control: private');
  6. header('Pragma: no-cache');
  7. header('Content-Encoding: none');
  8. if(!$download && $isimage) {
  9.         header('Content-Disposition: '.(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ').'filename='.$attach['filename']);
  10. } else {
  11.         header('Content-Disposition: attachment; filename='.$attach['filename']);
  12. }
  13. header('Content-Type: '.$attach['filetype']);
  14. if($download) {
  15.         $result = ftpconnect($ftplist['store']);
  16.         $ftp_path = dirname($attach[attachment]);
  17.         $ftp_file = basename($attach[attachment]);
  18.         ftp_chdir($result,$ftp_path);
  19.         $tmpfile = tempnam( getcwd()."/", "temp" );
  20.         if(ftp_get($result, $tmpfile, $ftp_file, FTP_BINARY)){
  21.                 ftp_quit($result);
  22.                 readfile($tmpfile);
  23.                 unlink($tmpfile);
  24.                 exit;
  25.                } else {
  26.                 showmessage('attachment_nonexistence');
  27.         }
  28.         unlink($tmpfile);
  29.         ftp_quit($result);
  30. } else {
  31.         readfile($ftplist['store']['url'].'/'.$attach['attachment']);
  32. }
  33. if(!$isimage) {        
  34.         updatecredits($discuz_uid, $creditspolicy['getattach'], -1);
  35. }
  36. }
复制代码


8、完成。

====================================
付上卸载代码:


  1. DROP TABLE cdb_ftpstoreerror ;
  2. DROP TABLE cdb_ftpbackuperror;
复制代码

[ 本帖最后由 plainer13 于 2006-5-13 08:54 编辑 ]
回复

使用道具 举报

孤情一刀 发表于 2006-5-12 21:23:04 | 显示全部楼层
原帖由 plainer13 于 2006-5-12 21:06 发表
不太可靠,由于时间仓促 ,可能存在括号不匹配等问题,请帮助修改,完成之后会重发一遍。

安装方法:

首先到后台,升级数据库,执行以下SQL:

CREATE TABLE cdb_ftpstoreerror (
aid Integer(5) NOT NULL ...

汗,我自己刚才用对比的做出手动的,没想到你比我还快-_-||
回复

使用道具 举报

 楼主| plainer13 发表于 2006-5-12 21:27:50 | 显示全部楼层
原帖由 孤情一刀 于 2006-5-12 21:23 发表

汗,我自己刚才用对比的做出手动的,没想到你比我还快-_-||

辛苦了,帮测试一下吧
回复

使用道具 举报

孤情一刀 发表于 2006-5-12 21:30:19 | 显示全部楼层
原帖由 plainer13 于 2006-5-12 21:27 发表

辛苦了,帮测试一下吧

我现在马上就安装看看有没问题!!谢谢你啊

我装了 摸烟的4次~~都是失败告钟..我请人帮我申请了德国的这个空间,现在正好用上场
回复

使用道具 举报

 楼主| plainer13 发表于 2006-5-12 21:32:33 | 显示全部楼层
原帖由 孤情一刀 于 2006-5-12 21:30 发表

我现在马上就安装看看有没问题!!谢谢你啊

我装了 摸烟的4次~~都是失败告钟..我请人帮我申请了德国的这个空间,现在正好用上场

测试论坛也用德国的空间存附件,不用浪费呀
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-21 23:14 , Processed in 0.030920 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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