问答详情
源自:1-5 创建文件

由于basename会过滤掉/和\,大家看看我这个解决办法如何?

if(!preg_match($patten,basename($filename))

改为

if(!preg_match($patten,basename($filename))&&pathinfo($filename,PATHINFO_FILENAME)!=''&&pathinfo($filename,PATHINFO_DIRNAME)!='.')

这样的话就可以解决问题,或者说哪位大神有更好的办法可以说说呀

提问者:Scny 2016-05-07 10:19

个回答

  • segra
    2016-06-27 15:35:58
    已采纳

    我觉得你这就挺好的啊

  • breakit
    2016-07-30 18:14:38

    我将createFile方法改成两个参数的:

    1、index.php文件中 ——————————————————————————

    if ($act == "创建文件") {

    $mes=createFile($filename,$path."/".$filename);

    alertMes($mes, $redirect);

    }


    2、file.func.php文件中 ——————————————————————————

    function createFile($filename,$full_filename) {

    //file/1.txt

    //验证文件名的合法性,是否包含/,*,<>,?,|

    $pattern = "/[\/,\*,<>,\?\|]/";

    if (! preg_match ( $pattern, $filename ) ) {

    //检测当前目录下是否存在同名文件

    if (! file_exists ( $full_filename )) {

    //通过touch($filename)来创建

    if (touch ( $full_filename )) {

    return "文件创建成功";

    } else {

    return "文件创建失败";

    }

    } else {

    return "文件名重复!请重命名后再创建新文件。";

    }

    } else {

    return "非法文件名";

    }

    }