Encapsulation de classes communes
Create un nouveau dossier Inclure pour stocker les classes d'encapsulation de classe commune
1, utilisation de l'encapsulation de la base de données de mysqli
create un nouveau fichier ./include/conn.inc.php
Utilisé pour stocker les constantes pour la connexion à la base de données
<?php define("HOST",'localhost'); define("USER",'root'); define("PWD",'root'); define("DBNAME",'onecms');
Créer un nouveau fichier ./include/mysqli.php
Utilisé pour se connecter à la base de données
<?php
include 'conn.inc.php';
$mysqli= new mysqli(HOST,USER,PWD,DBNAME);
if($mysqli->connect_errno){
die('Erreur de lien de base de données'.$mysqli->connect_error);
}
2, classe de pagination L'opération d'encapsulation
Créer un nouveau fichier ./include/page.class.php
<?php class page{ private $page;//當(dāng)前頁數(shù) private $pagenum;//每一頁顯示的數(shù)量 private $totalnum;//總記錄數(shù) private $totalpage;//總頁數(shù) private $sql; function __construct($sql,$pagenum,$page) { $this->sql=$sql; $this->pagenum=$pagenum; $this->page=$page; } //獲取記錄 function getPage(){ global $mysqli; // 0,6 1 // 6,6 2 // 12,6 3 $result=$mysqli->query($this->sql); $this->totalnum=$result->num_rows; $this->totalpage= ceil($this->totalnum/$this->pagenum);//獲取總頁數(shù) 向上取整 if($this->page<=0) { $this->page=1; } $startnum = ($this->page-1)*$this->pagenum; $this->sql.=" limit $startnum,$this->pagenum"; $result=$mysqli->query($this->sql); return $result; } //獲取總記錄數(shù) // function getTotalNum(){ // global $mysqli; // $result=$mysqli->query($this->sql); // return $result->num_rows; // } function getList(){ //當(dāng)總記錄數(shù)小于等于每頁顯示的記錄 if($this->totalnum<=$this->pagenum) { echo "總記錄數(shù):$this->totalnum"; } //當(dāng)總記錄數(shù)大于每頁顯示的記錄 else{ $prev= $this->page-1; //5頁>=5頁 //當(dāng)前頁面大于等于總頁數(shù) if($this->page>=$this->totalpage){ $next=$this->totalpage; //當(dāng)前頁面等于總頁面數(shù) } //當(dāng)前頁面小于總頁數(shù)1<2 else{ $next= $this->page+1; } echo "<a href='?page=1'>首頁</a><a href='?page= $prev'>上一頁</a>"; //如果總頁數(shù)小于7頁 if($this->totalpage<=7) { //如果當(dāng)前頁面等于循環(huán)中的$i 高亮顯示 for($i=1;$i<=$this->totalpage;$i++) { if($this->page==$i) { echo "<a href='?page=$i' class='on'>$i</a> "; } else{ echo "<a href='?page=$i'>$i</a> "; } } } else{ if($this->page==1 || $this->page==2 || $this->page==3) { $b=1; $m=7; } if($this->page>3) { $b= $this->page-3; $m= $this->page+3; } if($this->page==$this->totalpage || $this->page==$this->totalpage-1 || $this->page==$this->totalpage-2) { $b=$this->totalpage-6; $m= $this->totalpage; } if($this->page>4) { echo "..."; } for($i=$b;$i<=$m;$i++){ if($this->page==$i) { echo "<a href='?page=$i' class='on'>$i</a> "; } else{ echo "<a href='?page=$i'>$i</a> "; } } if($this->page<$this->totalpage-3) { echo "..."; } } echo "<a href='?page=$next'>下一頁</a><a href='?page= $this->totalpage'>末頁</a>"; } } }
3, l'opération d'encapsulation de la classe de téléchargement
Créer un nouveau ./include/fileupload.class Le code du fichier php
est le suivant?:
<?php /** file: fileupload.class.php 文件上傳類FileUpload 本類的實(shí)例對(duì)象用于處理上傳文件,可以上傳一個(gè)文件,也可同時(shí)處理多個(gè)文件上傳 */ class FileUpload { private $path = "uploads"; //上傳文件保存的路徑 private $allowtype = array('jpg','gif','png'); //設(shè)置限制上傳文件的類型 private $maxsize = 1000000; //限制文件上傳大?。ㄗ止?jié)) private $israndname = true; //設(shè)置是否隨機(jī)重命名文件, false不隨機(jī) private $originName; //源文件名 private $tmpFileName; //臨時(shí)文件名 private $fileType; //文件類型(文件后綴) private $fileSize; //文件大小 private $newFileName; //新文件名 private $errorNum = 0; //錯(cuò)誤號(hào) private $errorMess=""; //錯(cuò)誤報(bào)告消息 /** * 用于設(shè)置成員屬性($path, $allowtype,$maxsize, $israndname) * 可以通過連貫操作一次設(shè)置多個(gè)屬性值 *@param string $key 成員屬性名(不區(qū)分大小寫) *@param mixed $val 為成員屬性設(shè)置的值 *@return object 返回自己對(duì)象$this,可以用于連貫操作 */ function set($key, $val){ $key = strtolower($key); if( array_key_exists( $key, get_class_vars(get_class($this) ) ) ){ $this->setOption($key, $val); } return $this; } /** * 調(diào)用該方法上傳文件 * @param string $fileFile 上傳文件的表單名稱 * @return bool 如果上傳成功返回?cái)?shù)true */ function upload($fileField) { $return = true; /* 檢查文件路徑是滯合法 */ if( !$this->checkFilePath() ) { $this->errorMess = $this->getError(); return false; } /* 將文件上傳的信息取出賦給變量 */ $name = $_FILES[$fileField]['name']; $tmp_name = $_FILES[$fileField]['tmp_name']; $size = $_FILES[$fileField]['size']; $error = $_FILES[$fileField]['error']; /* 如果是多個(gè)文件上傳則$file["name"]會(huì)是一個(gè)數(shù)組 */ if(is_Array($name)){ $errors=array(); /*多個(gè)文件上傳則循環(huán)處理 , 這個(gè)循環(huán)只有檢查上傳文件的作用,并沒有真正上傳 */ for($i = 0; $i < count($name); $i++){ /*設(shè)置文件信息 */ if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) { if(!$this->checkFileSize() || !$this->checkFileType()){ $errors[] = $this->getError(); $return=false; } }else{ $errors[] = $this->getError(); $return=false; } /* 如果有問題,則重新初使化屬性 */ if(!$return) $this->setFiles(); } if($return){ /* 存放所有上傳后文件名的變量數(shù)組 */ $fileNames = array(); /* 如果上傳的多個(gè)文件都是合法的,則通過銷魂循環(huán)向服務(wù)器上傳文件 */ for($i = 0; $i < count($name); $i++){ if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) { $this->setNewFileName(); if(!$this->copyFile()){ $errors[] = $this->getError(); $return = false; } $fileNames[] = $this->newFileName; } } $this->newFileName = $fileNames; } $this->errorMess = $errors; return $return; /*上傳單個(gè)文件處理方法*/ } else { /* 設(shè)置文件信息 */ if($this->setFiles($name,$tmp_name,$size,$error)) { /* 上傳之前先檢查一下大小和類型 */ if($this->checkFileSize() && $this->checkFileType()){ /* 為上傳文件設(shè)置新文件名 */ $this->setNewFileName(); /* 上傳文件 返回0為成功, 小于0都為錯(cuò)誤 */ if($this->copyFile()){ return true; }else{ $return=false; } }else{ $return=false; } } else { $return=false; } //如果$return為false, 則出錯(cuò),將錯(cuò)誤信息保存在屬性errorMess中 if(!$return) $this->errorMess=$this->getError(); return $return; } } /** * 獲取上傳后的文件名稱 * @param void 沒有參數(shù) * @return string 上傳后,新文件的名稱, 如果是多文件上傳返回?cái)?shù)組 */ public function getFileName(){ return $this->path.'/'.$this->newFileName; } /** * 上傳失敗后,調(diào)用該方法則返回,上傳出錯(cuò)信息 * @param void 沒有參數(shù) * @return string 返回上傳文件出錯(cuò)的信息報(bào)告,如果是多文件上傳返回?cái)?shù)組 */ public function getErrorMsg(){ return $this->errorMess; } /* 設(shè)置上傳出錯(cuò)信息 */ private function getError() { $str = "上傳文件<font color='red'>{$this->originName}</font>時(shí)出錯(cuò) : "; switch ($this->errorNum) { case 4: $str .= "沒有文件被上傳"; break; case 3: $str .= "文件只有部分被上傳"; break; case 2: $str .= "上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項(xiàng)指定的值"; break; case 1: $str .= "上傳的文件超過了php.ini中upload_max_filesize選項(xiàng)限制的值"; break; case -1: $str .= "未允許類型"; break; case -2: $str .= "文件過大,上傳的文件不能超過{$this->maxsize}個(gè)字節(jié)"; break; case -3: $str .= "上傳失敗"; break; case -4: $str .= "建立存放上傳文件目錄失敗,請(qǐng)重新指定上傳目錄"; break; case -5: $str .= "必須指定上傳文件的路徑"; break; default: $str .= "未知錯(cuò)誤"; } return $str.'<br>'; } /* 設(shè)置和$_FILES有關(guān)的內(nèi)容 */ private function setFiles($name="", $tmp_name="", $size=0, $error=0) { $this->setOption('errorNum', $error); if($error) return false; $this->setOption('originName', $name); $this->setOption('tmpFileName',$tmp_name); $aryStr = explode(".", $name); $this->setOption('fileType', strtolower($aryStr[count($aryStr)-1])); $this->setOption('fileSize', $size); return true; } /* 為單個(gè)成員屬性設(shè)置值 */ private function setOption($key, $val) { $this->$key = $val; } /* 設(shè)置上傳后的文件名稱 */ private function setNewFileName() { if ($this->israndname) { $this->setOption('newFileName', $this->proRandName()); } else{ $this->setOption('newFileName', $this->originName); } } /* 檢查上傳的文件是否是合法的類型 */ private function checkFileType() { if (in_array(strtolower($this->fileType), $this->allowtype)) { return true; }else { $this->setOption('errorNum', -1); return false; } } /* 檢查上傳的文件是否是允許的大小 */ private function checkFileSize() { if ($this->fileSize > $this->maxsize) { $this->setOption('errorNum', -2); return false; }else{ return true; } } /* 檢查是否有存放上傳文件的目錄 */ private function checkFilePath() { if(empty($this->path)){ $this->setOption('errorNum', -5); return false; } if (!file_exists($this->path) || !is_writable($this->path)) { if (!@mkdir($this->path, 0755)) { $this->setOption('errorNum', -4); return false; } } return true; } /* 設(shè)置隨機(jī)文件名 */ private function proRandName() { $fileName = date('YmdHis')."_".rand(100,999); return $fileName.'.'.$this->fileType; } /* 復(fù)制上傳文件到指定的位置 */ private function copyFile() { if(!$this->errorNum) { $path = rtrim($this->path, '/').'/'; $path .= $this->newFileName; if (@move_uploaded_file($this->tmpFileName, $path)) { return true; }else{ $this->setOption('errorNum', -3); return false; } } else { return false; } } }