织梦检测是否可写函数IsWritable($pathfile)

admin2023-01-18955

函数所在文件: dede/inex_testnv.php

返回值:ture or false,若参数是目录,例如/data/且最后有"/"的返回真,或参数是文件的返回真,其它返回假。

这个函数既可以检测目录是否可写,也可以检测文件是否可写,这个函数跟TestWriteable($d, $c=false)功能有点类似,但是,函数TestWriteable($d, $c=false)检测的是目录,而且,织梦已经废弃掉了这个函数,而使用本教程里面介绍的函数。

函数IsWritable($pathfile)里面的参数即可以是目录,也可以是文件。若是这样这个函数就要处理这二种情况,事实这个函数也是这样处理的。

第一行代码:首先判断用户传过来的参数$pathfile是不是目录,若是则返回true,否则返回false,代码是:

$isDir = substr($pathfile,-1)=='/' ? true : false;

第二行代码:若$isDir为true,并不一定就是目录,例如用户传的参数为:www.xxx.com/abc.php/ 这后面也带了一个符号“/”,但是,这并不是一个目录,可能是用户多写了一个“/”,不管怎么样,仅凭一个“/”是无法判断最后为“/”的就一定是目录,所以,接下来再判断if(is_dir($pathfile))是不是目录,若是,则组装成一个类似的文件名:

dede_144493497455c9746bf054a.tmp

否则若创建$pathfile目录成功,则进行递归调用:

elseif (@mkdir($pathfile)) {
return IsWritable($pathfile);

否则,$pathfile就是不量个目录,返回false 。

改变$pathfile的模式为可写:

@chmod($pathfile,0777);

若可写的方式用二进制能打开这个文件$pathfile,说明可写,否则,不可写,代码为:

$fp = @fopen($pathfile,'ab');
if ($fp===false) return false;
fclose($fp);

下面的代码就不用多解释了。

网友评论