如果你有一个支持cdn的FTP空间,这个空间又支持绑定域名,那么你可以使用这款自动上传媒体文件到远程FTP存储插件。当你通过WordPress的媒体功能上传文件时,它会自动检查本地所有的媒体文件,并且将远程FTP空间中没有的文件上传到FTP空间中存储,并且会提供FTP空间的调用地址。这样我们就能将所有媒体文件独立出去,并且利用ftp空间的cdn进行加速,也就是传说中的动静分离。这样做的好处多多,坏处也有。
我们都知道,现代浏览器为了保护网站,都限制了相同域名并发量,一般是同时发起6个请求,超过就得排队。而我们的网页一般都有几十个资源组成,如果全部都在一个域名,难免会排队。如果使用二级域名绑定到ftp空间中,那么媒体图片资源将区别于网页域名,不受6个并发限制,并且我们知道媒体文件一般都很大,个人站长几乎都是小水管,支持cdn的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后台插件页面搜索安装即可。
评论 (1)