欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Yii框架實現圖片上傳的方法詳解

 更新時間:2017年05月20日 11:23:07   作者:molaifeng  
這篇文章主要介紹了Yii框架實現圖片上傳的方法,結合實例形式較為詳細的分析了Yii框架實現圖片上傳功能的具體步驟與相關操作技巧,需要的朋友可以參考下

本文實例講述了Yii框架實現圖片上傳的方法。分享給大家供大家參考,具體如下:

今天在網上看了下有關圖片上傳的教程,歷經挫折才調試好,現在把相關代碼及其說明貼出來,以供初次使用的朋友們參考。

Model:

<?php
class Upload extends CActiveRecord {
  public $image;
  public static function model($className = __CLASS__) {
    return $className;
  }
  public function tableName() {
    return '{{resource}}';
  }
  public function rules() {
    return array(
      array('image', 'file', 'types'=>'jpg, gif, png')
    );
  }
}

注:resource為數據表,表前綴可在main.php內設置,相信朋友們在看到文件上傳時應該熟悉了main.php位置在哪及運作機制。

Controller:

<?php
class UploadController extends Controller {
  public function actionIndex() {
    $model=new Upload;
    if(isset($_POST['Upload'])) {
      $model->image=CUploadedFile::getInstance($model,'image');
      $ext = $model->image->getExtensionName();
      $fileName = uniqid() . '.' . $ext;
      $model->image->saveAs('assets/' . $fileName);
    }
    $this->renderPartial('index', array('model'=>$model));
  }
}

注:saveAs里面是存放圖片上傳后的地址,追蹤下代碼可以發(fā)現,該參數是move_uploaded_file函數的第二個參數,一定得是文件名。

View:

<meta charset="utf-8">
<?php echo CHtml::form(SITE_URL . 'admin/upload/index','post',array('enctype'=>'multipart/form-data')); ?>
<?php echo CHtml::activeFileField($model, 'image'); ?>
<?php echo CHtml::submitButton('提交');?>
<?php echo CHtml::endForm(); ?>

注:上面的SITE_URL為項目定義的常量,也就是項目的網址

相信經過上述步驟,朋友們應該可以上傳成功圖片,而且在項目下的assets目錄下找到上傳的圖片。因為發(fā)現yii沒有縮略圖的方法,于是把thinkphp縮略圖的方法整合了進來,把下面代碼保存為Image.php放在項目下的protected/extensions目錄下

<?php
class Image extends CController {
  /**
   +----------------------------------------------------------
   * 取得圖像信息
   *
   +----------------------------------------------------------
   * @static
   * @access public
   +----------------------------------------------------------
   * @param string $image 圖像文件名
   +----------------------------------------------------------
   * @return mixed
   +----------------------------------------------------------
   */
  static function getImageInfo($img) {
    $imageInfo = getimagesize($img);
    if ($imageInfo !== false) {
      $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1));
      $imageSize = filesize($img);
      $info = array(
        "width" => $imageInfo[0],
        "height" => $imageInfo[1],
        "type" => $imageType,
        "size" => $imageSize,
        "mime" => $imageInfo['mime']
      );
      return $info;
    } else {
      return false;
    }
  }
  /**
   +----------------------------------------------------------
   * 生成縮略圖
   +----------------------------------------------------------
   * @static
   * @access public
   +----------------------------------------------------------
   * @param string $image 原圖
   * @param string $type 圖像格式
   * @param string $thumbname 縮略圖文件名
   * @param string $maxWidth 寬度
   * @param string $maxHeight 高度
   * @param string $position 縮略圖保存目錄
   * @param boolean $interlace 啟用隔行掃描
   +----------------------------------------------------------
   * @return void
   +----------------------------------------------------------
   */
  static function thumb($image, $thumbname, $type='', $maxWidth=200, $maxHeight=50, $interlace=true) {
    // 獲取原圖信息
    $info = Image::getImageInfo($image);
    if ($info !== false) {
      $srcWidth = $info['width'];
      $srcHeight = $info['height'];
      $type = empty($type) ? $info['type'] : $type;
      $type = strtolower($type);
      $interlace = $interlace ? 1 : 0;
      unset($info);
      $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 計算縮放比例
      if ($scale >= 1) {
        // 超過原圖大小不再縮略
        $width = $srcWidth;
        $height = $srcHeight;
      } else {
        // 縮略圖尺寸
        $width = (int) ($srcWidth * $scale);
        $height = (int) ($srcHeight * $scale);
      }
      // 載入原圖
      $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type);
      if(!function_exists($createFun)) {
        return false;
      }
      $srcImg = $createFun($image);
      //創(chuàng)建縮略圖
      if ($type != 'gif' && function_exists('imagecreatetruecolor'))
        $thumbImg = imagecreatetruecolor($width, $height);
      else
        $thumbImg = imagecreate($width, $height);
       //png和gif的透明處理 by luofei614
      if('png'==$type){
        imagealphablending($thumbImg, false);//取消默認的混色模式(為解決陰影為綠色的問題)
        imagesavealpha($thumbImg,true);//設定保存完整的 alpha 通道信息(為解決陰影為綠色的問題)
      }elseif('gif'==$type){
        $trnprt_indx = imagecolortransparent($srcImg);
         if ($trnprt_indx >= 0) {
            //its transparent
            $trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx);
            $trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
            imagefill($thumbImg, 0, 0, $trnprt_indx);
            imagecolortransparent($thumbImg, $trnprt_indx);
       }
      }
      // 復制圖片
      if (function_exists("ImageCopyResampled"))
        imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
      else
        imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);
      // 對jpeg圖形設置隔行掃描
      if ('jpg' == $type || 'jpeg' == $type)
        imageinterlace($thumbImg, $interlace);
      // 生成圖片
      $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type);
      $imageFun($thumbImg, $thumbname);
      imagedestroy($thumbImg);
      imagedestroy($srcImg);
      return $thumbname;
    }
    return false;
  }
}
?>

再在項目下的protected/config/main.php中import字段加上

// autoloading model and component classes
  'import'=>array(
    'application.models.*',
    'application.components.*',
    'application.extensions.*',  #加上此行,意思為自動載入
  ),

再上面的Controller加上

public function actionIndex() {
    $model=new Upload;
    if(isset($_POST['Upload'])) {
      $model->image=CUploadedFile::getInstance($model,'image');
      $ext = $model->image->getExtensionName();
      $fileName = uniqid() . '.' . $ext;
      $model->image->saveAs('assets/' . $fileName);
      // 生成縮略圖
      Image::thumb('assets/' . $fileName, 'assets/' . uniqid() . '.' . $ext);
    }
    $this->renderPartial('index', array('model'=>$model));
}

這次就完整了。

更多關于Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優(yōu)秀開發(fā)框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

相關文章

  • qq登錄,新浪微博登錄接口申請過程中遇到的問題

    qq登錄,新浪微博登錄接口申請過程中遇到的問題

    接口申請下來了,開發(fā)很容易的,參數傳到就可以了。以前就做過這方面的開發(fā),但是申請還是第一次,網上有關這方面的東東不是很多,所以記錄一下申請過程。
    2014-07-07
  • 注釋PHP和html混合代碼的小技巧(分享)

    注釋PHP和html混合代碼的小技巧(分享)

    下面小編就為大家?guī)硪黄⑨孭HP和html混合代碼的小技巧(分享)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • PHP讓網站移動訪問更加友好方法

    PHP讓網站移動訪問更加友好方法

    在本文里我們給大家整理了關于PHP讓網站移動訪問更加友好的相關實例代碼以及相關知識點,有需要的朋友們學習下。
    2019-02-02
  • PHP哈希表實現算法原理解析

    PHP哈希表實現算法原理解析

    這篇文章主要介紹了PHP哈希表實現算法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • PHP CURL采集百度搜尋結果圖片不顯示問題的解決方法

    PHP CURL采集百度搜尋結果圖片不顯示問題的解決方法

    這篇文章主要介紹了PHP CURL采集百度搜尋結果圖片不顯示問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • ThinkPHP實現非標準名稱數據表快速創(chuàng)建模型的方法

    ThinkPHP實現非標準名稱數據表快速創(chuàng)建模型的方法

    這篇文章主要介紹了ThinkPHP實現非標準名稱數據表快速創(chuàng)建模型的方法,對于采用ThinkPHP操作非標準名稱數據表的情況非常實用,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • php初學者教程之圖片縮放和裁剪

    php初學者教程之圖片縮放和裁剪

    這篇文章主要給大家介紹了關于php圖片縮放和裁剪的相關資料,主要利用的是imagecopyresampled(),文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • 在 PHP 和 Laravel 中使用 Traits的方法

    在 PHP 和 Laravel 中使用 Traits的方法

    Trait 是單繼承語言(如 PHP )中的一種代碼復用機制。這篇文章主要介紹了在 PHP 和 Laravel 中使用 Traits的方法,需要的朋友可以參考下
    2019-11-11
  • 免費的ip數據庫淘寶IP地址庫簡介和PHP調用實例

    免費的ip數據庫淘寶IP地址庫簡介和PHP調用實例

    淘寶ip地址庫提供免費的ip信息查詢,可查詢ip所在國家、區(qū)域、省份、城市及運營商等信息。不需要認證不需要注冊,唯一的小缺陷就是限制美妙查詢頻率不能高于10次。
    2014-04-04
  • php編寫的一個E-mail驗證類

    php編寫的一個E-mail驗證類

    這篇文章主要介紹了php編寫的一個E-mail驗證類的用法,非常的簡單實用,需要的小伙伴參考下,可以直接拿走使用。
    2015-03-03

最新評論