代码 'if(-e "filename")' 测试在执行包含该代码的脚本的目录中是否存在名为 filename 的文件。
什么是做名字检查?珀尔?操作系统?POSIX 操作系统上的重击?
'if(-e "cat string")' 会在 Linux 上执行 cat 命令吗?
我想知道为了能够避免像“../file”这样的不需要的文件访问会访问父目录中的文件。
分享我的校验码:
if($folder =~ m/$([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)^|$([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)\/|\/([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)\/|\/([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)^|\$'[^']*'/)
{
#error
}
更新的正则表达式:
if($folder =~ m/(\/|\\)|$([\\]?\.[\\]?\.^|$[\\]?(\*|\?)^|\$'[^']*'/)
{
#error
}
说明:$folder 应该已经是一个纯文件名了。如果它包含 Windows 或 POSIX 路径分隔符或者是(任何转义的)父目录反向链接或者是(任何转义的)通配符(因为它匹配第一个匹配文件并至少在 Mac OS X 上返回 true)或者包含 C ANSI 转义任何地方的序列,信号错误。其他任何东西,即使不合法或不合法,也应该简单地返回“文件不存在”,因此可以提供给“if(-e $folder)”。