PHP:从以下位置检测文件扩展名:filename.jpg

时间:2010-10-31 23:58:57

标签: php

是的,标题是:

如何检测文件扩展名? $ _POST [ 'FNAME'];是我存储文件名的地方,例如asddsa.jpg

那我怎么能检查.jpg然后......如果.png那么......?

    $src = "images/status/photo/".$_POST['fname'];
    $parts=pathinfo($src);
if($parts['extension'] == "jpg"){
    $img_r = imagecreatefromjpeg($src);
}elseif($parts['extension'] == "png"){
    $img_r = imagecreatefrompng($src);
}elseif($parts['extension'] == "gif"){
    $img_r = imagecreatefromgif($src);
}

尝试了这一点也没有取得任何成功:

    $ext= pathinfo($src, PATHINFO_EXTENSION);
if($ext == "jpg"){
    $img_r = imagecreatefromjpeg($src);
}elseif($ext == "png"){
    $img_r = imagecreatefrompng($src);
}elseif($ext == "gif"){
    $img_r = imagecreatefromgif($src);
}

3 个答案:

答案 0 :(得分:14)

执行此操作的正确方法是在文件上使用pathinfo。例如......

$parts=pathinfo('somefile.jpg');
echo $parts['extension']; //Returns "jpg"

现在,您只是查看变量中的字符串,因此处理此问题的方法是something like this ...

$parts=explode(".", $_POST['fname']);
echo $parts[count($parts)-1];

最后,您不应该通过扩展来检测文件类型。这是不好的。相反,您应该使用内容类型(通常称为MIME类型)。您可以在$_FILES['userfile']['type']中找到上传文件。 (documentation

获得类型后,您可以执行简单的switch statement

另外,请注意上传内容的人不是它所说的内容。有人可以使用特定的内容类型向您发送文件,但它可能是诸如可执行代码之类的东西!唯一可以确定的方法是使用您自己的代码服务器端检查文件。永远不要相信用户输入。

答案 1 :(得分:0)

您可以这样做:

$aPieces = explode( '.', $_POST[ 'fname' ] ); // A file name can have more than 1 .something

switch( strtolower( $aPieces[ count( $aPieces) - 1 ] ) ) // We take the LAST piece in our array
{
   case 'jpg':

   break;
   case 'png':

   break;
}

答案 2 :(得分:0)

解决方案实际上取决于你要做的事情,但简单的方法就是:

if ( strtolower(substr($_POST['fname'],-3)) == 'jpg' )

您也可以在字符串上切换(),而不是使用if / else,具体取决于您将进行多少次比较。

编辑:如果您要专门处理图片,最好使用getimagesize