Discuz系统学习:远程附件-Discuz教程下载

Discuz系统学习:远程附件

来自版块: Discuz教程发表于: 2017-1-16 06:45:48
38061
0
如本资源下载地址失效,请点击此处进行反馈
开通本站Svip会员,全站资源免费下
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']);
复制代码

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部