首页 > 解决方案 > 如何检查文件是否存在于一组路径中?

问题描述

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

$_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

标签: php

解决方案


像这样的东西

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

推荐阅读