如何检查路径集中是否存在文件?

时间:2018-10-18 18:58:13

标签: php

如何检查文件是否在所选路径中?

$_SERVER['DOCUMENT_ROOT'] === '/home/user/soloj';

几个路径:

/home/user/soloj/admin/user/file.php // false
/home/user/soloj/client/file.php // false
/home/user/soloj/public/file.php // true
/home/user/soloj/temp/file.php // true
/home/user/soloj/temp/folder/folder/file.php // true - all after temp is true
/home/user/soloj/zero/file.php // false

因此,如果文件位于/home/user/soloj/public//home/user/soloj/temp/*中,则我的函数应返回true;

$paths = array(
    '/home/user/soloj/public/',
    '/home/user/soloj/temp'
);

function check($paths, $path)
{
   if ($path IN $paths) {
       return true;
   } else {
       return false;
   }
}

check($paths, 'public/file.php'); // true
check($paths, 'zero/file.php'); // false
check($paths, 'temp/aaa/file.php'); // true
check($paths, 'public/../zero/file.php'); // false

1 个答案:

答案 0 :(得分:0)

类似这样的东西

function check($paths, $filepath)
{
     $filepath = ltrim($filepath, '/'); //remove leading slashes
     foreach($paths as $path){
         $path = rtrim($path, '/').'/';  //insure consistent tailing slashes
         if(file_exists($path.$filepath)) return true;
     }
     return false;
}

因为您不匹配/

$paths = array(
  '/home/user/soloj/public/',
  '/home/user/soloj/temp'
);

我添加了一些东西来清理它。我还清理了一下变量名。

在不进行标准化的情况下,您将得到此信息:

check($paths, 'public/file.php')
//check: /home/user/soloj/public/public/file.php
//check: /home/user/soloj/temppublic/file.php <-- incorrect

代替:

check($paths, 'public/file.php')
//check: /home/user/soloj/public/public/file.php
//check: /home/user/soloj/temp/public/file.php