php文件上传类upload_class的扩展类及示例

WBOY
Freigeben: 2016-07-25 08:56:41
Original
1282 Leute haben es durchsucht
本文介绍下,一个用于上传图片的php类,是基于之前的upload_class类的一个扩展。有需要的朋友,可以参考下。

分享一个上传图片文件的php扩展类,基于前文:php文件上传类与实例的一个扩展。 主要用于上传图片文件。

代码:

<?php 
/**
* php图片上传类
* 基类:file_upload
* 编辑:bbs.it-home.org
*/
include ($_SERVER['DOCUMENT_ROOT']."/classes/upload/upload_class.php"); 
error_reporting(E_ALL); 
ini_set("memory_limit", "64M"); 
set_time_limit(60); 

class Foto_upload extends file_upload { 
     
    var $x_size; 
    var $y_size; 
    var $x_max_size = 300; 
    var $y_max_size = 200; 
    var $x_max_thumb_size = 110; 
    var $y_max_thumb_size = 88; 
    var $thumb_folder; 
    var $foto_folder; 
    var $larger_dim; 
    var $larger_curr_value; 
    var $larger_dim_value; 
    var $larger_dim_thumb_value; 
     
    var $use_image_magick = true; // switch between true and false 
    // I suggest to use ImageMagick on Linux/UNIX systems, it works on windows too, but it's hard to configurate 
    // check your existing configuration by your web hosting provider 
     
    function process_image($landscape_only = false, $create_thumb = false, $delete_tmp_file = false, $compression = 85) { 
        $filename = $this->upload_dir.$this->file_copy; 
        $this->check_dir($this->thumb_folder); // run these checks to create not existing directories 
        $this->check_dir($this->foto_folder); // the upload dir is created during the file upload (if not already exists) 
        $thumb = $this->thumb_folder.$this->file_copy; 
        $foto = $this->foto_folder.$this->file_copy; 
        if ($landscape_only) { 
            $this->get_img_size($filename); 
            if ($this->y_size > $this->x_size) { 
                $this->img_rotate($filename, $compression); 
            } 
        } 
        $this->check_dimensions($filename); // check which size is longer then the max value 
        if ($this->larger_curr_value > $this->larger_dim_value) { 
            $this->thumbs($filename, $foto, $this->larger_dim_value, $compression); 
        } else { 
            copy($filename, $foto); 
        } 
        if ($create_thumb) { 
            if ($this->larger_curr_value > $this->larger_dim_thumb_value) { 
                $this->thumbs($filename, $thumb, $this->larger_dim_thumb_value, $compression); // finally resize the image 
            } else { 
                copy($filename, $thumb); 
            } 
        } 
        if ($delete_tmp_file) $this->del_temp_file($filename); // note if you delete the tmp file the check if a file exists will not work 
    } 
    function get_img_size($file) { 
        $img_size = getimagesize($file); 
        $this->x_size = $img_size[0]; 
        $this->y_size = $img_size[1]; 
    } 
    function check_dimensions($filename) { 
        $this->get_img_size($filename); 
        $x_check = $this->x_size - $this->x_max_size; 
        $y_check = $this->y_size - $this->y_max_size; 
        if ($x_check < $y_check) { 
            $this->larger_dim = "y"; 
            $this->larger_curr_value = $this->y_size; 
            $this->larger_dim_value = $this->y_max_size; 
            $this->larger_dim_thumb_value = $this->y_max_thumb_size; 
        } else { 
            $this->larger_dim = "x"; 
            $this->larger_curr_value = $this->x_size; 
            $this->larger_dim_value = $this->x_max_size; 
            $this->larger_dim_thumb_value = $this->x_max_thumb_size; 
        } 
    } 
    function img_rotate($wr_file, $comp) { 
        $new_x = $this->y_size; 
        $new_y = $this->x_size; 
        if ($this->use_image_magick) { 
            exec(sprintf("mogrify -rotate 90 -quality %d %s", $comp, $wr_file)); 
        } else { 
            $src_img = imagecreatefromjpeg($wr_file); 
            $rot_img = imagerotate($src_img, 90, 0); 
            $new_img = imagecreatetruecolor($new_x, $new_y); 
            imageantialias($new_img, TRUE); 
            imagecopyresampled($new_img, $rot_img, 0, 0, 0, 0, $new_x, $new_y, $new_x, $new_y); 
            imagejpeg($new_img, $this->upload_dir.$this->file_copy, $comp); 
        } 
    } 
    function thumbs($file_name_src, $file_name_dest, $target_size, $quality = 80) { 
        //print_r(func_get_args()); 
        $size = getimagesize($file_name_src); 
        if ($this->larger_dim == "x") { 
            $w = number_format($target_size, 0, ',', ''); 
            $h = number_format(($size[1]/$size[0])*$target_size,0,',',''); 
        } else { 
            $h = number_format($target_size, 0, ',', ''); 
            $w = number_format(($size[0]/$size[1])*$target_size,0,',',''); 
        } 
        if ($this->use_image_magick) { 
            exec(sprintf("convert %s -resize %dx%d -quality %d %s", $file_name_src, $w, $h, $quality, $file_name_dest)); 
        } else { 
            $dest = imagecreatetruecolor($w, $h); 
            imageantialias($dest, TRUE); 
            $src = imagecreatefromjpeg($file_name_src); 
            imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $size[0], $size[1]); 
            imagejpeg($dest, $file_name_dest, $quality); 
        } 
    } 
} 

$max_size = 1024*1024; // the max. size for uploading (~1MB) 
define("MAX_SIZE", $max_size); 
$foto_upload = new Foto_upload; 

$foto_upload->upload_dir = $_SERVER['DOCUMENT_ROOT']."/files/"; // "files" is the folder for the uploaded files (you have to create these folder) 
$foto_upload->foto_folder = $_SERVER['DOCUMENT_ROOT']."/files/photo/"; 
$foto_upload->thumb_folder = $_SERVER['DOCUMENT_ROOT']."/files/thumb/"; 
$foto_upload->extensions = array(".jpg"); // specify the allowed extension(s) here 
$foto_upload->language = "en"; 
$foto_upload->x_max_size = 300; 
$foto_upload->y_max_size = 200; 
$foto_upload->x_max_thumb_size = 120; 
$foto_upload->y_max_thumb_size = 150; 
         
if (isset($_POST['Submit']) && $_POST['Submit'] == "Upload") { 
    $foto_upload->the_temp_file = $_FILES['upload']['tmp_name']; 
    $foto_upload->the_file = $_FILES['upload']['name']; 
    $foto_upload->http_error = $_FILES['upload']['error']; 
    $foto_upload->replace = (isset($_POST['replace'])) ? $_POST['replace'] : "n"; // because only a checked checkboxes is true 
    $foto_upload->do_filename_check = "n";  
    if ($foto_upload->upload()) { 
        $foto_upload->process_image(false, true, 80); 
        $foto_upload->message[] = "Processed foto: ".$foto_upload->file_copy."!"; // "file_copy is the name of the foto" 
    } 
} 
$error = $foto_upload->show_error_string(); 
?>
Nach dem Login kopieren

2,上传图片的调用示例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>php图片上传类的调用示例-bbs.it-home.org</title> 
<style type="text/css"> 
<!-- 
body { 
    text-align:center; 
} 
label { 
    margin:0; 
    float:left; 
    display:block; 
    width:120px; 
} 
#main { 
    width:350px; 
    margin:0 auto; 
    padding:20px 0; 
    text-align:left; 
} 
--> 
</style> 
</head> 
<body> 
<div id="main"> 
  <h1>上传图片</h1> 
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_size; ?>"><br> 
    <div> 
      <label for="upload">选择图片文件:</label> 
    <input type="file" name="upload" id="upload" size="35"></div> 
    <div> 
      <label for="replace">替换旧的图片文件吗?</label> 
    <input type="checkbox" name="replace" value="y"></div> 
    <p style="margin-top:25px;text-align:center;"><input type="submit" name="Submit" id="Submit" value="上传图片"> 
    </p> 
  </form> 
  <p><?php echo $error; ?></p> 
</div>   
</body> 
</html>
Nach dem Login kopieren


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage