织梦上传附件临时缓存文件函数AddMyAddon($fid,$filename)分析

admin2020-02-131431

如果不做织梦二次开发,我们还真很难发现这个函数的用处,也许你从来没有听说过这个函数AddMyAddon($fid,$filename),但是,这个函数并不是不重要而是非常重要,这个函数的功能是当我们上传一个附件,这里的附件指的是上传图片、视频、压缩文件等等,当上传一个文件时,织梦程序并不是立马马上插入到织梦附加表#@__uploads里面,我们想一下,如果我们在文章模型里面建立的附加字段然后,上传一个视频文件,如下图所示:

151114k3g0bgx6gx6fxq5h.jpg

此时,并没有上传任何东西,当然,数据库表里面什么也没有,当我把一个mp3上传到网站后,如下图所示。

image.png

注意,此时,我并没有点击发布页面的“保存”按扭,如果让你设计这个功能的话,你会如何处理我们上传的mp3?因为此时,程序点击“保存”整个填写的文章标题和文章内容都无法保存到数据库里面,这时,你会如何处理?

织梦官方是这样处理的:当上传一个附件后织梦会通过函数AddMyAddon($fid,$filename)生成一个缓存文件放在/data/cache/文件夹里面,然后,把这个附件相关信息保存到数据库表# __uploads里面,但是,此时,因为,这篇文章并没有生成,所以,这篇文件的id是不存在的,文章标题(织梦mp3文件),文章内容当然也无法保存到数据库表里面,因为,没有点击“保存”按扭。

而此时,程序会把上传的附件放到# __uploads里面,如下图所示。

120732rkstsg3lllwn73tn.jpg

此时,文章标题和对应的id,分别是上传mp3的文件名和文章id为0,因为,没有保存内容。

当点击“保存”按扭后,程序就会用文章标题和对应的id替换掉数据库表里面的对应的临时标题和文章id,然后,把缓存文件删除掉。

当我点击“保存”后,再看一下数据库表里面的id为41的记录如下图所示:

120732rkstsg3lllwn73tn.jpg

二个都已经替换掉了,此时,缓存文件addon-b0dmvhsj4c3oghgul8a28pkgd7.inc也被删除掉,这个缓存文件存放的内容为:

<?php
$myaddons = array();
$maNum = 0;
$myaddons[$maNum] = array('42', '/uploads/media/150819/1-150Q9113F9.mp3');
$maNum = 1;

本教程的函数就是生成这个临时缓存文件,等点击“保存”后,程序就会把这个文件与文档关联起来,等使用完后,程序就会删除这个缓存文件,这个函数的的作用就是起到临时使用,使用后会被删除掉。

函数所在文件:include/userlogn.class.php

参数:$fid 文件id;$filename 文件名称

代码分析开始:

其实,这个函数里面的代码算是比较简单的了,就是组装缓存文件而已。

1.设置缓存文件名

$caheFile= DEDEDATA.'/cache/addon-'.session_id().'.inc';

2.if(!file_exists($cacheFile))若这个文件不存在(第一次使用时,这个文件肯定不存在)则建立文件并且以"w"方式,即覆盖方式写文件,一般来说建立一个新文件时,都用这个种方式建立文件,但是,如果是已经存在的文件,则万不可用这种方式,否则,会把已经存在的文件内容给删除掉。

然后,把下面三行代码:

<?php
$myaddons = array();
$maNum = 0;

写入到文件里面,然后,关闭文件。这个条件就做了这样的事情。

3.引入这个缓存文件:include($cachFile);引入文件实际上就是找到这个文件的路径。

然后打开这个文件,并以追加到尾部方式打开文件,这里注意就是用的"a"方式打开文件,注意与上面的以"w"的区别。

然后$maNum++ ;

然后,建立一个数组:

$myaddons[$maNum] = array('42', '/uploads/media/150819/1-150Q9113F9.mp3');

把这个数组写入到这个缓存文件里面。

然后,把$maNum = 1;写入到缓存文件里面。

最后,不要忘记关闭缓存文件。

这个函数是比较简单的就是建立缓存文件,并写入内容,但是,这个函数的用处非常重要。


网友评论