文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>危险的 glob 函数

危险的 glob 函数

时间:2008-08-04  来源:hellwolf

假设你有一个文件夹,你要删除里面类似这样命名的文件 :
/path/to/dir/000000 - Smooth Faker
/path/to/dir/000000 - Rubber Hocker
...

在 perl 里你可以用很多方法得到这样的文件列表(TIMTOWTDI),诸如opendir后grep, find函数,当然还有更容易让shell迷想起的glob函数。 不过关于glob函数,这里有个很大的陷阱,如果不注意他将可能导致灾难后果,比如:

unlink glob("/path/to/dir/000000 - *");

看上去似乎没问题,但这个危险的操作可以删除你当前文件下的的所有文件。

让我们仔细看文档, perldoc File::Glob :

       Since v5.6.0, Perl’s CORE::glob() is implemented in terms of
       bsd_glob().  Note that they don’t share the same
       prototype--CORE::glob() only accepts a single argument.  Due to
       historical reasons, CORE::glob() will also split its argument on
       whitespace, treating it as multiple patterns, whereas bsd_glob()
       considers them as one pattern.

也就是说,这里的 glob 操作变成了, File::Glob::bsd_glob("/path/to/dir/00000", "-", "*"), 你将会删掉'*'匹配的所有文件。解决办法是用双引号括起整个部分,或者使用File::Glob::bsd_glob。

按理这个是已经在文档中说明了,不应该算是陷阱,不过如果你仅仅用 perldoc -f glob 查看,那么并没有类似的说明和警告而是让你转而看 File::Glob 的说明。(常常的)偷懒和想当然的结果就是,忽视了这里最大的一个可能引爆的漏洞。所以这里的建议是不使用glob而是使用File::Glob::bsd_glob。
相关阅读 更多 +
排行榜 更多 +
三角符文第一章下载

三角符文第一章下载

角色扮演 下载
闪客快打3无敌版下载

闪客快打3无敌版下载

飞行射击 下载
嘀嘀动画官方正版下载

嘀嘀动画官方正版下载

趣味娱乐 下载