PHP:文件存在并位于某个子目录中

时间:2010-06-11 15:34:07

标签: php validation file user-input

我获得了一个用户文件的文件路径,我想确保此路径是有效的现有用户文件,而不是虚假或系统文件或类似的东西。

我知道我可以使用file_exists来检查它是否存在,但我不确定如何确保该文件位于某个子目录中...

1 个答案:

答案 0 :(得分:1)

您应该了解硬链接和符号链接。如果您要更改文件,请执行stat以检查它是否为常规文件且其节点数为1。

$subdirToCheck = "/home/mysubdir/";
$file = "relativepath/userfile";
$absfile = realpath($file);
if ($absfile !== FALSE && file_exists($absfile) &&
        substr($absfile, 0, strlen($subdirToCheck)) == $subdirToCheck) {
    $ls = lstat($absfile);
    if (is_link($ls) || $ls["nlink"] > 1) {
        //abort
    }
    else {
        //do stuff
    }
}