广告

兔源码网 - 专注DZ模版分享、DZ插件分享!

 找回密码
 立即注册
PS教程

Discuz系统学习:远程附件

[复制链接]
tuyuanma 发表于 2017-1-16 06:45:48 | 显示全部楼层 |阅读模式
温馨提醒:禁止内容附带广告图片、二维码图片,否则将在不通知情况下永久禁言账号!
欢迎加入兔源码站长交流群,您的加入是我们前行的动力!

DZ站长建站交流群:493651246

[ 温馨提示:点击上方群文字,可快速加入QQ群 ]


1。远程附件设置

Discuz软件提供了一个远程附件的功能,启用后能将站内上传的各种文件(如日志文章帖子里加的相册图片和文章帖子里加的附件)都放在和网站服务器分离的一个远程空间里去。谢谢网友 carry0987 提供了这样一个空间,让我能有机会测试下这个功能。他提供的远程空间信息是(文中的用户名和密码是虚拟的):
  • FTP主機IP: 31.170.165.167
  • FTP主機名: ftp.qbnehs.esy.es
  • FTP用戶名: u123456784
  • FTP密碼: A1234567
在我的测试网站 http://distst.website/dz32 上的管理中心的全局->上传设置->远程附件里做了如下设置:
1.png
2.png

主动模式和被动模式是FTP通信里的两种工作模式,名称源于服务器端是否向客户端发起连接,见 http://www.slacksite.com/other/ftp.html 里的介绍。有些FTP服务器只支持主动模式,有些只支持被动模式(如Godaddy),有些两种都支持。FTP客户端必须用服务器端支持的模式来和服务器通信。

下面是在看到的远程空间里的内容:
3.png
在设置时填写的'远程附件目录'(我上面填的是test)相当于基本设置里的'本地附件保持位置'(默认值是./data/attachment),两者下面有同样的文件夹结构。

现在在日志文章相册和论坛里加的图片和附件都到了远程空间:
4.png
而且在相册里将图片删掉和论坛里将附件删掉后,它们在远程空间里也立刻消失了。
再从cPanel进入我的网站服务器里看,那些上传文件都没存在网站服务器里,而只存在了远程空间里。网站服务器上只有空文件夹。
5.png


2。如何在程序里接触远程附件

先看看如何在程序里得到远程附件里的设置值。它们的值在程序里都可以按它们的设置名来获取: getglobal('setting/ftp/设置名') 或 $_G['setting']['ftp']['设置名'] 。下面是那些设置项的标签和设置名的对应表:
  • 启用远程附件 on
  • 启用 SSL 连接 ssl
  • FTP 服务器地址: host
  • FTP 服务器端口: port
  • FTP 帐号: username
  • FTP 密码: password
  • 被动模式(pasv)连接: pasv
  • 远程附件目录: attachdir
  • 远程访问 URL: attachurl
  • FTP 传输超时时间: timeout
  • 允许的附件扩展名: allowedexts
  • 禁止的附件扩展名: disallowedexts
  • 附件尺寸下限: minsize
  • 隐藏远程附件真实路径: hideurl
比如'启用远程附件'设置值可用 getglobal('setting/ftp/on') 或 $_G['setting']['ftp']['on'] 来得到。

PHP提供了一整套与远程空间联系的FTP客户端函数,见 http://php.net/manual/zh/ref.ftp.php,而Discuz将它们包在了一个叫discuz_ftp的单例模式的类里,定义在文件source/class/discuz/discuz_ftp.php里。然后又在文件source/function/function_core.php里定义了函数 ftpcmd 作为统一入口来调用discuz_ftp类里的各函数。所以所有用到Discuz里远程附件功能的地方就只要调用这个函数就行了。

下面以在相册里上传图片为例看看是如何用这个函数的。在上传图片时,浏览器给网站服务器发了下面的请求:
  1. POST /discuz32/misc.php?mod=swfupload&action=swfupload&operation=album HTTP/1.1
复制代码
在服务器端是由下面这些脚本文件来传递和合作处理这个请求的:
  1. misc.php
  2.   => source/module/misc/misc_swfupload.php
  3.     => pic_save in source/function/function_spacecp.php
复制代码
上传后的图片先存在了网站本地附件目录里。如果网站启用了远程附件的话,会将刚存在本地的图片拷贝到远程空间去,然后再删除本地图片。其中用到 ftpcmd 的相关代码就在函数 pic_save 内:
  1. if(getglobal('setting/ftp/on')) {
  2.     $ftpresult = ftpcmd('upload', 'album/'.$upload->attach['attachment']);
  3.     if($ftpresult) {
  4.         @unlink($_G['setting']['attachdir'].'album/'.$upload->attach['attachment']);
复制代码


版权声明
1、转摘或引用本站内容资源须注明原网址,并标明本站网址(兔源码www.tuyuanma.com);
2、对于转摘或引用本站内容资源而引起的民事纠纷、行政处罚或其他损失,本站不承担责任;
3、对于不遵守本声明或其他违法、恶意使用本站内容者,本站保留其追究法律责任的权利。




自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

兔源码网 ( 赣ICP备17001544号 公网安备36112102000036号 )

兔源码 QQ交流群:493651246  GMT+8, 2018-12-13 14:10
←站长统计工具 查看密码:tuyuanma

兔源码DZ模板下载 站长邮箱:tuyuanma@qq.com 站长QQ:3197813386 网站地图

© 2001-2013 本站内容皆来自互联网及用户分享,如需删除请提供软著或商标证书。

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