为什么我的表单只接受.jpeg文件

时间:2011-03-27 01:06:06

标签: php forms upload

我做了这个表格:

   <form enctype="multipart/form-data" action="php/handler.php" method="post" name="uploaderform">
    <table>
    <tr><td align="right">File:</td><td><input type="hidden" name="MAX_FILE_SIZE" value="30000"/><input type="file" name="filetoup" id="zzz"/></td></tr>
    <tr><td align="right">Folder:</td><td><select id="category" name="category"><option value="foo/">some</option><option value="poo/">some2</option></select></td></tr>
    <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
    </table>
  </form>

和这个PHP脚本:

if((exif_imagetype($_FILES["filetoup"]["tmp_name"])==IMAGETYPE_GIF)
||(exif_imagetype($_FILES["filetoup"]["tmp_name"])==IMAGETYPE_JPEG)
||(exif_imagetype($_FILES["filetoup"]["tmp_name"])==IMAGETYPE_PNG)
&&($_FILES["filetoup"]["size"]<2000000)){
if($_FILES["filetoup"]["error"]>0)
    echo $_FILES["filetoup"]["error"];
else {

    if(isset($_FILES["filetoup"]["name"]))
        $target_path=$folder . basename($_FILES["filetoup"]["name"]);
    else
        echo "Choose a file";

    if(move_uploaded_file($_FILES["filetoup"]["tmp_name"],$target_path))
        echo $_FILES["filetoup"]["name"] . "uploaded";
    else
        echo "Either you fucked up or I did";
    }
 }else{
echo "read whats under the form";
 }

我只能上传.jpeg文件,.gif和.png不被接受,我收到此错误:

Warning: exif_imagetype() [function.exif-imagetype]: Filename cannot be empty in      C:\xampp\htdocs\atthepc\php\handler.php on line 7

我认为这是我的形式,因为我可以上传.jpeg没有任何错误,但.gif和.png没有。如果我不对,那导致了什么呢?是否有解决方案或我做错了什么?

最后,.jpg被识别为.jpeg's?

/编辑

我不认为我正确地解释了自己,如果我尝试上传一个jpeg文件,它工作正常但是如果我尝试任何其他文件类型它给我Filename不能为空,所以我的表单不想接受gif和通过邮件发送,它就像帖子是空的。为什么会发生这种情况?

//编辑 是的,就是这样,我试过这个

$something=$_FILES["filetoup"]["tmp_name"];
var_dump($something);

它给了我字符串(0)“”。形式不想接受它但为什么?我没有对表格施加任何限制。

///修改

我发现了我的问题,它不接受任何其他文件类型,因为我试图上传的内容太大(动画gif)而且max_file_size太少了。

2 个答案:

答案 0 :(得分:0)

也许尝试将类型与IF语句进行比较,而不是使用exif_imagetype来比较tmp_name? $ _FILES [ “filetoup”] [ “型”])== IMAGETYPE_GIF

另外,重新JPEG,w3schools.com mentions表示:“注意:对于IE来识别jpg文件,类型必须是pjpeg,对于FireFox,它必须是jpeg。”所以也许这是值得研究的东西

答案 1 :(得分:0)

使用所有if的insted的开关盒,并为每个jpeg,png和gif设置$ target_path,如果它们需要在不同的文件夹中..并且如果tmp image file aint则默认为错误允许..

只是一种方法,希望它有所帮助