在php中查找没有扩展名的文件

时间:2018-01-21 07:49:00

标签: php

我尝试从特定目录中提交特定文件名。

例如: 我的用户上传个人资料图片已经重命名(有用户名)它通过php与相同的扩展名(jpg,png或gif)

现在我想从$ username开始找到该文件并使用它,但我不知道filetype。需要通过PHP。

谁能建议我怎么做? 我尝试使用pathinfo()和.basename但不成功。

3 个答案:

答案 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必须是您的目录的$dirabsolute路径。

答案 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);