Server : Apache
System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/saimikebio.com/mobile/include/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/saimikebio.com/mobile/include/cls_image_bee.php
<?php



/**

 * ECSHOP 后台对上传文件的处理类(实现图片上传,图片缩小, 增加水印)

 * 需要定义以下常量

 *  define('ERR_INVALID_IMAGE',             1);

 *  define('ERR_NO_GD',                     2);

 *  define('ERR_IMAGE_NOT_EXISTS',          3);

 *  define('ERR_DIRECTORY_READONLY',        4);

 *  define('ERR_UPLOAD_FAILURE',            5);

 *  define('ERR_INVALID_PARAM',             6);

 *  define('ERR_INVALID_IMAGE_TYPE',        7);

 *  define('ROOT_PATH',                     '网站根目录')

 *

 * ============================================================================

 * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。

 * 网站地址: http://www.ecshop.com;

 * ----------------------------------------------------------------------------

 * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和

 * 使用;不允许对程序代码以任何形式任何目的的再发布。

 * ============================================================================

 * $Author: liubo $

 * $Id: cls_image.php 17217 2011-01-19 06:29:08Z liubo $

*/



if (!defined('IN_ECTOUCH'))

{

    die('Hacking attempt');

}



class cls_image

{

    var $error_no    = 0;

    var $error_msg   = '';

    var $images_dir  = IMAGE_DIR;

    var $data_dir    = DATA_DIR;

    var $bgcolor     = '';

    var $type_maping = array(1 => 'image/gif', 2 => 'image/jpeg', 3 => 'image/png');



    function __construct($bgcolor='')

    {

        $this->cls_image($bgcolor);

    }



    function cls_image($bgcolor='')

    {

        if ($bgcolor)

        {

            $this->bgcolor = $bgcolor;

        }

        else

        {

            $this->bgcolor = "#FFFFFF";

        }

    }



    /**

     * 图片上传的处理函数

     *

     * @access      public

     * @param       array       upload       包含上传的图片文件信息的数组

     * @param       array       dir          文件要上传在$this->data_dir下的目录名。如果为空图片放在则在$this->images_dir下以当月命名的目录下

     * @param       array       img_name     上传图片名称,为空则随机生成

     * @return      mix         如果成功则返回文件名,否则返回false

     */

    function upload_image($upload, $dir = '', $img_name = '')

    {

        /* 没有指定目录默认为根目录images */

        if (empty($dir))

        {

            /* 创建当月目录 */

            $dir = date('Ym');

            $dir = WEB_PATH . $this->images_dir . '/' . $dir . '/';

        }

        else

        {

            /* 创建目录 */

            $dir = WEB_PATH . $this->data_dir . '/' . $dir . '/';

            if ($img_name)

            {

                $img_name = $dir . $img_name; // 



				//将图片定位到正确地址

            }

        }



        /* 如果目标目录不存在,则创建它 */

        if (!file_exists($dir))

        {

            if (!make_dir($dir))

            {

                /* 创建目录失败 */

                $this->error_msg = sprintf($GLOBALS['_LANG']['directory_readonly'], $dir);

                $this->error_no  = ERR_DIRECTORY_READONLY;



                return false;

            }

        }



        if (empty($img_name))

        {

            $img_name = $this->unique_name($dir);

            $img_name = $dir . $img_name . $this->get_filetype($upload['name']);

        }



        if (!$this->check_img_type($upload['type']))

        {

            $this->error_msg = $GLOBALS['_LANG']['invalid_upload_image_type'];

            $this->error_no  =  ERR_INVALID_IMAGE_TYPE;

            return false;

        }



        /* 允许上传的文件类型 */

        $allow_file_types = '|GIF|JPG|JEPG|PNG|BMP|SWF|';

        if (!check_file_type($upload['tmp_name'], $img_name, $allow_file_types))

        {

            $this->error_msg = $GLOBALS['_LANG']['invalid_upload_image_type'];

            $this->error_no  =  ERR_INVALID_IMAGE_TYPE;

            return false;

        }



        if ($this->move_file($upload, $img_name))

        {

            return str_replace(WEB_PATH, '', $img_name);

        }

        else

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['upload_failure'], $upload['name']);

            $this->error_no  = ERR_UPLOAD_FAILURE;



            return false;

        }

    }



    /**

     * 创建图片的缩略图

     *

     * @access  public

     * @param   string      $img    原始图片的路径

     * @param   int         $thumb_width  缩略图宽度

     * @param   int         $thumb_height 缩略图高度

     * @param   strint      $path         指定生成图片的目录名

     * @return  mix         如果成功返回缩略图的路径,失败则返回false

     */

    function make_thumb($img, $thumb_width = 0, $thumb_height = 0, $path = '', $bgcolor='')

    {

         $gd = $this->gd_version(); //获取 GD 版本。0 表示没有 GD 库,1 表示 GD 1.x,2 表示 GD 2.x

         if ($gd == 0)

         {

             $this->error_msg = $GLOBALS['_LANG']['missing_gd'];

             return false;

         }



        /* 检查缩略图宽度和高度是否合法 */

        if ($thumb_width == 0 && $thumb_height == 0)

        {

            return str_replace(WEB_PATH, '', str_replace('\\', '/', realpath($img)));

        }



        /* 检查原始文件是否存在及获得原始文件的信息 */

        $org_info = @getimagesize($img);

        if (!$org_info)

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['missing_orgin_image'], $img);

            $this->error_no  = ERR_IMAGE_NOT_EXISTS;



            return false;

        }



        if (!$this->check_img_function($org_info[2]))

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['nonsupport_type'], $this->type_maping[$org_info[2]]);

            $this->error_no  =  ERR_NO_GD;



            return false;

        }



        $img_org = $this->img_resource($img, $org_info[2]);



        /* 原始图片以及缩略图的尺寸比例 */

        $scale_org      = $org_info[0] / $org_info[1];

        /* 处理只有缩略图宽和高有一个为0的情况,这时背景和缩略图一样大 */

        if ($thumb_width == 0)

        {

            $thumb_width = $thumb_height * $scale_org;

        }

        if ($thumb_height == 0)

        {

            $thumb_height = $thumb_width / $scale_org;

        }



        /* 创建缩略图的标志符 */

        if ($gd == 2)

        {

            $img_thumb  = imagecreatetruecolor($thumb_width, $thumb_height);

        }

        else

        {

            $img_thumb  = imagecreate($thumb_width, $thumb_height);

        }



        /* 背景颜色 */

        if (empty($bgcolor))

        {

            $bgcolor = $this->bgcolor;

        }

        $bgcolor = trim($bgcolor,"#");

        sscanf($bgcolor, "%2x%2x%2x", $red, $green, $blue);

        $clr = imagecolorallocate($img_thumb, $red, $green, $blue);

        imagefilledrectangle($img_thumb, 0, 0, $thumb_width, $thumb_height, $clr);



        if ($org_info[0] / $thumb_width > $org_info[1] / $thumb_height)

        {

            $lessen_width  = $thumb_width;

            $lessen_height  = $thumb_width / $scale_org;

        }

        else

        {

            /* 原始图片比较高,则以高度为准 */

            $lessen_width  = $thumb_height * $scale_org;

            $lessen_height = $thumb_height;

        }



        $dst_x = ($thumb_width  - $lessen_width)  / 2;

        $dst_y = ($thumb_height - $lessen_height) / 2;



        /* 将原始图片进行缩放处理 */

        if ($gd == 2)

        {

            imagecopyresampled($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]);

        }

        else

        {

            imagecopyresized($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]);

        }



        /* 创建当月目录 */

        if (empty($path))

        {

            $dir = WEB_PATH . $this->images_dir . '/' . date('Ym').'/';

        }

        else

        {

            $dir = $path;

        }





        /* 如果目标目录不存在,则创建它 */

        if (!file_exists($dir))

        {

            if (!make_dir($dir))

            {

                /* 创建目录失败 */

                $this->error_msg  = sprintf($GLOBALS['_LANG']['directory_readonly'], $dir);

                $this->error_no   = ERR_DIRECTORY_READONLY;

                return false;

            }

        }



        /* 如果文件名为空,生成不重名随机文件名 */

        $filename = $this->unique_name($dir);



        /* 生成文件 */

        if (function_exists('imagejpeg'))

        {

            $filename .= '.jpg';

            imagejpeg($img_thumb, $dir . $filename);

        }

        elseif (function_exists('imagegif'))

        {

            $filename .= '.gif';

            imagegif($img_thumb, $dir . $filename);

        }

        elseif (function_exists('imagepng'))

        {

            $filename .= '.png';

            imagepng($img_thumb, $dir . $filename);

        }

        else

        {

            $this->error_msg = $GLOBALS['_LANG']['creating_failure'];

            $this->error_no  =  ERR_NO_GD;



            return false;

        }



        imagedestroy($img_thumb);

        imagedestroy($img_org);



        //确认文件是否生成

        if (file_exists($dir . $filename))

        {

            return str_replace(WEB_PATH, '', $dir) . $filename;

        }

        else

        {

            $this->error_msg = $GLOBALS['_LANG']['writting_failure'];

            $this->error_no   = ERR_DIRECTORY_READONLY;



            return false;

        }

    }



    /**

     * 为图片增加水印

     *

     * @access      public

     * @param       string      filename            原始图片文件名,包含完整路径

     * @param       string      target_file         需要加水印的图片文件名,包含完整路径。如果为空则覆盖源文件

     * @param       string      $watermark          水印完整路径

     * @param       int         $watermark_place    水印位置代码

     * @return      mix         如果成功则返回文件路径,否则返回false

     */

    function add_watermark($filename, $target_file='', $watermark='', $watermark_place='', $watermark_alpha = 0.65)

    {

        // 是否安装了GD

        $gd = $this->gd_version();

        if ($gd == 0)

        {

            $this->error_msg = $GLOBALS['_LANG']['missing_gd'];

            $this->error_no  = ERR_NO_GD;



            return false;

        }



        // 文件是否存在

        if ((!file_exists($filename)) || (!is_file($filename)))

        {

            $this->error_msg  = sprintf($GLOBALS['_LANG']['missing_orgin_image'], $filename);

            $this->error_no   = ERR_IMAGE_NOT_EXISTS;



            return false;

        }



        /* 如果水印的位置为0,则返回原图 */

        if ($watermark_place == 0 || empty($watermark))

        {

            return str_replace(WEB_PATH, '', str_replace('\\', '/', realpath($filename)));

        }



        if (!$this->validate_image($watermark))

        {

            /* 已经记录了错误信息 */

            return false;

        }



        // 获得水印文件以及源文件的信息

        $watermark_info     = @getimagesize($watermark);

        $watermark_handle   = $this->img_resource($watermark, $watermark_info[2]);



        if (!$watermark_handle)

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['create_watermark_res'], $this->type_maping[$watermark_info[2]]);

            $this->error_no  = ERR_INVALID_IMAGE;



            return false;

        }



        // 根据文件类型获得原始图片的操作句柄

        $source_info    = @getimagesize($filename);

        $source_handle  = $this->img_resource($filename, $source_info[2]);

        if (!$source_handle)

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['create_origin_image_res'], $this->type_maping[$source_info[2]]);

            $this->error_no = ERR_INVALID_IMAGE;



            return false;

        }



        // 根据系统设置获得水印的位置

        switch ($watermark_place)

        {

            case '1':

                $x = 0;

                $y = 0;

                break;

            case '2':

                $x = $source_info[0] - $watermark_info[0];

                $y = 0;

                break;

            case '4':

                $x = 0;

                $y = $source_info[1] - $watermark_info[1];

                break;

            case '5':

                $x = $source_info[0] - $watermark_info[0];

                $y = $source_info[1] - $watermark_info[1];

                break;

            default:

                $x = $source_info[0]/2 - $watermark_info[0]/2;

                $y = $source_info[1]/2 - $watermark_info[1]/2;

        }



        if (strpos(strtolower($watermark_info['mime']), 'png') !== false)

        {

            imageAlphaBlending($watermark_handle, true);

            imagecopy($source_handle, $watermark_handle, $x, $y, 0, 0,$watermark_info[0], $watermark_info[1]);

        }

        else

        {

            imagecopymerge($source_handle, $watermark_handle, $x, $y, 0, 0,$watermark_info[0], $watermark_info[1], $watermark_alpha);

        }

        $target = empty($target_file) ? $filename : $target_file;



        switch ($source_info[2] )

        {

            case 'image/gif':

            case 1:

                imagegif($source_handle,  $target);

                break;



            case 'image/pjpeg':

            case 'image/jpeg':

            case 2:

                imagejpeg($source_handle, $target);

                break;



            case 'image/x-png':

            case 'image/png':

            case 3:

                imagepng($source_handle,  $target);

                break;



            default:

                $this->error_msg = $GLOBALS['_LANG']['creating_failure'];

                $this->error_no = ERR_NO_GD;



                return false;

        }



        imagedestroy($source_handle);



        $path = realpath($target);

        if ($path)

        {

            return str_replace(WEB_PATH, '', str_replace('\\', '/', $path));

        }

        else

        {

            $this->error_msg = $GLOBALS['_LANG']['writting_failure'];

            $this->error_no  = ERR_DIRECTORY_READONLY;



            return false;

        }

    }



    /**

     *  检查水印图片是否合法

     *

     * @access  public

     * @param   string      $path       图片路径

     *

     * @return boolen

     */

    function validate_image($path)

    {

        if (empty($path))

        {

            $this->error_msg = $GLOBALS['_LANG']['empty_watermark'];

            $this->error_no  = ERR_INVALID_PARAM;



            return false;

        }



        /* 文件是否存在 */

        if (!file_exists($path))

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['missing_watermark'], $path);

            $this->error_no = ERR_IMAGE_NOT_EXISTS;

            return false;

        }



        // 获得文件以及源文件的信息

        $image_info     = @getimagesize($path);



        if (!$image_info)

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['invalid_image_type'], $path);

            $this->error_no = ERR_INVALID_IMAGE;

            return false;

        }



        /* 检查处理函数是否存在 */

        if (!$this->check_img_function($image_info[2]))

        {

            $this->error_msg = sprintf($GLOBALS['_LANG']['nonsupport_type'], $this->type_maping[$image_info[2]]);

            $this->error_no  =  ERR_NO_GD;

            return false;

        }



        return true;

    }



    /**

     * 返回错误信息

     *

     * @return  string   错误信息

     */

    function error_msg()

    {

        return $this->error_msg;

    }



    /*------------------------------------------------------ */

    //-- 工具函数

    /*------------------------------------------------------ */



    /**

     * 检查图片类型

     * @param   string  $img_type   图片类型

     * @return  bool

     */

    function check_img_type($img_type)

    {

        return $img_type == 'image/pjpeg' ||

               $img_type == 'image/x-png' ||

               $img_type == 'image/png'   ||

               $img_type == 'image/gif'   ||

               $img_type == 'image/jpeg';

    }



    /**

     * 检查图片处理能力

     *

     * @access  public

     * @param   string  $img_type   图片类型

     * @return  void

     */

    function check_img_function($img_type)

    {

        switch ($img_type)

        {

            case 'image/gif':

            case 1:



                if (PHP_VERSION >= '4.3')

                {

                    return function_exists('imagecreatefromgif');

                }

                else

                {

                    return (imagetypes() & IMG_GIF) > 0;

                }

            break;



            case 'image/pjpeg':

            case 'image/jpeg':

            case 2:

                if (PHP_VERSION >= '4.3')

                {

                    return function_exists('imagecreatefromjpeg');

                }

                else

                {

                    return (imagetypes() & IMG_JPG) > 0;

                }

            break;



            case 'image/x-png':

            case 'image/png':

            case 3:

                if (PHP_VERSION >= '4.3')

                {

                     return function_exists('imagecreatefrompng');

                }

                else

                {

                    return (imagetypes() & IMG_PNG) > 0;

                }

            break;



            default:

                return false;

        }

    }



    /**

     * 生成随机的数字串

     *

     * @author: weber liu

     * @return string

     */

    static function random_filename()

    {

        $str = '';

        for($i = 0; $i < 9; $i++)

        {

            $str .= mt_rand(0, 9);

        }



        return gmtime() . $str;

    }



    /**

     *  生成指定目录不重名的文件名

     *

     * @access  public

     * @param   string      $dir        要检查是否有同名文件的目录

     *

     * @return  string      文件名

     */

    static function unique_name($dir)

    {

        $filename = '';

        while (empty($filename))

        {

            $filename = cls_image::random_filename();

            if (file_exists($dir . $filename . '.jpg') || file_exists($dir . $filename . '.gif') || file_exists($dir . $filename . '.png'))

            {

                $filename = '';

            }

        }



        return $filename;

    }



    /**

     *  返回文件后缀名,如‘.php’

     *

     * @access  public

     * @param

     *

     * @return  string      文件后缀名

     */

    static function get_filetype($path)

    {

        $pos = strrpos($path, '.');

        if ($pos !== false)

        {

            return substr($path, $pos);

        }

        else

        {

            return '';

        }

    }



     /**

     * 根据来源文件的文件类型创建一个图像操作的标识符

     *

     * @access  public

     * @param   string      $img_file   图片文件的路径

     * @param   string      $mime_type  图片文件的文件类型

     * @return  resource    如果成功则返回图像操作标志符,反之则返回错误代码

     */

    function img_resource($img_file, $mime_type)

    {

        switch ($mime_type)

        {

            case 1:

            case 'image/gif':

                $res = imagecreatefromgif($img_file);

                break;



            case 2:

            case 'image/pjpeg':

            case 'image/jpeg':

                $res = imagecreatefromjpeg($img_file);

                break;



            case 3:

            case 'image/x-png':

            case 'image/png':

                $res = imagecreatefrompng($img_file);

                break;



            default:

                return false;

        }



        return $res;

    }



    /**

     * 获得服务器上的 GD 版本

     *

     * @access      public

     * @return      int         可能的值为0,1,2

     */

    static function gd_version()

    {

        static $version = -1;



        if ($version >= 0)

        {

            return $version;

        }



        if (!extension_loaded('gd'))

        {

            $version = 0;

        }

        else

        {

            // 尝试使用gd_info函数

            if (PHP_VERSION >= '4.3')

            {

                if (function_exists('gd_info'))

                {

                    $ver_info = gd_info();

                    preg_match('/\d/', $ver_info['GD Version'], $match);

                    $version = $match[0];

                }

                else

                {

                    if (function_exists('imagecreatetruecolor'))

                    {

                        $version = 2;

                    }

                    elseif (function_exists('imagecreate'))

                    {

                        $version = 1;

                    }

                }

            }

            else

            {

                if (preg_match('/phpinfo/', ini_get('disable_functions')))

                {

                    /* 如果phpinfo被禁用,无法确定gd版本 */

                    $version = 1;

                }

                else

                {

                  // 使用phpinfo函数

                   ob_start();

                   phpinfo(8);

                   $info = ob_get_contents();

                   ob_end_clean();

                   $info = stristr($info, 'gd version');

                   preg_match('/\d/', $info, $match);

                   $version = $match[0];

                }

             }

        }



        return $version;

     }



    /**

     *

     *

     * @access  public

     * @param

     *

     * @return void

     */

    function move_file($upload, $target)

    {

        if (isset($upload['error']) && $upload['error'] > 0)

        {

            return false;

        }



        if (!move_upload_file($upload['tmp_name'], $target))

        {

            return false;

        }



        return true;

    }

}



?>