-3

我正在尝试获取图像文件扩展名并添加一些随机数。比如 348678423.jpeg、343344343.jpg、32434343.gif、3434343.png等。

所以以下是我的php代码:

function getExtension($str)
{
     $i = strrpos($str,".");
 if (!$i) { return ""; }
 $l = strlen($str) - $i;
 $ext = substr($str,$i+1,$l);
 return $ext;
}
  @$extension = getExtension($file);
   $extension = strtolower($extension);
  $image_named_uniq = uniqid().'.'.$extension;  

但是当我回显这个变量$image_named_uniq时,它只是显示随机数,比如:50aa5a2e0f425。应该显示50aa5a2e0f425.jpg等。

我的代码有什么问题?

4

4 回答 4

5

如果您只需要扩展:

echo end(explode('.', $str));
于 2012-11-19T14:16:10.020 回答
2

您可以使用pathinfo()来获取扩展名

$path_parts = pathinfo($filename);
echo $path_parts['extension'];
于 2012-11-19T14:19:31.973 回答
1

@jereon 发布的答案是正确的,也是最简单的方法。

但是,如果您想在不使用 explode 和 end 的情况下提取有关文件的更多信息,您可以简单地使用 PHP 内置pathinfo()函数。

参考:pathinfo()

<?php
    $path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

    echo $path_parts['dirname'], "\n";
    echo $path_parts['basename'], "\n";
    echo $path_parts['extension'], "\n";
    echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>

这将返回

/www/htdocs/inc
lib.inc.php
php
lib.inc

作为$filename一个数组,您需要遍历它才能将其读入pathinfo(). 这可以很容易地使用 foreach 循环来完成,如下所示:

// Loop through the filenames array
foreach($filename as $value){
    // Retrieve the path parts of each individual file
    $path_parts[] = pathinfo($value);
}

// Write out the path parts array
print_r($path_parts);
于 2012-11-19T14:21:52.483 回答
0

最简单的方法是使用pathinfo()。请注意,结果基于文件名,并且不会对文件执行自省(例如,logo.jpg重命名为的图像logo.php将导致.php文件扩展名。如果您想通过文件的内容获取文件类型,请使用fileinfo 扩展名)

于 2012-11-19T14:22:25.700 回答