2009-12-16 23 views
0

我有一个PHP脚本来处理上传的图像。PHP图像文件上传uppecase扩展问题

它工作正常,如果我上传file.jpg文件。

但是,如果我尝试上传file.JPG,我遇到了麻烦。即使它重命名相同的文件。

代码:

if(isset($_FILES["arq"])){ 
    @getimagesize($_FILES['arq']['tmp_name']) or $err=5; 
    ($_FILES['arq']['error']==0) or $err=$_FILES['arq']['error']; 


    if ($err==0){ 
     $dir = "./img/".$_SESSION['estudante']."/"; 
     if (!is_dir($dir)){mkdir($dir);} 
     $filename = substr(md5(uniqid(rand(), true)),0,20) . "."; 
     $filename .= pathinfo($_FILES["arq"]["name"], PATHINFO_EXTENSION); 
     $fotourl = $dir . basename($filename);//$_FILES["arq"]["name"]); 
     move_uploaded_file($_FILES["arq"]["tmp_name"], $fotourl); 
     //resize e cira thumbnails 
     resizeimg($fotourl, 320,204); //editfoto 
     resizeimg($fotourl, 137,87); //album 
     resizeimg($fotourl, 200,0);  //home 
     resizeimg($fotourl, 148,0);  //perfil 
     resizeimg($fotourl, 60,60);  //thumbnail 
     resizeimg($fotourl, 100,0);  //iframe perfil 
     resizeimg($fotourl, 530, 530); //slide 
     resizeimg($fotourl, 330, 0); //i slide 
     //registra no BD 
     $sql="INSERT INTO fotos (estudante, url) VALUES ('".$_SESSION['estudante']."', '$fotourl')"; 
     mysql_query($sql); 
     //retorna o id da foto 
     $fotoid=mysql_insert_id(); 
     //notifica adms somente 
     $sql="select estudante from administradores"; 
     $adms=mysql_query($sql); 
     while ($ar=mysql_fetch_assoc($adms)){ 
      $msg="O usuário <a href=\"perfil.php?id=$_SESSION[estudante]\">".nomeapelido($_SESSION['estudante'])."</a> inseriu uma nova <a href='fotoslide.php?fotoid=$fotoid'>imagem</a>."; 
      $sql="insert into mensagens (msgde, msgpara, msgmsg) values (5, $ar[estudante], '$msg')"; // 5=cadastro do 'user' sistema 
      mysql_query($sql); 
      //echo "$sql\n"; 
     } 
     mysql_free_result($adms); 
    } 
} 
+2

你能解释一下'你有麻烦'吗?什么样的麻烦?错误讯息? – 2009-12-16 21:43:40

+0

'$ _FILES ['arq'] ['error'] == 0'?真的吗?我没有小便并呻吟着让PHP上传错误变成常量,只是让人们对它们进行硬编码。 >:/ – Powerlord 2009-12-16 21:45:37

+0

'麻烦'是它只创建一个60x60像素的小图片。所有其他尺寸不会被创建。 – 2009-12-16 22:25:56

回答

1

你应该能够只重命名扩展名,当您将文件移动到小写。如果保留扩展初始文件的实际情况非常重要,那么在应用strtolower之前将它存储在一个变量中,将它传递到imgresize函数并将其用于扩展img时保存。

$filename .= strtolower(pathinfo($_FILES["arq"]["name"], PATHINFO_EXTENSION)); 
$fotourl = $dir . basename($filename);//$_FILES["arq"]["name"]); 
move_uploaded_file($_FILES["arq"]["tmp_name"], $fotourl); 
+0

谢谢eCaroth,这个把戏固定下来。 – 2009-12-18 15:29:17