【问题标题】:How to find the file name or extension from base name如何从基本名称中找到文件名或扩展名
【发布时间】:2013-07-05 02:12:22
【问题描述】:

我想从 PHP 中已知的基本名称中获取文件名。

我已经搜索并找到了pathinfo(),但是您已经在参数中给出了带有基本名称和扩展名的文件名。

也在pathinfo() 文档中:

$path_parts = pathinfo('/path/basename');
var_dump($path_parts['extension']);

这或多或少是我需要的,但结果是:

string '' (length=0)

我想要扩展名,而不是空字符串。我知道基本名称,但我不知道扩展名,我该如何获取?

【问题讨论】:

  • 所以你想要一个无扩展名的文件的扩展名? (捂脸,打脸)
  • pathinfo 只是一个内部解析器,如果文件名没有扩展名,则没有扩展名。如果您希望从远程文件中获取文件类型,那么您应该查找 Content-Type: 标头并使用它来定义您的扩展。
  • 如果文件名有扩展名,那么你就知道了。你只需要grab ;)
  • 啊我想你的意思是你需要文件类型
  • 那个文件只是没有扩展名lol,不可能得到它。

标签: php pathinfo


【解决方案1】:

要列出文件名,只知道基数,您可以使用glob。它返回一个数组,因为可能有多个文件具有相同的基本但不同的扩展名,或者根本没有:

$files = glob($base.'.*');
if (!empty($files))
    echo $files[0];

【讨论】:

  • 谢谢!这就是我一直在寻找的。它会给我图像的完整路径,但不知道它的扩展名 (.*)
【解决方案2】:

如果文件有扩展名,你可以这样得到它

$file_name = 'test.jpg';
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
echo $ext;  // output:jpg

示例:扫描 images 目录中的所有文件并显示是否允许使用 ext

$image_path = __DIR__ . '/images/';
$files = scandir($image_path);
$allowed_images = array('jpg', 'jpeg', 'gif', 'png');
foreach ($files as $file_name) {
    $ext = pathinfo($file_name, PATHINFO_EXTENSION);
    if (in_array($ext, $allowed_images)) {
        echo $ext . ' allowed<br>';
    } else {
        echo $ext . ' not allowed<br>';
    }
}

【讨论】:

  • 这仅适用于您在脚本中硬编码扩展名(类型)(本例中为 .jpg)
  • 我已经硬编码了演示的扩展。它也适用于动态扩展,唯一的要求是文件应该有扩展名。它是硬编码还是动态生成都没有关系。我已经更新了扫描图像目录并显示结果的答案。
【解决方案3】:

你可以使用:

$ext = end(explode('.',$filename));

注意:依靠这个扩展来确定文件类型是不安全的。

【讨论】:

  • 如果 pathinfo() 没有给出扩展名,那么这个方法也不会
猜你喜欢
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2019-03-22
相关资源
最近更新 更多