【问题标题】:PHP - Get file extension (image) without knowing itPHP - 在不知情的情况下获取文件扩展名(图像)
【发布时间】:2013-08-12 22:30:35
【问题描述】:

如何在不知道它是什么的情况下获得图像文件的扩展名?我曾尝试使用 glob,如下所示,但它返回错误:"Array Notice: Undefined offset: 0"

$path=BASEURL."content/images/profile_images/".$imageName;
$results= glob($path.'.*');

$filename = $results[0];
echo $filename;

【问题讨论】:

  • 有一个内置函数pathinfo检查答案也会更容易维护。
  • 你能举个例子说明$imageName可以是什么吗?
  • 仅供参考,“数组注意:未定义的偏移量:0”表示索引 0 超出了数组的边界。由于 0 是数组的第一个索引,因此数组的长度为 0。
  • 这正是我所说的......如果您使用该函数,那么如果您的文件没有扩展名,您将获得扩展名或空字符串。我说得有道理吗?
  • @woofmeow 您的回答只会返回一个空字符串,因为灰色表示扩展名不在 $imageName 变量中。如果他有完整的文件名,那么他可以使用 pathinfo() 来检索扩展名,但是他没有完整的文件名。他只有基本名称减去扩展名。他的路径本质上是“content/images/profile_image/myimg”而不是“content/images/profile_image/myimg.ext”,因此如果你将前一个字符串传递给 pathinfo 函数,你只会得到一个空字符串。跨度>

标签: php filenames glob


【解决方案1】:

您的 glob 不好,它返回一个空数组,因此出现错误。它不是正则表达式,而是 shell 扩展,* 是通配符。目前它将尝试匹配以. 开头的任何文件名。 IE。 .htaccess.

如果您希望它匹配任何文件,请使用:glob($path.'*')

如果您希望它匹配任何带有句点的文件:glob($path.'*.*')

【讨论】:

    【解决方案2】:

    像这样使用内置函数pathinfo的PHP

    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    例如

    echo pathinfo("http://www.google.com//swf/fvere.ext",PATHINFO_EXTENSION); //输出:分机

    阅读manual here

    希望有帮助:)

    【讨论】:

    • 从他已经提供的代码来看,OP 没有完整的文件路径。
    • 他有,不是在这里吗$path=BASEURL."content/images/profile_images/".$imageName;
    • 谢谢我有完整的路径和图像名称...但我无法获得我没有的文件扩展名
    • 我建议使用内置函数@gray,而不是其他方法。将来检查会更容易。如果它有帮助,请随时接受和支持;-)。干杯。
    • 由于 OP 将通配符附加到 $imageName,我假设 $imageName 是文件的实际名称减去扩展名,例如myimg 而不是 myimg.ext。否则 OP 会误解 glob 函数的用途。
    【解决方案3】:

    这对我有用,但不是最好的方法:

    $path="content/images/profile_images/".$image; 
    
    $file = $path.".";
    
    $ext = array("jpg", "jpeg", "JPEG", "gif", "png", "bmp");
    for($x = 0; $x < 6; $x++)
    {
        $image = $file.$ext[$x];
        if(file_exists($image))
        {
            $pic=$image;
            echo $pic;
        }
    }
    

    【讨论】:

      【解决方案4】:

      根据您作为答案发布的代码,这将起作用:

      $dir = "content/images/profile_images/";
      $results = glob("{$dir}{$imageName}.*");
      
      if(count($results)>0){
         echo pathinfo($results[0], PATHINFO_EXTENSION);
      }
      

      您的错误似乎是无效的文件路径。图片不在包含BASEURL 的路径中。

      【讨论】:

        【解决方案5】:

        您可以“分解”文件名的末尾以获得扩展名。

        $file = 'image.jpg';
        $temp = explode(".", $file);
        $extension = end($temp);
        echo $extension;
        

        会输出“jpg”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 1970-01-01
          • 2022-11-11
          • 1970-01-01
          • 1970-01-01
          • 2013-08-31
          • 1970-01-01
          相关资源
          最近更新 更多