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
解决方案
像这样的东西
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
推荐阅读
- python - 在 GCP Compute Engine 中用于抓取的 Python 进程因 Crypto Mining 而被暂停
- python - 中断 tkinter 中另一个脚本中调用的脚本
- python - 如何将 Django 模型表约束为一行
- omnet++ - 在 omnet++ 中使用 Veins 仅模拟一辆车
- javascript - 如何在保留线条的同时删除所有多余的空格
- c++ - 使用 lambda 函数指针初始化一次,自修改 (C++)
- jquery - 如何在动态字段的更改事件中使用?
- json - Python - 如何更新 json 文件中的值?
- java - 从数据库中动态检索 Spring Boot CORS 配置以获取控制器中的特定方法
- nginx - 我们可以使用 HAproxy 负载均衡器和 nginx 作为服务器吗?