php $_files 不断上传

发布于 2024-10-17 15:04:57 字数 3072 浏览 2 评论 0原文

我有一个脚本执行一些简单的编辑,效果很好,问题是即使图像上传成功并且我刷新页面,即使没有从表单提交时的文件输入中选择它,也会创建相同的图像:

<form  method="post"  enctype="multipart/form-data" id="<?php echo $_SERVER['PHP_SELF']; ?>">
                     <fieldset id="product-images">
                    <input type="file" id="image" name="image" />
                    <input type="submit" name="picture" value="upload Picture"/>
</form>

这是 php

 <?php if(isset($_POST['picture']) && !empty($_FILES)){(uploadImage($_FILES['image'])} ;?>   

function uploadImage($image)
{
    $id = intval($_GET['id']);
    $size = 75; // the thumbnail height

    $filedir = '../img/products/'; // the directory for the original image
    $thumbdir = '../img/products/thumbs/'; // the directory for the thumbnail image
    $prefix = 'small_'; // the prefix to be added to the original name

    $maxfile = '2000000';
    $mode = '0666';

    $userfile_name = $image['name'];
    $userfile_tmp = $image['tmp_name'];
    $userfile_size = $image['size'];
    $userfile_type = $image['type'];

    if (isset($image['name'])) 
    {
        $prod_img = $filedir.$userfile_name;
        $url = strstr($userfile_name, '.', true);
        $type = strstr($userfile_name, '.');


        $prod_img_thumb = $thumbdir.$prefix.$userfile_name;
        move_uploaded_file($userfile_tmp, $prod_img);
        chmod ($prod_img, octdec($mode));

        $sizes = getimagesize($prod_img);
        $width = $size[0];
        $height = $size[1];
        if($width > $height) $biggestSide = $width;
        else $biggestSide = $height;

        //The crop size will be half that of the largest side
        $cropPercent = 1;
        $cropWidth   = $biggestSide*$cropPercent;
        $cropHeight  = $biggestSide*$cropPercent;

        //getting the top left coordinate
        $c1 = array("x"=>($width-$cropWidth)/2, "y"=>($height-$cropHeight)/2);

        $aspect_ratio = $sizes[1]/$sizes[0]; 

        if ($sizes[1] <= $size)
        {
            $new_width = $sizes[0];
            $new_height = $sizes[1];
        }else{
            $new_height = $size;
            $new_width = abs($new_height/$aspect_ratio);
        }

        $destimg=ImageCreateTrueColor($new_width,$new_height)
            or die('Problem In Creating image');
        $srcimg=ImageCreateFromJPEG($prod_img)
            or die('Problem In opening Source Image');
        if(function_exists('imagecopyresampled'))
        {
            imagecopyresampled($destimg,$srcimg,0,0,$c1['x'],$c1['y'],$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg))
            or die('Problem In resizing');
        }else{
            Imagecopyresized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg))
            or die('Problem In resizing');
        }
        ImageJPEG($destimg,$prod_img_thumb,90)
            or die('Problem In saving');
        imagedestroy($destimg);
        imagedestroy($srcimg);

        insertURL($id, $url, $type);

    }


}

I have a script that performs some simple editing which works fine, the problem is even once the image is uploaded successfully and I refresh the page the same image is being created even though it's not selected from the file input on form submission:

<form  method="post"  enctype="multipart/form-data" id="<?php echo $_SERVER['PHP_SELF']; ?>">
                     <fieldset id="product-images">
                    <input type="file" id="image" name="image" />
                    <input type="submit" name="picture" value="upload Picture"/>
</form>

Here's the php

 <?php if(isset($_POST['picture']) && !empty($_FILES)){(uploadImage($_FILES['image'])} ;?>   

function uploadImage($image)
{
    $id = intval($_GET['id']);
    $size = 75; // the thumbnail height

    $filedir = '../img/products/'; // the directory for the original image
    $thumbdir = '../img/products/thumbs/'; // the directory for the thumbnail image
    $prefix = 'small_'; // the prefix to be added to the original name

    $maxfile = '2000000';
    $mode = '0666';

    $userfile_name = $image['name'];
    $userfile_tmp = $image['tmp_name'];
    $userfile_size = $image['size'];
    $userfile_type = $image['type'];

    if (isset($image['name'])) 
    {
        $prod_img = $filedir.$userfile_name;
        $url = strstr($userfile_name, '.', true);
        $type = strstr($userfile_name, '.');


        $prod_img_thumb = $thumbdir.$prefix.$userfile_name;
        move_uploaded_file($userfile_tmp, $prod_img);
        chmod ($prod_img, octdec($mode));

        $sizes = getimagesize($prod_img);
        $width = $size[0];
        $height = $size[1];
        if($width > $height) $biggestSide = $width;
        else $biggestSide = $height;

        //The crop size will be half that of the largest side
        $cropPercent = 1;
        $cropWidth   = $biggestSide*$cropPercent;
        $cropHeight  = $biggestSide*$cropPercent;

        //getting the top left coordinate
        $c1 = array("x"=>($width-$cropWidth)/2, "y"=>($height-$cropHeight)/2);

        $aspect_ratio = $sizes[1]/$sizes[0]; 

        if ($sizes[1] <= $size)
        {
            $new_width = $sizes[0];
            $new_height = $sizes[1];
        }else{
            $new_height = $size;
            $new_width = abs($new_height/$aspect_ratio);
        }

        $destimg=ImageCreateTrueColor($new_width,$new_height)
            or die('Problem In Creating image');
        $srcimg=ImageCreateFromJPEG($prod_img)
            or die('Problem In opening Source Image');
        if(function_exists('imagecopyresampled'))
        {
            imagecopyresampled($destimg,$srcimg,0,0,$c1['x'],$c1['y'],$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg))
            or die('Problem In resizing');
        }else{
            Imagecopyresized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg))
            or die('Problem In resizing');
        }
        ImageJPEG($destimg,$prod_img_thumb,90)
            or die('Problem In saving');
        imagedestroy($destimg);
        imagedestroy($srcimg);

        insertURL($id, $url, $type);

    }


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月寒剑心 2024-10-24 15:04:57

您正在刷新哪个页面? “您上传完成”的那个?按理说——这是上传的结果页面。刷新该页面后,您会看到常见的“此页面是 POST 的结果?重做 POST 吗?”键入警告,这将重新提交整个表单,包括文件。

为了防止刷新重新上传,您必须在表单处理代码完成后将用户重定向到其他地方。

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    // handle the upload

    if (/*form processed OK*/) {
       header("Location: successpage.php");
       exit();
    } else {
       // report any error conditions
    }
}

// show the form

?>

Which page are you refreshing? the "your uploaded completed" one? That stands to reason - it's the result page of the upload. Refreshing that one would give you the usual "this page is the result of a POST? redo the POST?" type warning, which would re-submit the entire form, including the file.

To prevent a refresh from re-doing the upload, you have to redirect the user elsewhere after the form handling code's finished.

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    // handle the upload

    if (/*form processed OK*/) {
       header("Location: successpage.php");
       exit();
    } else {
       // report any error conditions
    }
}

// show the form

?>
念﹏祤嫣 2024-10-24 15:04:57

在此处阅读有关 POST-REDIRECT-GET 的信息:

http://en.wikipedia.org/wiki/发布/重定向/获取

Read about POST-REDIRECT-GET here:

http://en.wikipedia.org/wiki/Post/Redirect/Get

憧憬巴黎街头的黎明 2024-10-24 15:04:57

当您刷新页面时,表单将重新发送,一切都会再次发生。使用表单时的一般规则是在脚本处理完提交的表单后将用户重定向到另一个页面。然后,即使他们重新加载页面,也不会重新提交任何内容,这样的问题就可以避免

When you refresh the page the form is resend, and everything happens again. A general rule when working with forms is to redirect the user to another page after your script has processed the submitted form. Then, even if they reload the page, they will not resubmit anything and problems like this will be avoided

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文