php文件上传类可生成缩略图代码

 更新时间:2016年11月25日 16:28  点击:1960

<?php       

 代码如下 复制代码
if ($_GET['action'] == 'save') {       
      
    $up = new upload();       
    $up->set_dir(dirname(__FILE__).'/upload/','{y}/{m}');       
    $up->set_thumb(100,80);       
    $up->set_watermark(dirname(__FILE__).'/jblog/images/watermark.png',6,90);       
    $fs = $up->execute();       
      
    var_dump($fs);       
}    

   
?>       

 代码如下 复制代码
<html>       
    <head><title>test</title></head>       
    <body style="margin:0;padding:0">       
    <form name="upload" method="post" action="?action=save" enctype="multipart/form-data" style="margin:0">       
        <input type="file" name="attach[]" />       
        <input type="file" name="attach[]" />       
        <input type="submit" name="submit" value="上 传" />       
    </form>       
    </body>       
</html> 

 

 代码如下 复制代码
class upload {       
      
    var $dir;            //附件存放物理目录       
    var $time;           //自定义文件上传时间       
    var $allow_types;    //允许上传附件类型       
    var $field;          //上传控件名称       
    var $maxsize;        //最大允许文件大小,单位为KB       
      
    var $thumb_width;    //缩略图宽度       
    var $thumb_height;   //缩略图高度       
      
    var $watermark_file; //水印图片地址       
    var $watermark_pos;  //水印位置       
    var $watermark_trans;//水印透明度       
      
      
    //构造函数       
    //$types : 允许上传的文件类型 , $maxsize : 允许大小 ,  $field : 上传控件名称 , $time : 自定义上传时间       
    function upload($types = 'jpg|png', $maxsize = 1024, $field = 'attach', $time = '') {       
        $this->allow_types = explode('|',$types);       
        $this->maxsize = $maxsize * 1024;       
        $this->field = $field;       
        $this->time = $time ? $time : time();       
    }       
      
    //设置并创建文件具体存放的目录       
    //$basedir  : 基目录,必须为物理路径       
    //$filedir  : 自定义子目录,可用参数{y}、{m}、{d}       
    function set_dir($basedir,$filedir = '') {       
        $dir = $basedir;       
        !is_dir($dir) && @mkdir($dir,0777);       
        if (!emptyempty($filedir)) {       
            $filedir = str_replace(array('{y}','{m}','{d}'),array(date('Y',$this->time),date('m',$this->time),date('d',$this->time)),strtolower($filedir));       
            $dirs = explode('/',$filedir);       
            foreach ($dirs as $d) {       
                !emptyempty($d) && $dir .= $d.'/';       
                !is_dir($dir) && @mkdir($dir,0777);       
            }       
        }       
        $this->dir = $dir;       
    }       
      
    //图片缩略图设置,如果不生成缩略图则不用设置       
    //$width : 缩略图宽度 , $height : 缩略图高度       
    function set_thumb ($width = 0, $height = 0) {       
        $this->thumb_width  = $width;       
        $this->thumb_height = $height;       
    }       
      
    //图片水印设置,如果不生成添加水印则不用设置       
    //$file : 水印图片 , $pos : 水印位置 , $trans : 水印透明度       
    function set_watermark ($file, $pos = 6, $trans = 80) {       
        $this->watermark_file  = $file;       
        $this->watermark_pos   = $pos;       
        $this->watermark_trans = $trans;       
    }       
      
    /*----------------------------------------------------------------     
    执行文件上传,处理完返回一个包含上传成功或失败的文件信息数组,     
    其中:name 为文件名,上传成功时是上传到服务器上的文件名,上传失败则是本地的文件名     
          dir  为服务器上存放该附件的物理路径,上传失败不存在该值     
          size 为附件大小,上传失败不存在该值     
          flag 为状态标识,1表示成功,-1表示文件类型不允许,-2表示文件大小超出     
    -----------------------------------------------------------------*/      
    function execute() {       
        $files = array(); //成功上传的文件信息       
        $field = $this->field;       
        $keys = array_keys($_FILES[$field]['name']);       
        foreach ($keys as $key) {       
            if (!$_FILES[$field]['name'][$key]) continue;       
                   
            $fileext = $this->fileext($_FILES[$field]['name'][$key]); //获取文件扩展名       
            $filename = date('Ymdhis',$this->time).mt_rand(10,99).'.'.$fileext; //生成文件名       
            $filedir = $this->dir;  //附件实际存放目录       
            $filesize = $_FILES[$field]['size'][$key]; //文件大小       
                   
            //文件类型不允许       
            if (!in_array($fileext,$this->allow_types)) {       
                $files[$key]['name'] = $_FILES[$field]['name'][$key];       
                $files[$key]['flag'] = -1;       
                continue;       
            }       
      
            //文件大小超出       
            if ($filesize > $this->maxsize) {       
                $files[$key]['name'] = $_FILES[$field]['name'][$key];       
                $files[$key]['name'] = $filesize;       
                $files[$key]['flag'] = -2;       
                continue;       
            }       
      
            $files[$key]['name'] = $filename;       
            $files[$key]['dir'] = $filedir;       
            $files[$key]['size'] = $filesize;       
      
            //保存上传文件并删除临时文件       
            if (is_uploaded_file($_FILES[$field]['tmp_name'][$key])) {       
                move_uploaded_file($_FILES[$field]['tmp_name'][$key],$filedir.$filename);       
                @unlink($_FILES[$field]['tmp_name'][$key]);       
                $files[$key]['flag'] = 1;       
      
                //对图片进行加水印和生成缩略图       
                if (in_array($fileext,array('jpg','png'))) {       
                    if ($this->thumb_width) {       
                        if ($this->create_thumb($filedir.$filename,$filedir.'thumb_'.$filename)) {       
                            $files[$key]['thumb'] = 'thumb_'.$filename;  //缩略图文件名       
                        }       
                    }       
                    $this->create_watermark($filedir.$filename);       
                }       
            }       
        }       
      
        return $files;       
    }       
      
    //创建缩略图,以相同的扩展名生成缩略图       
    //$src_file : 来源图像路径 , $thumb_file : 缩略图路径       
    function create_thumb ($src_file,$thumb_file) {       
        $t_width  = $this->thumb_width;       
        $t_height = $this->thumb_height;       
      
        if (!file_exists($src_file)) return false;       
      
        $src_info = getImageSize($src_file);       
      
        //如果来源图像小于或等于缩略图则拷贝源图像作为缩略图       
        if ($src_info[0] <= $t_width && $src_info[1] <= $t_height) {       
            if (!copy($src_file,$thumb_file)) {       
                return false;       
            }       
            return true;       
        }       
      
        //按比例计算缩略图大小       
        if ($src_info[0] - $t_width > $src_info[1] - $t_height) {       
            $t_height = ($t_width / $src_info[0]) * $src_info[1];       
        } else {       
            $t_width = ($t_height / $src_info[1]) * $src_info[0];       
        }       
      
        //取得文件扩展名       
        $fileext = $this->fileext($src_file);       
      
        switch ($fileext) {       
            case 'jpg' :       
                $src_img = ImageCreateFromJPEG($src_file); break;       
            case 'png' :       
                $src_img = ImageCreateFromPNG($src_file); break;       
            case 'gif' :       
                $src_img = ImageCreateFromGIF($src_file); break;       
        }       
      
        //创建一个真彩色的缩略图像       
        $thumb_img = @ImageCreateTrueColor($t_width,$t_height);       
      
        //ImageCopyResampled函数拷贝的图像平滑度较好,优先考虑       
        if (function_exists('imagecopyresampled')) {       
            @ImageCopyResampled($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);       
        } else {       
            @ImageCopyResized($thumb_img,$src_img,0,0,0,0,$t_width,$t_height,$src_info[0],$src_info[1]);       
        }       
      
        //生成缩略图       
        switch ($fileext) {       
            case 'jpg' :       
                ImageJPEG($thumb_img,$thumb_file); break;       
            case 'gif' :       
                ImageGIF($thumb_img,$thumb_file); break;       
            case 'png' :       
                ImagePNG($thumb_img,$thumb_file); break;       
        }       
      
        //销毁临时图像       
        @ImageDestroy($src_img);       
        @ImageDestroy($thumb_img);       
      
        return true;       
      
    }       
      
    //为图片添加水印       
    //$file : 要添加水印的文件       
    function create_watermark ($file) {       
      
        //文件不存在则返回       
        if (!file_exists($this->watermark_file) || !file_exists($file)) return;       
        if (!function_exists('getImageSize')) return;       
               
        //检查GD支持的文件类型       
        $gd_allow_types = array();       
        if (function_exists('ImageCreateFromGIF')) $gd_allow_types['image/gif'] = 'ImageCreateFromGIF';       
        if (function_exists('ImageCreateFromPNG')) $gd_allow_types['image/png'] = 'ImageCreateFromPNG';       
        if (function_exists('ImageCreateFromJPEG')) $gd_allow_types['image/jpeg'] = 'ImageCreateFromJPEG';       
      
        //获取文件信息       
        $fileinfo = getImageSize($file);       
        $wminfo   = getImageSize($this->watermark_file);       
      
        if ($fileinfo[0] < $wminfo[0] || $fileinfo[1] < $wminfo[1]) return;       
      
        if (array_key_exists($fileinfo['mime'],$gd_allow_types)) {       
            if (array_key_exists($wminfo['mime'],$gd_allow_types)) {       
                       
                //从文件创建图像       
                $temp = $gd_allow_types[$fileinfo['mime']]($file);       
                $temp_wm = $gd_allow_types[$wminfo['mime']]($this->watermark_file);       
      
                //水印位置       
                switch ($this->watermark_pos) {                    
                    case 1 :  //顶部居左       
                        $dst_x = 0; $dst_y = 0; break;                     
                    case 2 :  //顶部居中       
                        $dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = 0; break;                       
                    case 3 :  //顶部居右       
                        $dst_x = $fileinfo[0]; $dst_y = 0; break;                      
                    case 4 :  //底部居左       
                        $dst_x = 0; $dst_y = $fileinfo[1]; break;                      
                    case 5 :  //底部居中       
                        $dst_x = ($fileinfo[0] - $wminfo[0]) / 2; $dst_y = $fileinfo[1]; break;            
                    case 6 :  //底部居右       
                        $dst_x = $fileinfo[0]-$wminfo[0]; $dst_y = $fileinfo[1]-$wminfo[1]; break;       
                    default : //随机       
                        $dst_x = mt_rand(0,$fileinfo[0]-$wminfo[0]); $dst_y = mt_rand(0,$fileinfo[1]-$wminfo[1]);       
                }       
      
                if (function_exists('ImageAlphaBlending')) ImageAlphaBlending($temp_wm,True); //设定图像的混色模式       
                if (function_exists('ImageSaveAlpha')) ImageSaveAlpha($temp_wm,True); //保存完整的 alpha 通道信息       
      
                //为图像添加水印       
                if (function_exists('imageCopyMerge')) {       
                    ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1],$this->watermark_trans);       
                } else {       
                    ImageCopyMerge($temp,$temp_wm,$dst_x,$dst_y,0,0,$wminfo[0],$wminfo[1]);       
                }       
      
                //保存图片       
                switch ($fileinfo['mime']) {       
                    case 'image/jpeg' :       
                        @imageJPEG($temp,$file);       
                        break;       
                    case 'image/png' :       
                        @imagePNG($temp,$file);       
                        break;       
                    case 'image/gif' :        
                        @imageGIF($temp,$file);       
                        break;       
                }       
                //销毁零时图像       
                @imageDestroy($temp);       
                @imageDestroy($temp_wm);       
            }       
        }       
    }       
      
    //获取文件扩展名       
    function fileext($filename) {       
        return strtolower(substr(strrchr($filename,'.'),1,10));       
    }       
}   
过滤空数组的方法我下面举了三个实例,一个是for,foreach,array_filter来处理,下面看实例

//方法一 利用array_filter调用我们自定的函数来过滤空值

 代码如下 复制代码

function clear($a)
{
return $a <> "";
}

$array = array("",'','','','',1,1,1,1,1);
$stt = array_filter($array , "clear");

print_r( $stt );
/*
输出结果

Array
(
    [5] => 1
    [6] => 1
    [7] => 1
    [8] => 1
    [9] => 1
)
空值被过滤
*/

//过滤空数据二,用循环来处理

 

 代码如下 复制代码

$array = array("",'','2','','',1,1,1,1,1);

foreach( $array as $v =>$vc )
{
 if( $vc =='' )
 {
  unset($array[$v]);
 }
}

print_

r( $array);

/*
Array
(
    [2] => 2
    [5] => 1
    [6] => 1
    [7] => 1
    [8] => 1
    [9] => 1
)
*/

//方法实例三,用for来实例

 代码如下 复制代码

$tarray = array('','11','','www.111cn.net','','','cn.net');

$len = count( $tarray );
for( $i=0;$i<$len;$i++ )
{
 if( $tarray[$i] == '' )
 {
  unset( $tarray[$i]);
 }
}

print_r($tarray);

/*
过滤空数组后的结果为

Array
(
    [1] => 11
    [3] => www.111cn.net
    [6] => cn.net
)
注明:本站原创教程转注明来源www.111cn.net
*/

Memcached的工作方式

以下的部分中,读者最好能准备一份memcached的源代码。

Memcached是传统的网络服务程序,如果启动的时候使用了-d参数,它会以守护进程的方式执行。创建守护进程由daemon.c完成,这个程序只有一个daemon函数,这个函数很简单(如无特殊说明,代码以1.2.1为准):

 代码如下 复制代码

CODE:
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>

int
daemon(nochdir, noclose)
    int nochdir, noclose;
{
    int fd;

    switch (fork()) {
    case -1:
        return (-1);
    case 0:
        break; 
    default:
        _exit(0);
    }

    if (setsid() == -1)
        return (-1);

    if (!nochdir)
        (void)chdir(”/”);

    if (!noclose && (fd = open(”/dev/null”, O_RDWR, 0)) != -1) {
        (void)dup2(fd, STDIN_FILENO);
        (void)dup2(fd, STDOUT_FILENO);
        (void)dup2(fd, STDERR_FILENO);
        if (fd > STDERR_FILENO)
            (void)close(fd);
    }
    return (0);
}

这个函数 fork 了整个进程之后,父进程就退出,接着重新定位 STDIN 、 STDOUT 、 STDERR 到空设备, daemon 就建立成功了。

 代码如下 复制代码
<?php
class Memcached
{
private $mem;
public $pflag=''; // memcached pconnect tag
private function memConnect($serkey){
require 'config.php';
$server = $memcached;
$this->mem = new Memcache;
$link = !$this->pflag ? 'connect' : 'pconnect' ;
$this->mem->$link($server[$serkey][0],$server[$serkey][1]) or $this->errordie('memcached connect error');
}
public function set($ser_key,$values,$flag='',$expire=''){
$this->memConnect($this->tag($ser_key));
if($this->mem->set($ser_key,$values,$flag,$expire)) return true;
else return false;
}
public function get($ser_key){
$this->memConnect($this->tag($ser_key));
if($var=$this->mem->get($ser_key)) return $var;
else return false;
}
private function tag($ser_key){
$tag=explode('_',$ser_key);
return $tag[0];
}
private function errordie($errmsg){
die($errmsg);
}
}
?>

 

 代码如下 复制代码


class Mysql
{
private $mysqlmaster;
private $myssqlslave;
private static $auid=0;
public function __construct(){
require 'config.php';
$msg = $mysql;

$this->mysqlmaster = new mysqli($msg['master'][0],$msg['master'][1],$msg['master'][2],$msg['master'][3]); //master mysql
$this->mysqlslave = $this->autotranscat($msg); // slave mysql
if(mysqli_connect_errno()){
printf("Connect failed: %s ",mysqli_connect_error());
exit();
}
if(!$this->mysqlmaster->set_charset("latin1") && !$this->mysqlslave->set_charset("latin1")){
exit("set charset error");
}
}
private function autotranscat($mysql){
session_start();
$_SESSION['SID']!=0 || $_SESSION['SID']=0 ;
if($_SESSION['SID'] >=count($mysql)-1) $_SESSION['SID'] = 1;
else $_SESSION['SID']++;
$key = 'slave_'.$_SESSION['SID'];
echo($_SESSION['SID']);
return new mysqli($mysql[$key][0],$mysql[$key][1],$mysql[$key][2],$mysql[$key][3]);
}
public function mquery($sql){ //insert update
if(!$this->mysqlmaster->query($sql)){
return false;
}
}
public function squery($sql){
if($result=$this->mysqlslave->query($sql)){
return $result;
}else{
return false;
};
}
public function fetArray($sql){
if($result=$this->squery($sql)){
while($row=$result->fetch_array(MYSQLI_ASSOC)){
$resultraa[] = $row;
};
return $resultraa;
}
}
}
?>

 

require 'init.php';
$mem = new Memcached;
/* $mem->set('en_xx','bucuo');
echo($mem->get('en_xx'));
$mem->set('cn_jjyy','wokao');
echo($mem->get('cn_jjyy'));
*/
$sq = new Mysql;
$sql = "insert into mybb(pid) values(200)";
$mdsql = md5($sql);
if(!$result=$mem->get('cn_'.$mdsql)){
$sq->mquery("insert into mybb(pid) values(200)"); //插入到主mysql
$result = $sq->fetArray("select * from mybb"); //查询 是 从mysql
foreach($result as $var){
echo $var['pid'];
}
$mem->set('cn_'.$mdsql,$result); //添加到 名为 cn 的 memcached 服务器
}else{
foreach($result as $var){
echo $var['pid'];
}
}
?>

 

 代码如下 复制代码
<?php
$memcached = array( //用memcached 的 多 进程模拟 多台memcached 服务器 cn en 为 内存服务器名
'cn'=>array('192.168.254.144',11211),
'en'=>array('192.168.254.144',11212)
);
$mysql = array( // mysql 的主从 我的环境是 : xp 主 linux 从 mysql 5 php5
'master'=>array('192.168.254.213','root','1','mydz'),
'slave_1'=>array('192.168.254.144','root','1','mydz') //可以灵活添加多台从服务器
);
?>

Memcached 本身的启动过程,在 memcached.c 的 main 函数中顺序如下:

1 、调用 settings_init() 设定初始化参数
2 、从启动命令中读取参数来设置 setting 值
3 、设定 LIMIT 参数
4 、开始网络 socket 监听(如果非 socketpath 存在)( 1.2 之后支持 UDP 方式)
5 、检查用户身份( Memcached 不允许 root 身份启动)
6 、如果有 socketpath 存在,开启 UNIX 本地连接(Sock 管道)
7 、如果以 -d 方式启动,创建守护进程(如上调用 daemon 函数)
8 、初始化 item 、 event 、状态信息、 hash 、连接、 slab
9 、如设置中 managed 生效,创建 bucket 数组
10 、检查是否需要锁定内存页
11 、初始化信号、连接、删除队列
12 、如果 daemon 方式,处理进程 ID
13 、event 开始,启动过程结束, main 函数进入循环。

在 daemon 方式中,因为 stderr 已经被定向到黑洞,所以不会反馈执行中的可见错误信息。

memcached.c 的主循环函数是 drive_machine ,传入参数是指向当前的连接的结构指针,根据 state 成员的状态来决定动作。

Memcached 使用一套自定义的协议完成数据交换,它的 protocol 文档可以参考: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

在API中,换行符号统一为

$conn = new com("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("www.111cn.net/db.mdb");
//与access连接要用到com接口了。
$conn->Open($connstr);
$rs = new com("ADODB.RecordSet");
//数据查询并显示出来
$rs->Open("select * from szd_t",$conn,1,1);
while(! $rs->eof) {
 $f = $rs->Fields(1);
 echo $f->value;
 $rs->MoveNext();
}

//下面来看一下php access数据库教程保存

$sql ="insert into szd_t(title)values('www.111cn.net')";

$rs->Open( $sql );
echo '保存成功';

//php access数据库编辑

$sql ="Update szd_t set title='111cn.net' where id=".$_GET['id'];

$rs->Open( $sql );
echo '编辑成功';

//删除数据

$sql ="delete from szd_t where id=".$_GET['id'];

//本文章原创于www.111cn.net,转载注明出处

/*
* 功能:PHP图片水印 (水印支持图片或文字)
* 参数:
* $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;
* $waterPos 水印位置,有10种状态,0为随机位置;
* 1为顶端居左,2为顶端居中,3为顶端居右;
* 4为中部居左,5为中部居中,6为中部居右;
* 7为底端居左,8为底端居中,9为底端居右;
* $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;
* $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文;
* $textFont 文字大小,值为1、2、3、4或5,默认为5;
* $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色);
*
* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG
* $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。
* 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。
* 加水印后的图片的文件名和 $groundImage 一样。
* 作者:longware @ 2004-11-3 14:15:13
*/
function imageWaterMark($groundImage,$waterPos=0,$waterImage=”",$waterText=”",$textFont=5,$textColor=”#FF0000″)
{
$isWaterImage = FALSE;
$formatMsg = “暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。”;

//读取水印文件
if(!emptyempty($waterImage) && file_exists($waterImage))
{
$isWaterImage = TRUE;
$water_info = getimagesize($waterImage);
$water_w = $water_info[0];//取得水印图片的宽
$water_h = $water_info[1];//取得水印图片的高

switch($water_info[2])//取得水印图片的格式
{
case 1:$water_im = imagecreatefromgif($waterImage);break;
case 2:$water_im = imagecreatefromjpeg($waterImage);break;
case 3:$water_im = imagecreatefrompng($waterImage);break;
default:die($formatMsg);
}
}

//读取背景图片
if(!emptyempty($groundImage) && file_exists($groundImage))
{
$ground_info = getimagesize($groundImage);
$ground_w = $ground_info[0];//取得背景图片的宽
$ground_h = $ground_info[1];//取得背景图片的高

switch($ground_info[2])//取得背景图片的格式
{
case 1:$ground_im = imagecreatefromgif($groundImage);break;
case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
case 3:$ground_im = imagecreatefrompng($groundImage);break;
default:die($formatMsg);
}
}
else
{
die(”需要加水印的图片不存在!”);
}

//水印位置
if($isWaterImage)//图片水印
{
$w = $water_w;
$h = $water_h;
$label = “图片的”;
}
else//文字水印
{
$temp = imagettfbbox(ceil($textFont*5),0,”./cour.ttf”,$waterText);//取得使用 TrueType 字体的文本的范围
$w = $temp[2] - $temp[6];
$h = $temp[3] - $temp[7];
unset($temp);
$label = “文字区域”;
}
if( ($ground_w<$w) || ($ground_h<$h) )
{
echo “需要加水印的图片的长度或宽度比水印”.$label.”还小,无法生成水印!”;
return;
}
switch($waterPos)
{
case 0://随机
$posX = rand(0,($ground_w - $w));
$posY = rand(0,($ground_h - $h));
break;
case 1://1为顶端居左
$posX = 0;
$posY = 0;
break;
case 2://2为顶端居中
$posX = ($ground_w - $w) / 2;
$posY = 0;
break;
case 3://3为顶端居右
$posX = $ground_w - $w;
$posY = 0;
break;
case 4://4为中部居左
$posX = 0;
$posY = ($ground_h - $h) / 2;
break;
case 5://5为中部居中
$posX = ($ground_w - $w) / 2;
$posY = ($ground_h - $h) / 2;
break;
case 6://6为中部居右
$posX = $ground_w - $w;
$posY = ($ground_h - $h) / 2;
break;
case 7://7为底端居左
$posX = 0;
$posY = $ground_h - $h;
break;
case 8://8为底端居中
$posX = ($ground_w - $w) / 2;
$posY = $ground_h - $h;
break;
case 9://9为底端居右
$posX = $ground_w - $w;
$posY = $ground_h - $h;
break;
default://随机
$posX = rand(0,($ground_w - $w));
$posY = rand(0,($ground_h - $h));
break;
}

//设定图像的混色模式
imagealphablending($ground_im, true);

if($isWaterImage)//图片水印
{
imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件
}
else//文字水印
{
if( !emptyempty($textColor) && (strlen($textColor)==7) )
{
$R = hexdec(substr($textColor,1,2));
$G = hexdec(substr($textColor,3,2));
$B = hexdec(substr($textColor,5));
}
else
{
die(”水印文字颜色格式不正确!”);
}
imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
}

//生成水印后的图片
@unlink($groundImage);
switch($ground_info[2])//取得背景图片的格式
{
case 1:imagegif($ground_im,$groundImage);break;
case 2:imagejpeg($ground_im,$groundImage);break;
case 3:imagepng($ground_im,$groundImage);break;
default:die($errorMsg);
}

//释放内存
if(isset($water_info)) unset($water_info);
if(isset($water_im)) imagedestroy($water_im);
unset($ground_info);
imagedestroy($ground_im);
}
//—————————————————————————————
$id=$_REQUEST['id'];
$num = count($_FILES['userfile']['name']);
print_r($_FILES['userfile']);
print_r($_FILES['userfile']['name']);

echo $num;
echo “<bR>”;
if(isset($id)){
for($i=0;$i<$id;$i++){

if(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0)
{
$uploadfile = “./”.time().”_”.$_FILES['userfile'][name][$i];
echo “<br>”;
echo $uploadfile;
if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))
{
echo “OK<br>”;

//文字水印
//imageWaterMark($uploadfile,5,”",”HTTP://www.lvye.info”,5,”#cccccc“);

//图片水印
$waterImage=”logo_ok1.gif”;//水印图片路径
imageWaterMark($uploadfile,9,$waterImage);

echo “<img src=”".$uploadfile.”” border=”0”>”;
}
else
{
echo “Fail<br>”;
}
}
}
}

?>
<form enctype=”multipart/form-data” method=”POST”>
<?php
for($a=0;$a<$id;$a++){
echo “文件: <input name=”userfile[]” type=”file”><br>”;

}
?>
<input type=”submit” value=”上传”>
</form>
?>

//下面这段代码是一段图片上传并且给上传的图片加水印

参数说明:
$max_file_size  : 上传文件大小限制, 单位BYTE
$destination_folder : 上传文件路径
$watermark   : 是否附加水印(1为加水印,其他为不加水印);
使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;
3. http://www.111cn.net/php.asp;
****************************************************/
//上传文件类型列表
$uptypes=array(
    'image/jpg', 
    'image/jpeg',
    'image/png',
    'image/pjpeg',
    'image/gif',
    'image/bmp',
    'image/x-png'
);
$max_file_size=2000000;     //上传文件大小限制, 单位BYTE
$destination_folder="uploadimg/"; //上传文件路径
$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);
$watertype=1;      //水印类型(1为文字,2为图片)
$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
$waterstring="http://www.xplore.cn/";  //水印字符串
$waterimg="xplore.gif";    //水印图片
$imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);
$imgpreviewsize=1/2;    //缩略图比例
?>
<html>
<head>
<title>ZwelL图片上传程序</title>
<style type="text/css教程">
<!--
body
{
     font-size: 9pt;
}
input
{
     background-color: #66CCFF;
     border: 1px inset #CCCCCC;
}
-->
</style>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="upform">
  上传文件:
  <input name="upfile" type="file">
  <input type="submit" value="上传"><br>
  允许上传的文件类型为:<?=implode(', ',$uptypes)?>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
    //是否存在文件
    {
         echo "图片不存在www.111cn.net!";
         exit;
    }
    $file = $_FILES["upfile"];
    if($max_file_size < $file["size"])
    //检查文件大小
    {
        echo "文件太大!";
        exit;
    }
    if(!in_array($file["type"], $uptypes))
    //检查文件类型
    {
        echo "文件类型不符!".$file["type"];
        exit;
    }
    if(!file_exists($destination_folder))
    {
        mkdir($destination_folder);
    }
    $filename=$file["tmp_name"];
    $image_size = getimagesize($filename);
    $pinfo=pathinfo($file["name"]);
    $ftype=$pinfo['extension'];
    $destination = $destination_folder.time().".".$ftype;
    if (file_exists($destination) && $overwrite != true)
    {
        echo "同名文件已经存在了";
        exit;
    }
    if(!move_uploaded_file ($filename, $destination))
    {
        echo "移动文件出错";
        exit;
    }
    $pinfo=pathinfo($destination);
    $fname=$pinfo[basename];
    echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";
    echo " 宽度:".$image_size[0];
    echo " 长度:".$image_size[1];
    echo "<br> 大小:".$file["size"]." bytes";
    if($watermark==1)
    {
        $iinfo=getimagesize($destination,$iinfo);
        $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
        $white=imagecolorallocate($nimage,255,255,255);
        $black=imagecolorallocate($nimage,0,0,0);
        $red=imagecolorallocate($nimage,255,0,0);
        imagefill($nimage,0,0,$white);
        switch ($iinfo[2])
        {
            case 1:
            $simage =imagecreatefromgif($destination);
            break;
            case 2:
            $simage =imagecreatefromjpeg($destination);
            break;
            case 3:
            $simage =imagecreatefrompng($destination);
            break;
            case 6:
            $simage =imagecreatefromwbmp($destination);
            break;
            default:
            die("不支持的文件类型");
            exit;
        }
        imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
        imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
        switch($watertype)
        {
            case 1:   //加水印字符串
            imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
            break;
            case 2:   //加水印图片
            $simage1 =imagecreatefromgif("xplore.gif");
            imagecopy($nimage,$simage1,0,0,0,0,85,15);
            imagedestroy($simage1);
            break;
        }
        switch ($iinfo[2])
        {
            case 1:
            //imagegif($nimage, $destination);
            imagejpeg($nimage, $destination);
            break;
            case 2:
            imagejpeg($nimage, $destination);
            break;
            case 3:
            imagepng($nimage, $destination);
            break;
            case 6:
            imagewbmp($nimage, $destination);
            //imagejpeg($nimage, $destination);
            break;
        }
        //覆盖原上传文件
        imagedestroy($nimage);
        imagedestroy($simage);
    }
    if($imgpreview==1)
    {
    echo "<br>图片预览:<br>";
    echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
    echo " alt="图片预览: 文件名:".$destination." www.111cn.net上传时间:">";
    }
}
?>

[!--infotagslink--]

相关文章

  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传

    这篇文章主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下...2015-12-25
  • jQuery+ajax简单实现文件上传的方法

    这篇文章主要介绍了jQuery+ajax简单实现文件上传的方法,结合实例形式简单分析了jQuery基于ajax的post方法进行文件传输及asp.net后台处理技巧,需要的朋友可以参考下...2016-06-12
  • js实现上传文件添加和删除文件选择框

    这篇文章主要为大家详细介绍了js实现上传文件添加和删除文件选择框 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-25
  • 适用于初学者的简易PHP文件上传类

    本文实例讲述了PHP多文件上传类,分享给大家供大家参考。具体如下:<&#63;phpclass Test_Upload{ protected $_uploaded = array(); protected $_destination; protected $_max = 1024000; protected $_messages =...2015-10-30
  • js 实现文件上传样式详情

    这篇文章主要介绍了js 实现文件上传样式,下面文章举例说明js 是如何实现文件上传样式的,附有代码详细解说,需要的朋友可以参考一下,希望对你有所帮助...2021-10-21
  • PHP利用APC模块实现大文件上传进度条的方法

    php 大文件带进度的上传,一直是一个令php程序员很苦恼的问题。查询baidu 、Google ,大体做带进度的上传方式为:flash+php,socket,apc+php等,下面我介绍了apc +php+ajax制作的带进度的上传,并贴出源码,希望对大家有用。 Altern...2015-10-30
  • C#文件上传的简单实现

    这篇文章主要为大家详细介绍了C#文件上传的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • php需登录的文件上传管理系统

    本文给大家介绍一个不错的需要登录的php 文件上传管理系统,功能简单有需要了解的同学可参考。 代码如下<&#63;php$admin_pw="admin";//管理密码$uploaddir="upload";//上传目录session_start();if($_GET['action']=="g...2015-10-30
  • asp.net html控件的File控件实现多文件上传实例分享

    asp.net中html控件的File控件实现多文件上传简单实例,开发工具vs2010使用c#语言,感兴趣的朋友可以了解下,必定是多文件上传值得学习,或许本文所提供的知识点对你有所帮助...2021-09-22
  • TypeScript前端上传文件到MinIO示例详解

    这篇文章主要为大家介绍了TypeScript前端上传文件到MinIO示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-10-12
  • JQuery异步提交表单与文件上传功能示例

    这篇文章主要介绍了JQuery异步提交表单与文件上传功能,结合实例形式分析了jQuery表单提交及文件传输操作的相关实现技巧,需要的朋友可以参考下...2017-01-16
  • PHP文件上传主要代码讲解

    复制代码 代码如下:<?php if($_FILES['myfile']['name'] != '') { if($_FILES['myfile']['error'] > 0) { echo "错误状态:" . $_FILES['myfile']['error']; } else { move_uploaded_f...2013-10-04
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    这篇文章主要介绍了使用jQuery.form.jsspringmvc框架实现文件上传功能,非常具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-05-14
  • php 上传文件并生成缩略图代码

    if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
  • jquery插件uploadify实现带进度条的文件批量上传

    这篇文章主要介绍了jquery插件uploadify实现带进度条的文件批量上传,感兴趣的小伙伴们可以参考一下...2015-12-14
  • C#简单实现文件上传功能

    这篇文章主要介绍了C#简单实现文件上传功能,利用MVC+EF+LigerUI 实现的upload上传功能,感兴趣的小伙伴们可以参考一下...2020-06-25