0

我编写了一个程序来通过一个网站使用 php 上传和裁剪图像但是上传新图像后不会显示。缓存没有变得清晰。当我按 Ctrl + F5 时,将显示图像。我想在上传图像时动态清除现金。我添加了一个清除缓存的代码。但似乎它不起作用。

我添加了一个代码来清除缓存页头

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="Expires" content="Tue,01 Dec 1990 06:30:00 GMT">

我还添加了一个代码来使用 php 清除服务器端的缓存

    clearstatcache();
    header("Pragma: no-cache");
    header("Cache: no-cahce");
    header('Location: ../change_profile_image/', true, 302);

这是我的页面上传代码

<?php
include('SimpleImage.php'); 
$path = "../../uploads/ori_image/";
$path_thumbnail = "../../uploads/thumbnail_image/";
require "../../connection/db.ini.php";
if(isset($_SESSION['userid'])){
$user_id=$_SESSION['userid'];
require "../../connection/db.ini.php";

///change image


error_reporting (E_ALL ^ E_NOTICE);
session_start(); //Do not remove this
//only assign a new timestamp if the session variable is empty
if (!isset($_SESSION['random_key']) || strlen($_SESSION['random_key'])==0){
    $_SESSION['random_key'] = strtotime(date('Y-m-d H:i:s')); //assign the timestamp to the session variable
    $_SESSION['user_file_ext']= "";
}
#########################################################################################################
# CONSTANTS                                                                                             #
# You can alter the options below                                                                       #
#########################################################################################################
$upload_dir = "../../uploads/ori_image";                // The directory for the images to be saved in
$upload_path = $upload_dir."/";             // The path to where the image will be saved
$large_image_prefix = "large_";             // The prefix name to large image
$thumb_image_prefix = "thumbnail_"; // The prefix name to the thumb image
$actual_image_name= "image_user_".$user_id; 
$large_image_name = $large_image_prefix."image_user_".$user_id;     // New name of the large image (append the timestamp to the filename)
$thumb_image_name = $thumb_image_prefix."image_user_".$user_id;     // New name of the thumbnail image (append the timestamp to the filename)
$max_file = "2";                            // Maximum file size in MB
$max_width = "300";                         // Max width allowed for the large image
$thumb_width = "56";                        // Width of thumbnail image
$thumb_height = "56";                       // Height of thumbnail image
// Only one of these image types should be allowed for upload
$allowed_image_types = array('image/pjpeg'=>"jpg",'image/jpeg'=>"jpg",'image/jpg'=>"jpg",'image/png'=>"png",'image/x-png'=>"png",'image/gif'=>"gif");
$allowed_image_ext = array_unique($allowed_image_types); // do not change this
$image_ext = "";    // initialise variable, do not change this.
foreach ($allowed_image_ext as $mime_type => $ext) {
    $image_ext.= strtoupper($ext)." ";
}


##########################################################################################################
# IMAGE FUNCTIONS                                                                                        #
# You do not need to alter these functions                                                               #
##########################################################################################################
function resizeImage($image,$width,$height,$scale) {
    list($imagewidth, $imageheight, $imageType) = getimagesize($image);
    $imageType = image_type_to_mime_type($imageType);
    $newImageWidth = ceil($width * $scale);
    $newImageHeight = ceil($height * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
    switch($imageType) {
        case "image/gif":
            $source=imagecreatefromgif($image); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            $source=imagecreatefromjpeg($image); 
            break;
        case "image/png":
        case "image/x-png":
            $source=imagecreatefrompng($image); 
            break;
    }
    imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);

    switch($imageType) {
        case "image/gif":
            imagegif($newImage,$image); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            imagejpeg($newImage,$image,90); 
            break;
        case "image/png":
        case "image/x-png":
            imagepng($newImage,$image);  
            break;
    }

    chmod($image, 0777);
    return $image;
}
//You do not need to alter these functions
function resizeThumbnailImage($thumb_image_name, $image, $width, $height, $start_width, $start_height, $scale){
    list($imagewidth, $imageheight, $imageType) = getimagesize($image);
    $imageType = image_type_to_mime_type($imageType);

    $newImageWidth = ceil($width * $scale);
    $newImageHeight = ceil($height * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
    switch($imageType) {
        case "image/gif":
            $source=imagecreatefromgif($image); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            $source=imagecreatefromjpeg($image); 
            break;
        case "image/png":
        case "image/x-png":
            $source=imagecreatefrompng($image); 
            break;
    }
    imagecopyresampled($newImage,$source,0,0,$start_width,$start_height,$newImageWidth,$newImageHeight,$width,$height);
    switch($imageType) {
        case "image/gif":
            imagegif($newImage,$thumb_image_name); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            imagejpeg($newImage,$thumb_image_name,90); 
            break;
        case "image/png":
        case "image/x-png":
            imagepng($newImage,$thumb_image_name);  
            break;
    }
    chmod($thumb_image_name, 0777);
    return $thumb_image_name;
}
//You do not need to alter these functions
function getHeight($image) {
    $size = getimagesize($image);
    $height = $size[1];
    return $height;
}
//You do not need to alter these functions
function getWidth($image) {
    $size = getimagesize($image);
    $width = $size[0];
    return $width;
}

//Image Locations
$large_image_location = $upload_path.$large_image_name.$_SESSION['user_file_ext'];
$thumb_image_location = $upload_path.$thumb_image_name.$_SESSION['user_file_ext'];

//Create the upload directory with the right permissions if it doesn't exist
if(!is_dir($upload_dir)){
    mkdir($upload_dir, 0777);
    chmod($upload_dir, 0777);
}

//Check to see if any images with the same name already exist
if (file_exists($large_image_location)){
    if(file_exists($thumb_image_location)){
        $thumb_photo_exists = "<img src=\"".$upload_path.$thumb_image_name.$_SESSION['user_file_ext']."\" alt=\"Thumbnail Image\"/>";
    }else{
        $thumb_photo_exists = "";
    }
    $large_photo_exists = "<img src=\"".$upload_path.$large_image_name.$_SESSION['user_file_ext']."\" alt=\"Large Image\"/>";
} else {
    $large_photo_exists = "";
    $thumb_photo_exists = "";
}

if (isset($_POST["upload"])) { 
    //Get the file information
    $userfile_name = $_FILES['image']['name'];
    $userfile_tmp = $_FILES['image']['tmp_name'];
    $userfile_size = $_FILES['image']['size'];
    $userfile_type = $_FILES['image']['type'];
    $filename = basename($_FILES['image']['name']);
    $file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));

    //Only process if the file is a JPG, PNG or GIF and below the allowed limit
    if((!empty($_FILES["image"])) && ($_FILES['image']['error'] == 0)) {

        foreach ($allowed_image_types as $mime_type => $ext) {
            //loop through the specified image types and if they match the extension then break out
            //everything is ok so go and check file size
            if($file_ext==$ext && $userfile_type==$mime_type){
                $error = "";
                break;
            }else{
                $error = "Only <strong>".$image_ext."</strong> images accepted for upload<br />";
            }
        }
        //check if the file size is above the allowed limit
        if ($userfile_size > ($max_file*(2*(1048576)))) {
            $error.= "Images must be under ".$max_file."MB in size";
        }

    }else{
        $error= "Select an image for upload";
    }
    //Everything is ok, so we can upload the image.
    if (strlen($error)==0){

        if (isset($_FILES['image']['name'])){
            //this file could now has an unknown file extension (we hope it's one of the ones set above!)
            $large_image_location = $large_image_location.".".$file_ext;
            $thumb_image_location = $thumb_image_location.".".$file_ext;

            //put the file ext in the session so we know what file to look for once its uploaded
            $_SESSION['user_file_ext']=".".$file_ext;

        $ext=$_SESSION['user_file_ext'];
            mysql_query("UPDATE user SET prof_pic='$actual_image_name$ext' WHERE user_id='$user_id'");  
            move_uploaded_file($userfile_tmp, $large_image_location);
            chmod($large_image_location, 0777);

            $width = getWidth($large_image_location);
            $height = getHeight($large_image_location);

header("Pragma: no-cache");
header("Cache: no-cahce");
header('Location: ../change_profile_image/', true, 302);


            //Scale the image if it is greater than the width set above
            if ($width > $max_width){

                $scale = $max_width/$width;
                $uploaded = resizeImage($large_image_location,$width,$height,$scale);
            }else{

                $scale = 1;
                $uploaded = resizeImage($large_image_location,$width,$height,$scale);
            }
            //Delete the thumbnail file so the user can create a new one
            if (file_exists($thumb_image_location)) {
                unlink($thumb_image_location);
            }
        }
        //Refresh the page to show the new uploaded image

        header("location:".$_SERVER["PHP_SELF"]);
        exit();
    }
}

if (isset($_POST["upload_thumbnail"]) && strlen($large_photo_exists)>0) {
    //Get the new coordinates to crop the image.
    $x1 = $_POST["x1"];
    $y1 = $_POST["y1"];
    $x2 = $_POST["x2"];
    $y2 = $_POST["y2"];
    $w = $_POST["w"];
    $h = $_POST["h"];
    //Scale the image to the thumb_width set above
    $scale = $thumb_width/$w;
    $cropped = resizeThumbnailImage($thumb_image_location, $large_image_location,$w,$h,$x1,$y1,$scale);
    //Reload the page again to view the thumbnail
    header("location:".$_SERVER["PHP_SELF"]);
    exit();
}


if ($_GET['a']=="delete" && strlen($_GET['t'])>0){
//get the file locations 
    $large_image_location = $upload_path.$large_image_prefix.$_GET['t'];
    $thumb_image_location = $upload_path.$thumb_image_prefix.$_GET['t'];
    if (file_exists($large_image_location)) {
        unlink($large_image_location);
    }
    if (file_exists($thumb_image_location)) {
        unlink($thumb_image_location);
    }
    header("location:".$_SERVER["PHP_SELF"]);
    exit(); 
}


///change image





}//end if isset session




?>
<link href="../../CSS/c.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery-pack.js"></script>
<script type="text/javascript" src="js/jquery.imgareaselect.min.js"></script>
<div class="center " style="width:1010px;background-color:#c1e5ff; ">

<div style="height:34px;">
<?php require("../../menubar/menubar.php"); ?>
</div>

<div id="aa" class="center" style="width:1010px; ">
<p>
<div class="font" style="width:1010px; height:30px; background-color:#0094d6; display: table-cell;vertical-align: middle; text-indent:5px;">
<span class="font" style="width:1010px; height:30px; background-color:#0094d6; display: table-cell;vertical-align: middle; text-indent:5px;color:#FFFFFF;">Change Profile Picture</span></div></p>

<div  class="center" style="width:900px; min-height:400px; background-color:#c1e5ff; font-size:12px;font-family:Arial, Helvetica, sans-serif; color:#0094d6; border-radius:7px;margin-top:50px;">

<br />
<br />
<!--prof pic image start-->
<div style="margin-left:10px;margin-right:10px; background-color:#DBF0F7;padding-bottom:30px;padding-left:10px;" onmouseover=" clearBrowserCache()">
<?php
//Only display the javacript if an image has been uploaded
if(strlen($large_photo_exists)>0){
    $current_large_image_width = getWidth($large_image_location);
    $current_large_image_height = getHeight($large_image_location);?>
<script type="text/javascript">
function preview(img, selection) { 
    var scaleX = <?php echo $thumb_width;?> / selection.width; 
    var scaleY = <?php echo $thumb_height;?> / selection.height; 

    $('#thumbnail + div > img').css({ 
        width: Math.round(scaleX * <?php echo $current_large_image_width;?>) + 'px', 
        height: Math.round(scaleY * <?php echo $current_large_image_height;?>) + 'px',
        marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px', 
        marginTop: '-' + Math.round(scaleY * selection.y1) + 'px' 
    });
    $('#x1').val(selection.x1);
    $('#y1').val(selection.y1);
    $('#x2').val(selection.x2);
    $('#y2').val(selection.y2);
    $('#w').val(selection.width);
    $('#h').val(selection.height);
     clearBrowserCache();
} 

$(document).ready(function () { 
    $('#save_thumb').click(function() {
        var x1 = $('#x1').val();
        var y1 = $('#y1').val();
        var x2 = $('#x2').val();
        var y2 = $('#y2').val();
        var w = $('#w').val();
        var h = $('#h').val();
        if(x1=="" || y1=="" || x2=="" || y2=="" || w=="" || h==""){
            alert("Please crop the image for your profile thumbnail !");
            return false;
        }else{
            return true;
        }
    });
}); 

$(window).load(function () { 
    $('#thumbnail').imgAreaSelect({ aspectRatio: '1:<?php echo $thumb_height/$thumb_width;?>', onSelectChange: preview }); 
     clearBrowserCache();
});

</script>
<script>
function clearBrowserCache() {
    header("Pragma: no-cache");
    header("Cache: no-cache");
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
}
</script>
<?php }?>
<h1>&nbsp;</h1>
<?php
//Display error message if there are any
if(strlen($error)>0){
    echo "<div style='margin-left:3px;color:#d60000;margin-bottom:5px;'><li><strong>Error!</strong></li><li>".$error."</li></div>";
}
if(strlen($large_photo_exists)>0 && strlen($thumb_photo_exists)>0){
    echo $large_photo_exists."&nbsp;".$thumb_photo_exists;

    //Clear the time stamp session and user file extension
    $_SESSION['random_key']= "";
    $_SESSION['user_file_ext']= "";
    header("Location:../update_profile");
}else{
        if(strlen($large_photo_exists)>0){?>
        <div class="font" style="margin-bottom:10px;">Create Thumbnail <span style="color:#F00;font-size:10px" class="s_font">&nbsp;&nbsp;*If the image didnt changed please press (Ctrl + F5)</span> </div>
        <div align="center">
            <img src="<?php echo $upload_path.$large_image_name.$_SESSION['user_file_ext'];clearstatcache();?>" style="float: left; margin-right: 10px;" id="thumbnail" alt="Create Thumbnail" onmouseover="clearBrowserCache()" />
            <div style="border:1px #e5e5e5 solid; float:left; position:relative; overflow:hidden; width:<?php echo $thumb_width;?>px; height:<?php echo $thumb_height;?>px;">
                <img src="<?php echo $upload_path.$large_image_name.$_SESSION['user_file_ext'];?>" style="position: relative;" alt="Thumbnail Preview" />
            </div>
            <br style="clear:both;"/>
            <form name="thumbnail" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
                <input type="hidden" name="x1" value="" id="x1" />
                <input type="hidden" name="y1" value="" id="y1" />
                <input type="hidden" name="x2" value="" id="x2" />
                <input type="hidden" name="y2" value="" id="y2" />
                <input type="hidden" name="w" value="" id="w" />
                <input type="hidden" name="h" value="" id="h" />
                <input type="submit" name="upload_thumbnail" value="Save Image" id="save_thumb" class="inside_button" style="float:left; margin-top:10px;width:300px;" />
            </form>
        </div>
    <hr  style="background-color:#0099CC;margin-top:50px; margin-bottom:20px;"/>
    <?php   } ?>
    <div class="font">Upload Your Photo</div>
    <form name="photo" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
    <input type="file" name="image" size="30" style="background-color:#FFF;width:300px;"  /> <input type="submit" name="upload" value="Upload"  class="inside_button"/>
    </form>
<?php } ?>




</div>
<!--prof pic image end-->
</div>

<p><div style="width:100%; height:50px; background-color:none"></div></p>
</div>

    </div>
        <div style="width:100%;background-color:#0094d6;"  >
        <div id="dd" style="background-color:#0094d6; width:1010px; height:45px;" class="center"  ><div id="a" style="width:967px; height:45px;"   >
<table width="100%" border="0">
        <tr>


          <td>&nbsp;</td>
          <td style="font-family:Arial, Helvetica, sans-serif;font-size:10px; color:#FFF; text-align:center">  Copyright © LCB 2013, All rights reserved. </td>
          <td>&nbsp;</td>
        </tr>
        <tr >
          <td width="30%">&nbsp;</td>
          <td width="43%">&nbsp;</td>
          <td width="27%">&nbsp;</td>
        </tr>
      </table>
</div>
     </div> 
</div>

我很困惑在这里做什么。有没有人对这个问题有意见或线索?

4

3 回答 3

2

你可以尝试这样的事情来欺骗缓存机制:

<img src="your_image.jpg?nocache=<?=time()?>"/>

每次浏览器都应将其视为新图像。让我知道这是否适合您。

于 2012-10-27T14:40:27.370 回答
1

您可以像这样向图像网址添加时间戳:

<img src="/image.jpg?timestamp=<?php echo Time(); ?>" >

这使得每个请求的 URL 都是唯一的,从而使每个请求都是唯一的。因此,没有缓存!

代码可能在这两行中:

$thumb_photo_exists = "<img src=\"".$upload_path.$thumb_image_name.$_SESSION['user_file_ext']."?timestamp=".Time()."\" alt=\"Thumbnail Image\"/>";

$large_photo_exists = "<img src=\"".$upload_path.$large_image_name.$_SESSION['user_file_ext']."?timestamp=".Time()."\" alt=\"Large Image\"/>";

照顾好$_SESSION['user_file_ext'],你的Time()时间戳就在那里。

于 2012-10-27T18:16:41.697 回答
0

另请查看标题:

header("Cache: no-cahce");

应该:

header("Cache: no-cache");
于 2015-07-13T19:07:53.647 回答