我尝试从特定目录中提交特定文件名。
例如: 我的用户上传个人资料图片已经重命名(有用户名)它通过php与相同的扩展名(jpg,png或gif)
现在我想从$ username开始找到该文件并使用它,但我不知道filetype。需要通过PHP。
谁能建议我怎么做? 我尝试使用pathinfo()和.basename但不成功。
答案 0 :(得分:0)
您需要使用glob使用某些模式查找特定路径名:
glob - 查找与模式匹配的路径名
返回:
返回一个包含匹配文件/目录的数组,为空 如果没有文件匹配则为数组,如果错误则为FALSE。
一个简单的例子:
const express = require('express'),
app = express(),
bodyParser = require('body-parser');
// support parsing of application/json type post data
app.use(bodyParser.json());
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));
答案 1 :(得分:0)
您可以使用$path = "/path/to/your/files/";
$files = glob($path . $username . ".*", GLOB_ERR);
// do thing with your $files array
。
scandir()
末尾的{p> $dir = "/path/to/directory";
$scans = scandir($dir);
$files = array();
$username = "username";
foreach($scans as $k=>$v){
if (preg_match('/'.$username.'.$/', $v))
array_push($files ,['id'=>$k,'filename'=>$v]);
}
将包含数组。 $files
必须是您的目录的$dir
或absolute
路径。
答案 2 :(得分:0)
提供的答案是您问题的潜在解决方案。
但是,了解所提供用户名的来源非常重要。
它来自数据库还是客户端?
用户名可以包含特殊字符吗?
为了告诉你我的意思,让我们看看提供的答案:
$files = glob($path . $username . ".*", GLOB_ERR);
如果$username
可以包含/
或.
等特殊字符,则会遇到令人讨厌的安全问题。
重要的是知道来源和哪些用户名有效。
关于正则表达式解决方案也是如此:
preg_match('/'.$username.'.$/', $v)
您只需在用户名中使用特殊字符(例如$
)即可打破正则表达式。
我并不是说这些解决方案是错误或错误的,只是你需要非常小心。
由于你没有指定$ username可以是什么,这里有一个非常通用的解决方案(以及我个人会如何做),在大多数情况下应该可以使用:
<?php
$username = '..';
$dir = opendir('/path/');
$ret = [];
while (($entry = readdir($dir)) !== false) {
$tmp = substr($entry, 0, strlen($username));
# Does $entry start with $username?
if ($tmp !== $username) continue;
$ret[] = $entry;
}
print_r($ret);