让代码更简单

当前位置:代码狗 > WordPress > WP建站 > 正文

WordPress插件自动上传媒体文件到远程FTP存储

如果你有一个支持cdn的FTP空间,这个空间又支持绑定域名,那么你可以使用这款自动上传媒体文件到远程FTP存储插件。当你通过WordPress的媒体功能上传文件时,它会自动检查本地所有的媒体文件,并且将远程FTP空间中没有的文件上传到FTP空间中存储,并且会提供FTP空间的调用地址。这样我们就能将所有媒体文件独立出去,并且利用ftp空间的cdn进行加速,也就是传说中的动静分离。这样做的好处多多,坏处也有。

我们都知道,现代浏览器为了保护网站,都限制了相同域名并发量,一般是同时发起6个请求,超过就得排队。而我们的网页一般都有几十个资源组成,如果全部都在一个域名,难免会排队。如果使用二级域名绑定到ftp空间中,那么媒体图片资源将区别于网页域名,不受6个并发限制,并且我们知道媒体文件一般都很大,个人站长几乎都是小水管,支持cdn的ftp空间还能对文件进行加速,效果棒棒哒!

WordPress插件自动上传媒体文件到远程FTP存储

WordPress插件自动上传媒体文件到远程FTP存储

效果如上图所示,下面看核心源码,完整文件在文末下载。

function ftp_putAll($conn_id, $src_dir, $dst_dir, $created) {
            $d = dir($src_dir);//获取本地uploads目录下的所有文件夹和文件
	    while($file = $d->read()) { // 遍历本地目录及文件
	        if ($file != "." && $file != "..") { // 不是当前目录或上层目录
				clearstatcache();//清除文件夹状态缓存
	            if (is_dir($src_dir."/".$file)) { // 如果是文件夹
	                if (!@ftp_chdir($conn_id, $dst_dir."/".$file)) { //改变ftp当前目录,改变失败就创建目录
	                    ftp_mkdir($conn_id, $dst_dir."/".$file); // 创建文件夹
	                }
	                $created  = ftp_putAll($conn_id, $src_dir."/".$file, $dst_dir."/".$file, $created); // 递归
	            } else { //如果是文件
			if(!file_exists($file)){ //如果该文件不存在
				$upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // 上传文件
				if($upload) //上传成功
					$created[] = $src_dir."/".$file; //新文件地址
				}
			       clearstatcache();//清除文件状态查询缓存
	              }
	        }
	    }
	    $d->close();
	    return $created;
	}

几乎所有的代码我都加了注释,应该看得懂了。php连接ftp的动作我这里没写,这里的主要逻辑是遍历本地目录文件与远程文件目录对比,如果远程没有,就上传到ftp存储空间,最后返回本次上传的所有文件链接。

注意:使用ftp上传文件需要打开php的ftp扩展模块!另外,这种写法不适合有很多图片的站,因为每次上传都会检查所有文件,会出现504超时,发出来仅仅是为了学习参考。建议使用成熟的插件Hacklog Remote Attachment,直接在WordPress后台插件页面搜索安装即可。

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 1

  1. #1

    wp模板和插件都很多,可玩性好。

    直流水泵8个月前 (04-01)回复
×

请作者吃根烤肠!

支付宝