2012-11-19 263 views
-3

我试图获取图像文件扩展名并添加一些随机数。 348678423.jpeg,343344343.jpg,32434343.gif,3434343.png等。获取Php文件/图像扩展名

所以,以下是我的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 etc ..

我的代码有什么问题?

+1

可能的[如何在PHP中获取文件类型]的副本(http://stackoverflow.com/questions/1740406/how-to-get-the-file-type-in​​-php)。什么是文件扩展名问题的可能性从来没有被问过在stackoverflow之前?看看相关部分。 –

+0

使用'pathinfo()'** pathinfo()返回关于路径的信息:或者是一个关联数组或者一个字符串,这取决于选项。**比写你自己的实现要好。 [pathinfo.link](http://php.net/manual/en/function.pathinfo.php) – Nikola

回答

1

发表@jereon答案是正确的,而要做到这一点最简单的方法。

但是,如果您想在不使用爆炸和结束的情况下提取更多关于该文件的信息,则可以简单地使用内置于pathinfo()函数中的PHP。

参考: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); 
+0

这是显示错误消息:警告:pathinfo()期望参数1是字符串,在D:\ Software \ Installed \ xampp中给出的数组\ htdocs \ Classified-website \ user \ content \ uploader.php 47行 – Shibbir

+0

@Shibbir你传递给'pathinfo()'函数的是什么?这显然是一个数组 –

+0

我传递我的变量名为$文件名$ filename = $ _FILES ['images'] ['name']; – Shibbir

5

如果你只需要扩展:

echo end(explode('.', $str)); 
+1

我也推荐在'$ str'上使用'strtolower' –

+0

+1最简单的方法 –

+0

为了更好性能使用'$ ext = substr($ file,strrpos($ file,'。')+ 1);' –

2

您可以使用pathinfo()得到扩展

$path_parts = pathinfo($filename); 
echo $path_parts['extension']; 
0

最简单的方法是使用pathinfo()。需要注意的是,结果是基于文件名和执行文件中没有内省(如重命名为logo.php将导致.php文件扩展名的图像logo.jpg。如果你想获得的文件类型由它的内容使用the fileinfo extension