织梦获得新文件名函数GetFileNewName()
这个函数只有一个地方用到就是在生成html的时候用到,也就是在文档类include/arc.archives.class.php里面。如果没有这个函数也是不行的,虽然,这个函数用到的地方少,所以,我们这里对这个函数进行分析一下,以便以后那一次用到作准备。
函数名:GetFileNewName($aid,$typeid,$timetag,$title,$ismake=0,$rank=0,$namerule='',$typedir='',$money=0,$filename=''
所在文件:include/helpers/channelunit.helper.php
参数:
* @param int $aid 文档ID
* @param int $typeid 栏目ID
* @param int $timetag 时间戳
* @param string $title 标题
* @param int $ismake 是否生成
* @param int $rank 阅读权限
* @param string $namerule 名称规则
* @param string $typedir 栏目dir
* @param string $money 需要金币
* @param string $filename 文件名称
* @return string
功能:获得文件名(本函数会自动创建目录)
代码分析开始:
不知道大家还记得不,在获取文件名GetFileName()函数里面,有一个条件判断,若阅读权限不为0,消费大于零时,若没有开启伪静态,那么,这个生成的内容页就会是动态网址形式,如下图所示。
既然有这种情况,那么,就要处理这种情况,在生成新文件函数里,若遇到这种情况,就直接返回这个文件名。
若$cfg_arc_dirname='Y'(是否允许用目录作为文档文件名),并且以符号"/"结尾的,例如:http://www.dedebase.com/a/webbase/92/形式的文件名,那么,就在这个链接后面加上index.html,
即:http://www.dedebase.com/a/webbase/92/ndex.html,这个功能是由下面的代码来实现的:
if($cfg_arc_dirname=='Y' && preg_match("/\/$/", $articlename)) { $articlename = $articlename."index.html"; }
程序接下来查找获取文件名后,文件的路径,代码为:
$slen = strlen($articlename)-1; for($i=$slen;$i>=0;$i--) { if($articlename[$i]=='/') { $subpos = $i; break; } }
首先,查询一下获得的文件名的长度,这地方为什么要减1 ? 因为,我们查询出来的有可能类似上面的/a/webbase/92/这样的,如果是这样的我们减法1后,如果从最后开始查斜杠"/",那么,找到的第一个斜杠就是92前面的,这样通过上面for遍历,这个遍历是从最后开始的,当找到第一个'/'时,把$i位置记录在$subpos里面,然后,跳出循环,接行下面的代码。
$okdir = substr($articlename,0,$subpos);
当执行到这行代码后,程序会截取从0到$i位置的字符串,即,把/a/sebase截取出来,这样程序就可以通过下面的代码:CreateDir($okdir);来创建一个目录了。
可能有的人问,若是函数获得的文件名为:http://www.dedebase.com/plus/view.php?aid=92形式呢?其实是一样的,这个减去10也没有问题。因为最后一个斜杠后面的字符串很长。
然后,返回创建的好的文件名。