2011-02-28 159 views
1

这是我目前有:PHP上传 - 只允许JPG文件

$file_name = $HTTP_POST_FILES['uid']['name']; 
$user= 'FILENAME'; 
$ext = pathinfo($file_name, PATHINFO_EXTENSION); 
$new_file_name=$user . '.' . $ext; 
$path= "uploads/images/users/".$new_file_name; 
if($ufile !=none) 
{ 
    if(copy($HTTP_POST_FILES['uid']['tmp_name'], $path)) 
    { 
    echo "Successful<BR/>"; 
    echo "File Name :".$new_file_name."<BR/>"; 
    echo "File Size :".$HTTP_POST_FILES['uid']['size']."<BR/>"; 
    echo "File Type :".$HTTP_POST_FILES['uid']['type']."<BR/>"; 
    } 
    else 
    { 
    echo "Error"; 
    } 
} 
+0

可以使用和getimagesize()方法在你的[其它问题]表明(http://stackoverflow.com/questions/5141032/ php-image-upload-rename-without-losing-extension) – 2011-02-28 15:03:14

+0

这不是提问的最佳方式。你有什么问题?你需要什么帮助,上面的代码是否符合你的期望? – diagonalbatman 2011-02-28 15:07:04

+1

仅供参考,'HTTP_POST_FILES'已被弃用*年*;除非你被迫为PHP4开发,否则使用'$ _FILES'(还有人仍然这样做?) – Piskvor 2011-02-28 15:09:57

回答

1
<?php 

$allowedTypes = array('image/jpeg'); 

$fileType = $HTTP_POST_FILES['uid']['type']; 

if(!in_array($fileType, $allowedTypes)) { 
    // do whatever you need to say that 
    // it is an invalid type eg: 
    die('You may only upload jpeg images'); 
} 

?> 

希望这会有所帮助。另外你为什么使用HTTP_POST_FILES而不是$ _FILES?你在使用旧版本的PHP吗?

+2

值得指出的是,这种方法依赖于浏览器发送的内容类型数据,并且可以被操纵。使用'getimagesize()'会更好 – 2011-02-28 15:09:45

+0

是的,真的感谢您的高举 – 2011-02-28 15:10:56

+0

我现在已经从使用复制和HTTP_POST_FILES改变,但仍然不确定如何只允许jpg的 - 一切iv尝试给出的错误,但仍然上传或上传没有包括jpg文件 – Sean 2011-02-28 16:46:06

0

永远不要相信这种情况。这是不安全的,可能会导致人们搞砸你的服务器。试试这个http://ar.php.net/imagecreatefromjpeg

<?php 
function LoadJpeg($imgname){ 
    /* Attempt to open */ 
    $im = @imagecreatefromjpeg($imgname); 

    if(!$im){ 
     throw new InvalidArgumentException("$imgname is not a JPEG image"); 
    } 

    return $im; 
} 
?> 

使用它像这样:

$uploadDir = "/path/to/uploads/directory"; 
$handle = LoadJpeg($_FILES['uid']['tmp_name']); 
imagejpeg($handle, $uploadDir.DIRECTORY_SEPARATOR.$_FILES['uid']['name']); 
+0

我现在已经改变了使用复制和HTTP_POST_FILES,但仍然不确定如何只允许jpg的 - 一切iv尝试给出的错误,但仍然上传或上传没有包括jpg文件.. – Sean 2011-02-28 16:45:27

+0

这样做将有效地避免使用任何文件不是JPEG,但如果你想要的是实际的上传到中途结束,那么可能需要使用flash进行上传 – 2011-02-28 20:40:45