[英]PHP: Detecting file extension from: filename.jpg
是的,正如標題所述:
如何檢測文件擴展名? $ _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);
}
正確的方法是在文件上使用pathinfo 。 例如...
$parts=pathinfo('somefile.jpg');
echo $parts['extension']; //Returns "jpg"
現在,您只是在查看變量中的字符串,因此處理此問題的方式將類似於以下內容 ...
$parts=explode(".", $_POST['fname']);
echo $parts[count($parts)-1];
最后,您不應按擴展名檢測文件類型。 這不好。 相反,您應該使用內容類型(通常稱為MIME類型)。 您可以在$_FILES['userfile']['type']
找到上傳的文件。 ( 文件 )
輸入類型后,即可執行簡單的switch語句 。
另外,要提防人們上傳的內容不是它說的那樣。 有人可以使用特定的內容類型向您發送文件,但是可能是諸如可執行代碼之類的東西! 確保的唯一方法是在您自己的代碼服務器端檢查文件。 永遠不要相信用戶輸入。
您可以執行以下操作:
$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;
}
該解決方案實際上取決於您要嘗試執行的操作,但是簡單的方法如下所示:
if ( strtolower(substr($_POST['fname'],-3)) == 'jpg' )
您也可以在字符串上切換()而不是使用if / else,這取決於要進行的比較次數。
編輯:如果要專門處理圖像,最好使用getimagesize
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.