2011-12-06 108 views
0

我想实现一个小的更新配置文件图片窗体。上传图片失败的PHP后端

<form method="post" action="<?php echo $filename;?>" name="change_picture_form" id="change_picture_form" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="change_picture" /> 
    <input type="file" name="new_user_picture"> 
    <input type="submit" class="submitButton" value="Save Changes"/> 
</form> 

目标php文件具有下面的代码:

echo $_FILES['new_user_picture']['size']." "; 
echo $_FILES['new_user_picture']['tmp_name']." "; 
echo $_FILES['new_user_picture']['name']." "; 
echo $_FILES['new_user_picture']['error']." "; 
echo $_FILES['new_user_picture']['type']." "; 
$picture_uploaded = $_FILES["new_user_picture"]["tmp_name"]; 
if(is_uploaded_file($picture_uploaded)) { 
    $imagesize = getimagesize($picture_uploaded); 
    switch($imagesize[2]) { 
     case IMAGETYPE_PNG: 
       $extension = '.png'; 
       echo "<script>console.log('Reached here!!')</script>"; 
       try { 
        $image_original = imagecreatefrompng($picture_uploaded); 
        if (!$image_original) 
         echo '<script>console.log("not image original")</script>'; 
       } catch(Exception $e) { 
        echo "<script>console.log('Error!!')</script>"; 
       } 
       break; 
     case IMAGETYPE_JPEG: .... 
     ... 
    } 
} 

在这里,我有许多的图像类型相似的代码。我通过尝试上传png图像来测试此代码。前5个回显语句显示预期的结果 - 大小,零的错误值,名称,类型和临时名称。

我得到“到达这里!!”在我的控制台上。然而, imagecreatefrompng似乎无声地崩溃。不知何故Try-catch似乎没有发现错误。

帮助?谢谢!

+0

你是什么意思'默默地崩溃'你在日志或屏幕上出现任何错误? – Jakub

+0

我想你不能直接转换到临时上传的文件,你怎么做move_uploaded_file()然后执行imagecreatefrom png? – ajreal

+0

@Navneet代码的工作原理如下。我没有看到任何错误。你将获得'imagecreatefrompng()'函数的资源ID,请参阅http://php.net/manual/en/function.imagecreatefrompng.php,即为什么你没有得到不是原始图像。 –

回答

0

我还没有处理的文件上传PHP永远的,但有可能这行:

$picture_uploaded = $_FILES["new_user_picture"]["tmp_name"] 

应该

$picture_uploaded = $_FILES["new_user_picture"]

第一行应该是让你获得上传文件的文件名,而第二行(上面编辑过的行)应该是对文件本身的引用。

HTH。

编辑:那么,看到我的答案是不正确的......这有帮助吗? http://www.php.net/manual/en/function.imagecreatefromstring.php 。在用户注释/评论中有一个帮助函数可能会简化你在做什么

+0

这些函数实际上需要文件名和路径。这是行不通的。 – Navneet

+0

果然。刚刚完成阅读手册,并即将编辑我的答案相应...对不起。 :p –