2013-04-25 56 views
1

我有以下脚本,我用来上传图片;除了PNG文件,该文件可以与其他文件扩展名一起使用。有什么理由吗?PNG文件将不会上传

这是我的脚本;

// initialization 
$result_final = ""; 
$counter = 0; 

// List of our known photo types 
$known_photo_types = array(
'image/pjpeg' => 'jpg', 
'image/jpeg' => 'jpg', 
'image/gif' => 'gif', 
'image/bmp' => 'bmp', 
'image/x-png' => 'png'); 

// GD Function Suffix List 
$gd_function_suffix = array(
'image/pjpeg' => 'JPEG', 
'image/jpeg' => 'JPEG', 
'image/gif' => 'GIF', 
'image/bmp' => 'WBMP', 
'image/x-png' => 'PNG'); 

// Fetch the photo array sent by preupload.php 
$photos_uploaded = $_FILES['photo_filename']; 
// Fetch the photo caption array 
$photo_caption = $_POST['photo_caption']; 
while($counter <= count($_FILES['photo_filename']['tmp_name'])) 

    { 
      if($photos_uploaded['size'][$counter] > 0) 
      { 
        if(!array_key_exists($photos_uploaded['type'][$counter], $known_photo_types)) 
        { 
          $result_final .= "File ".($counter+1)." is not a photo!<br />"; 
        }else{ 

         mysql_query("INSERT INTO database(`filename`, `caption`, `category`, `id`) VALUES('0', '".addslashes($caption[$counter])."', '".addslashes($_POST['category'])."', '".addslashes($_POST['id'])."')"); 
          $new_id = mysql_insert_id(); 
          $filetype = $photos_uploaded['type'][$counter]; 
          $extention = $known_photo_types[$filetype]; 
          $filename = $new_id.".".$extention; 

          @mysql_query("UPDATE database SET photo_filename='".addslashes($filename)."' WHERE photo_id='".addslashes($new_id)."'"); 

          // Store the orignal file 
          copy($photos_uploaded['tmp_name'][$counter], $images_dir2."/".$filename); 
      } 
     } 
    $counter++; 
} 

那是我的代码,当我上传JPEG或GIF文件,但是当我上传PNG文件,这是行不通的一切工作正常。我也没有得到任何的错误。请问,有什么可能是错误?

+0

愚蠢的问题,但是PNG的正确的MIME类型? – andrewsi 2013-04-25 14:32:32

+0

猜测它不是。刚刚得到纠正。正确的是image/png thanxx @andrewsi – 2013-04-25 14:43:23

回答

2

仅仅将其更改为:

image/png 
+0

或者可能添加新的? http://stackoverflow.com/questions/2086374/what-is-the-difference-between-image-png-and-image-x-png – 2013-04-25 14:35:23

1

PNG是官方认可的MIME类型,它应该只是image/png。前缀x-适用于实验/非官方类型。你可以简单地验证你用var_dump($_FILES)得到了什么。

您的上传处理代码也需要更新。你不检查成功的上传,并简单地假设他们成功。永远不要成功。

if($_FILES['photo_filename']['error'] !== UPLOAD_ERR_OK) { 
    die("Upload failed with error code " . $_FILES['photo_filename']['error']); 
} 

addslashes()是完全没用的毫无意义的垃圾。它确实没有保护你免受SQL注入攻击。如果你坚持继续使用不推荐使用的mysql _ *()函数,那么至少应该使用正确的mysql_real_escape_string()

+0

哇@马克B,preciate您的意见。对于这种编码事物来说,这是一个相对较新的东西,所以真的很感谢所有的建议,并会立即将它们应用于我的编码。我认为更新应该在$ counter ++之后 – 2013-04-25 14:42:36