首頁 > 後端開發 > php教程 > ThinkPHP的一些類別與方法

ThinkPHP的一些類別與方法

巴扎黑
發布: 2016-11-22 16:13:42
原創
1284 人瀏覽過

Thinkphp 代碼

取得客戶端IP位址

 

取得客戶端IP位址

$type表示回傳類型0 回傳IP位址1 回傳IPV4位址數字

function getclis_punction( =  $type ? 1 : 0;

    static $ip  =   NULL;

    if ($ip !== NULL) return $ip[$type];

)

  )[ {

        $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

   含 $.      if(false !== $pos) unset($ arr[$pos]);

        $ip     =   trim($arr[0]);

    }elseif (isset($_SERVER['HTTP_CLIENT__ip']) { VER['HTTP_CLIENT_IP'] ;

    }elseif (isset($_SERVER['REMOTE_ADDR'])) {

        $ip     =   $_SERVER['REMOTE_ADDRDR'];

    $long = ip2long($ ip);

    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);

    return $ip[$type];

}

    return $ip[$type];檔案位元組大小格式化

 

位元組格式化把位元組數格式為B K M G T 所描述的大小

function byte_format($size, $dec=2){

    $a = "array("f"B" KB", "MB", "GB", "TB", "PB");

    $pos = 0;

    while ($size >= 1024) {

   $pos++ ;

    }

    return round($size,$dec)." ".$a[$pos];

}

function getget_size(Bs,$u

1){  

    $us = array('B'=>'K','K'=>'M','M'=>'G','G'=>'T');  

    return (($u!=='B')&&(!isset($us[$u]))||($s

}  

 

 

顯示彩虹字串

用於顯示

 

顯示彩虹字串

用來顯示

function color_txt($str){

    $len        = mb_strlen($str);

    $colorTxt   = ''>;        $ colorTxt .=  ''.mb_substr($str,$i,1,'utf-8').'';

    }

    return $colorTxt;

}

function rand_color(){

    return '#'.sprintf("%02X",mt_rand(0,255)).sprintf(Up. "%02X",mt_rand(0,255));

}

 

 

讓PHP更快的提供文件下載

一般來說, 我們可以通過直接讓URLoot讓PHP更快的提供文件下載

一般來說, 我們可以通過直接讓URLoot引導使用者下載檔案.

 

  但是, 這樣做, 就沒辦法做一些統計, 權限檢查, 等等的工作. 於是, 很多時候, 我們採用讓PHP來做轉發, 為用戶提供文件下載.

  $file = "/tmp/dummy.tar.gz";

  header("Content-type: application/octet-stream");

 。. ' . basename($file) . '"');

  header("Content-Length: ". filesize($file));

  readfile($file);

  readfile($file);

如果檔案是中文名的話, 有的使用者可能下載後的檔案名稱是亂碼.

 

  於是, 我們做一下修改(參考: :

  攙 中文名 = "/mp/$file. tar.gz";

  $filename = basename($file);

  header("Content-type: application/octet-stream");

  /〜/處理檔名＀/< HTTP_USER_AGENT"];

  $encoded_filename = urlencode($filename);

  $encoded_filename = str_replace("+", "%20", $enencoded_filename); ) {

  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');

  } else if (preg_match("//Firefox", $c/Fi)" Content-Disposition: attachment; filename*="utf8''" . $filename . '"');

  } else {

  header('Content-Disposition: attachment; filename="' . $filename . '"');

  }

『 '"');

  header("Content-Length: ". filesize($file));

  readfile($file);

 

恩, 現在還有一個問題就是readfile, 雖然PHP的readfile嘗試實現的盡量高效, 不佔用PHP本身的內存, 但是實際上它還是需要採用MMAP(如果支持), 或者是一個固定的buffer去循環讀取文件, 直接輸出.

  輸出的時候, 如果是Apache + PHP mod, 那麼還需要發送到Apache的輸出緩衝區. 最後才發送給用戶. 而對於Nginx + fpm如果他們分開部署的話, 那還會帶來額外的網絡IO .

 

  那麼, 能不能不經過PHP這層, 直接讓Webserver直接把文件發送給用戶呢?

 

  今天

  我們可以使用Apache的module mod_xsendfile, 讓Apache直接發送這個檔案給使用者:

 

  $file = "/tartmp/name.?php

  $file = "/tartmp/name.?php

  $file = "/tartmp/name.Sm.name.Sname.Sname.Sname.Sconnname.$base. );

  header("Content-type: application/octet-stream");

  //處理中文檔名

  $ua = $_SERVER"HTTP ) ;

  $encoded_filename = str_replace("+", "%20", $encoded_filename);

  if (preg_match("/MSIE/", $ua)) {🀜〦〼 ="' . $encoded_filename . '"');

  } else if (preg_match("/Firefox/", $ua)) {

  header("Content-Disposition: attachment; 。 attachment; filename="' . basename($file) . '"');

  //讓Xsendfile發送檔案

  header("X-Sendfile: $file"); Apache處理, 並且把回應的檔案直接傳送給Client.

Lighttpd和Nginx也有類似的模組, 大家有興趣的可以去找找看

Lighttpd和Nginx也有類似的模組, 大家有興趣的可以去找找看

 

 

apache環境下面隱藏URL位址中的index.php

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-d

(.* )$ index.php/$1 [QSA,PT,L]

 

 

去除PHP程式碼中的空白和註解

PHPD程式碼中的空白和註釋,但不支援直接讀取內容去除空白和註釋,下面的方法則可以支援讀取字串內容,並且ThinkPHP框架內建了該方法。

/**

 * 移除程式碼中的空白和註解

 * @param string $content 程式碼內容

 * @return string

 */

function strip_whitespace($content) {

    $stripStr   = '';

    //分析php來源碼🠎;

    $last_space = false;

    for ($i = 0, $j = count($tokens); $i

        if (is_string($tokens[$i])) {$i false;

            $stripStr  .= $tokens[$i];

        } else {

)              //過濾各種PHP註解

                case T_COMMENT:

                case T_DOC_COMMENT:

                    break;              case T_WHITESPACE:

                    if .= ' ';

                        $last_space = true;

         

                    中斷;

                case T_START_HEREDOC: Š         case T_ c "

                   中斷;

              $stripStr .= "THINK;n";

                    for($ k = $ k

                        if(is_string($tokens[$k]) && 約        $i = $k;

                            中斷;

 ($tokens[$k][0] == T_CLOSE_TAG) {

                            

                  }

                    約              $last_space = false;

                    $stripStr  .= $ $tokens[ $i][1];

            }

        }

    }

🎔

檢查字串是否為UTF8編碼

用於判斷某個字串是否採用UTF8編碼

function is_utf8($string){

    return preg_match('%^(?:

         [x09x0Ax0Dx20-x70       | [ xC2-xDF][ x80-xBF]             # 非超長2 位元組

       |  xE0[xA0-xBF][x80-xBF]        # 不包含超長

        |  xED[x80-x9F][ x80-xBF]        # 排除代理

       |  xF0[x90-xBF][x80-xBF]{2}     # 飛機1-3

.       # 飛機4-15

       |  xF4[x80-x8F][x80-xBF]{2}     #plane 16

   )*$%xs', $string); SS安全過濾

來自網絡,用於對字串進行XSS安全過濾。

function remove_xss($val) {

   // 刪除所有無法列印的字元。 CR(0a) 和LF(0b) 和TAB(9) 是允許的

    // 這可以防止某些字元重新間距,例如

    // 請注意,您必須處理n、r 的分割,和t 稍後,因為它們* 在某些輸入中被允許

   $val = preg_replace('/([x00-x08,x0b-x0c,x0e-x19])/', '', $val);

   //直接替換,使用者永遠不需要這些,因為它們是普通字元

    // 這可以防止像ThinkPHP的一些類別與方法

   $search = 'abcdefminxy')>

   $搜尋.= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

   $search .= '1234567890!@#$%^&*()';

   . _| '\';

  for ($i = 0; $i       // ;? 匹配;,這是可選的

      // ;? 匹配;,這是可選的

      // ;? 匹配;,這是可選的

      // ;? 匹配;,這是可選的

      // ;? 匹配;,這是可選的

      // ;? 7}符合任何填入的零,這是可選的,最多8 個字元

      // @ @ 搜尋十六進位值

      $val = preg_replace('/([xX]0{0,8 }'.dechex( ord($search[$i])).';?)/i', $search[$i], $val); // 有;

      // @ @ 0{0, 7} 符合'0 ' 零到七次

      $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i ], $val) ; // 使用;

   }

   // 現在剩下的唯一空白攻擊是t、n 和r

   $ra1 = array('javascript', 'vbscript', '表達式', '小程式', '元', 'xml', '暗示', '連結', '風格', '腳本', '嵌入', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');

   $ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbefeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbefate' ', 'onbounce'、'oncellchange'、'onchange'、'onclick'、'oncontextmenu'、'oncontrolselect'、'oncopy'、'oncut'、'ondataavailable'、'ondatasetchanged'、'ondatasetcomplete'、'ondblclick'、 'ondactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus ', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel','onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize ', 'onresizeend'、'onresizestart'、'onrowenter'、'onrowexit'、'onrowsdelete'、'onrowsinserted'、'onscroll'、'onselect'、'onselectionchange'、'onselectstart'、'onstart'、'onstop'、 'onsubmit', 'onunload');

   $ra = array_merge($ra1, $ra2);

   $found = true; //只要上引號取代了某些內容,就繼續替換

  while ($found == true) {

      $val_before = $val;

     for ($i = 0; ); $i++) {

         $pattern = '/';

         for ($j = 0; $j

               $pattern .= '(';

               $       $pattern .= '|';

               $pattern .= '|(�{0,8}([9|10|13]);)';

          }

          $pattern .= $ra[ $i][$j];

         }

         $pattern .= '/i';

 ra[$i], 2); // 新增超過標籤

         $val = preg_replace($pattern, $replacement, $val); // 過濾掉十六進位標籤

         if ($val_before == $val) {

            //         }

     }

   }

return $val;

}

 

 

COOKIE 有效範例

cookie 方法是ThinkPHP 內建的函數,用於完成cookie 的設定、取得和刪除作業。 value');   //設定cookie

cookie('name','value',3600); //指定cookie儲存時間為1小時

 

進階設定

cookie('name','value',name','value', array('expire'=>3600,'prefix'=>'think_')); // 指定近和遠端

//下面的程式碼和上面

cookie('name','value', 'expire =3600&prefix=think_')

 

獲取

$value = cookie('name');

 

Cookie值,可用:

cookie('name',null);

 

若要清空cookie,可用:

cookie(null); // 所有在目前設定前綴的cookie值

cookie(null,'think_'); //  清空指定前綴的所有cookie值

 

驗證碼不能顯示?通常都是BOM訊息惹的禍此代碼能解決驗證碼不能顯示問題.(批量去除BOM信息的代碼)

有時,我們在本地測試環境中需要顯示驗證碼的地方沒有問題,一旦佈置到伺服器上去的時候.需要顯示驗證碼的地方無法顯示?如果你也碰到同樣問題,請往下看.

問題的原因大部分是BOM頭信息造成的,通常thinkphp的設定檔都要去除BOM頭資訊.什麼是BOM頭資訊?百度一下就知道啦.

我通常的解決辦法是,佈置到伺服器上去之後,新建一個去除所有檔案的BOM頭資訊的程式碼檔案.然後運行之即可.

例如:我在伺服器根目錄新建一個delBom.php檔.運行http://www.xxx.com/delBom.php即可.程式碼如下:

if ( isset($_GET['dir'])){ //設定檔目錄 

$basedir=$_GET['dir'];  

}else{  

$basedir = '.'; auto = 1;  

checkdir($basedir);  

function checkdir($basedir){  

if ($dh = opendir($basedir)) {  

if ($dh = opendir($basedir)) {  

if ($file == false) {  

   if ($file != '.' && $file != '..'){  

    if (!is_dir($basedir."/".$1)) { filename: $basedir/$file ".checkBOM("$basedir/$file")."
";  

    }else{  

     $dirname); 

global $auto;  

$contents = file_get_contents($ filename);  

$charset[1] = substr($contents, 0, 1);  

$charset[2] = substr($contents, 1, 1);  

$ contents, 2, 1);  

if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  

if ($auto == 1) {  

   $rest = substr($contents, 3);  

   rewrite ($filename, $rest);  

   rewrite ($filename, $rest);  

 . _http://www.k686.com");  

  } else {  

   return ("BOM found.");  

  }  

}  

else return ("BOM Not Found.");  

}  

. fopen($filename, "w");  

flock($filenum, LOCK_EX);  

fwrite($filenum, $data);  

fclose($filenum);  🠎

U方法使用範例,位址方法,在模型或範本中都可以使用

U方法是ThinkPHP中用於自動產生URL位址的方法,能夠幫助你因為不同的環境和設定而自動產生對應的URL位址。

特點如下:

1、自動識別目前的URL模式

2、自動識別目前的PATH_INFO分隔符號

3、網域名稱和二級網域支援

4、偽靜態和錨點支援

3、網域名稱和二級網域支援

路由位址支援

因此,在使用U方法的時候,你基本上不需要關注當前使用的是什麼URL模式和什麼配置參數,按照U方法統一的規則調用即可,在實際生成URL地址的時候U方法會自動識別。

下面是一些基本的用法:

// 目前模組的read操作位址,傳入參數id為5

U('read','id=5');

 

如果要傳入變數,則用:

U('read','id='.$vo['id']);

 

如果你的U方法是在模板調用,一般需要寫成:

閱讀文章

 

產生Blog模組的index操作位址,並傳入更多的參數:

U('blog /index','cate_id=5&type=1');

 

當然,也可以使用陣列傳參:

U('blog/index',array('cate_id'=>5,'type'=> 1));

 

如果參數比較少,也可以直接在第一個參數中傳入:

U('Blog/read?id=5'); 

U('Blog/cate?cate_id =1&status=1')

 

支援分組產生:

U('Home/Blog/read?id=5'); // Home分組下面的blog模組的read操作地址 

U('Admin/Blog/cate?cate_id=1&status=1');// Admin分組

 

表示

U方法會自動加上目前配置的偽靜態後綴,如果你配置了多個偽靜態後綴,則預設會加上第一個,如果需要指定偽靜態後綴,也可以使用:

U('Blog/read','id=1','xml');

 

表示輸出偽靜態後綴為.xml的URL位址

 

如果要使用U方法輸出路由位址,則需要在第一個參數前加上"/",例如:

U('/news/1');

 

則表示要產生的URL位址是news/1 這樣的路由位址。

 

如果需要產生有網域名稱的URL位址,可以使用:

U('Blog/read@blog.thinkphp.cn','id=1');

 

/read@blog','id=1');

 

表示採用目前網域的blog二級網域名稱位址。

 

支援錨點產生(注意需要更新最新的Git版本才能支援)

U('Blog/read#review','id=5');

 

產生的URL地址最後會帶上#review 錨點,方便跳到評論部分。

 

 

設定圖片的HTTP緩存,也可以設定JS和CSS的

如果是Apache環境下面,可以在.htaccess檔案中加入下面的程式碼,用於設定圖片的HTTP快取和有效期限(需要開啟apache的headers模組支援),減少網站的圖片資源請求壓力,提高訪問速度和你的pagespeed值^_^。

Header set Cache-Control "max-age=604800"

上面的程式碼設定了網站的圖片使用為期一周的HTTP緩存,當然,你一樣可以給js或css檔案加上http快取哦。

 

 

檢查字串中是否有外鏈

/**

 * all_external_link 偵測字串是否包含外鏈

 * @param  string  $text 文字

 * @param  string  $host 對片外

 * @?

 */

function all_external_link($text. )) $host = $_SERVER['HTTP_HOST'];

    $reg = '/http(?:s?)://((?:[A-za-z0-9-]+.)+[A -za-z]{2,4})/';

    preg_match_all($reg, $text, $data);

    $math = $data[1];

    foreach ($math as $value) {

        if($value != $host) return false;

    }

    return僅用於Apache環境下面,可以在htaccess檔案中加入下面的程式碼,當造訪abc.com的時候會重新導向到www.abc.com,當然你也可以設定重新導向到其它的網域。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^abc.com$ [NC]

301,L]

 

 

PHP取得客戶端的IP、地理資訊、瀏覽器資訊、本地真實IP

/ip瀏覽器、本機真實IP

 class get_gust_info { 

  

  ////取得訪客瀏覽器類型

  function GetBrowser(){ER_8p)

 

$br = $_SERVER['HTTP_USER_AGENT'];

    if (preg_match('/MSIE/i',$br)) {    

     IE  MS.   }elseif (preg_match('/Firefox/i ',$br)) {

     $br = 'Firefox';

    }elseif (preg_match('/Chrome/i',$br)) {

) 含atch ('/Safari/i',$br)) {

     $br = 'Safari';

    }elseif (preg_match('/Opera/i',$br)) {

;

    }else {

        $br = 'Other';

    }

    return $br;

  

  ////取得訪客瀏覽語言

  function GetLang(){

   if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){

  LAN $lang = $_LANGUAGE']){

 

    $lang = substr($lang,0,5);

    if(preg_match("/zh-cn/i",$lang)){

    @$lang = "簡體中文 }n; ("/zh/i",$lang)){

     $lang = "繁體中文";

    }else{

        $lang = "English";

        $lang = "English";    

}else{return "取得瀏覽器語言失敗!";}

  }

  

   ////取得訪客作業系統

  function GetOs(){$ER_o

!

 )){

    $OS = $_SERVER['HTTP_USER_AGENT'];

      if (preg_match('/win/i',$OS)) {

(Fhi; '/mac/i',$OS)) {

     $OS = 'MAC';

    }elseif (preg_match('/linux/i',$OS)) {

   

    }elseif (preg_match('/unix/i',$OS)) {

     $OS = 'Unix';

    }elseif (preg_match('/bsd/i),$ = 'BSD';

    }else {

     $OS = 'Other';

    }

     turn 

  }

  ////獲得訪客真實ip

  function Getip(){

   if(!empty($_SERVER["HTTP_CLIENT_IP"])){ -p_Hh_p;   }

   if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ //取得代理ip

    $ips = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR); if($ ip){

      $ips = array_unshift($ips,$ip); 

   }

   

for$ $ ){   

     if(!preg_match("/^(10|172.16|192.168)./i",$ips[$i])){//排除區域網路

      break;

   if($tip=="127.0.0.1" ){ //取得本地真實IP

      return $this->get_onlineip();   

   }else{

      return $tip }else{

      return $tip }else{

      return $tip ;

  ////取得本地真實IP

function get_onlineip() {

      $mip = file_get_contents("http://city.ip138.com/city0.asp");

      if($mip){

     , $mip,$sip);

           $p = array("/[/","/]/");

        { return "取得本機IP失敗! ";}

   }

  

  ////依ip取得訪客所在地地名

  function Getaddress($ip=''){ ->Getip();    

   }

   $ipadd = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);/根據新浪介面取得

   if($ipadd){

    $charset = iconv("gbk","utf-8",$ipadd);   

    preg_matchipad_all"/[x }",$charset,$ipadds);

    

    return $ipadds;   //回傳一個二維陣列

   }else{return "addree is ninone"; gifo = new get_gust_info();

 echo "你的ip:".$gifo->Getip();

 echo "
地點:";

 $alds = $ipadaddress();Getaddress(); ($ipadds[0] as $value){

     echo "rn    ".iconv("utf-8","gbk",$value);    

:".$gifo->GetBrowser();

 echo "
瀏覽器語言:".$gifo->GetLang();

 echo "
作業系統:".$gifo->GetOs();

  

?

 

 

URL安全的字串base64編碼和解碼

如果直接使用base64_encode和base64_decode方法的話,產生的字串可能不適用URL位址。以下的方法可以解決問題: URL安全的字串編碼:

function urlsafe_b64encode($string) {

   $data = base64_encode($string);

','='),array('-','_',''),$data);

   return $data;

}

 

URL安全的解碼:

 

URL安全的解碼:

function $string) {

   $data = str_replace(array('-','_'),array('+','/'),$string);

   $mod4 = strlen($data) % 4;

   if ($mod4) {

       $data .= substr('====', $mod4);

   }

}

 

獲取客戶端瀏覽器資訊

/**

 * 取得用戶端瀏覽器類型

 * @param  string $glue 瀏覽器類型和版本號碼之間的連接符號

 * @return string|array 傳遞連接符號則傳回連結器類型和版本

 * @return string|array 傳遞連接符號則傳回連結器類型和版本

 * @return string|array 傳遞連接符號則傳回連線否則直接回傳數組false為未知瀏覽器類型

 */

function get_client_browser($glue = null) {

    $browser = array();

);客戶端資訊

    

    /* 定義瀏覽器特性正規表示式*/

    $regex = array(

         'chrome' => '/(Chrome)/(d+.d+)/',

        'firefox' => '/(Firefox)/(d+.d+)/',

       'opera'  (d+.d+)/',

        'safari'  => '/Version/(d+.d+.d) (Safari)/',

    );

)

    );

) $ {

        preg_match($reg, $agent, $data);

        if(!empty($data) && is_array($data)){為 $🠭🠟    🠟 = y $數據[2], $data[1]) : array($data[1], $data[2]);

            break;

        }

(is_null ($glue) ? $browser : implode($glue, $browser));

}

 

 

時間戳友好化格式化函數顯示剛剛,幾秒前

將時間於現在時間相比顯示為多久以前發布的,如顯示為:剛剛、5秒前、5小時前、5天前..這種

/**

 *

 +-------------------------------------------- ------------------------

 * Description 友善顯示時間

 +---------------- -------------------------------------------------- --

 * @param int $time 要格式化的時間戳預設為目前時間

 +--------------------------- -----------------------------------------

 * @return string $text 格式化後的時間戳

 +------------------------------------------ --------------------------

 * @author yijianqing

 +--------------- -------------------------------------------------- ---

 */

function mdate( $time = NULL) {

    $text = '';

    $time = $time === NULL || $time > time() ? time() : intval($time);

    $t = time

    $t = time () - $time; //時間差(秒)

    if ($t == 0)

        $text = '剛';

    elseif ($t

    elseif ($t

        $text = floor($t / 60) . '分鐘前'; //一小時內🠎 * 60 * 24)

        $text = floor($t / (60 * 60)) . '小時前'; // 一天內

    elseif ($t

    elseif ($t

        $text = date('m月d日H:i', $time); //一個月內

    elseif ($t

. d日', $time); //一年內

    else

        $text = date('Y年m月d日', $time); //一年前

    return $d日', $time); //一年前

    return $d

 

使用此函數,我們只需在前台用

{$vo.time|mdate}

 

實現時間友好顯示了

 

/**

 * 將回傳的資料集轉換成樹

 * @param  array   $list  資料集

 * @param  string   * @param  string  $child 子節點名稱

 * @param  integer $root  根節點ID

 * @return array          轉換後的樹

 */

function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root=0) {

    $tree = array( );// 建立Tree

    if(is_array($list)) {

        // 建立基於主鍵的陣列參考

     建立 $referment for $referee( $data) {

            $refer[$data[$pk]] =& $list[$key];

        }

            // 判斷是否有parent

            $parentId = $data[$pid];

            if ($root == $parentId) { $ [$key];

            }else{

                if (isset($refer[$parentId])) {

                       $parent[$child][] =& $list[$key];

                }

            }

        }

    }

    return $tree;頭像時

目前是這麼做的將上傳判斷程式碼段

 /*  if( !$upload->upload()) {// 上傳錯誤提示錯誤訊息

    $this->error($upload->getErrorMsg());

 }else{// 上傳成功取得上傳檔案資訊 

 }else{// 上傳成功取得上傳檔案資訊 

info =  $upload->getUploadFileInfo();

 }  */

 

改為:

$upload->upload();

即使不上傳圖片也不提示錯誤, 然後在上傳頁面添加

 

 

在update()方法中做以下判斷:

if(is_null($info[0]["savename"])){

    $['face'face' _POST['face'];

}else{

    $data['face']=$info[0]["savename"];

}

 

PH桿

合併數個組合因子的array_merge時,如果第一個參數為空,則會導致傳回結果為空。這個函數做了對應處理。

function MergeArray($list1,$list2)

{

    if(!isEmpty($list1) && !isEmpty($list2)) 

 ) 15 list2);

    }

    else return (isEmpty($list1)?(isEmpty($list2)?null:$list2):$list1);

}

function isEmpty($data)

}

function isEmpty($data)🜎 hahoah> || false == $data || "" == $data;

}

 

 

Google翻譯插件調用,採用CURL調取

調用Google翻譯的接口,需要開啟Google翻譯插件調用,採用CURL調取

調用Googlecurl的接口,需要開啟Google翻譯外掛程式。

    /*

        Google翻譯函數 by QQ366958903

     目標語言

        $sl        原語言

        $ie     

    function translate($text='',$tl='zh-CN',$sl='auto',$ie='UTF-8'){

        $ch = curl_init('http://translate.google.cn/');

        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS,"&hl=zh-CN&sl={$sl}&ie={$ie}&tl={$tl}&text=".urlencode($text)); 

        $html = curl_exec($ch);

        preg_match('#(.*?)

#',$html,$doc);

        return strip_tags($doc['1'],'
');

    }

  = '你好';    

    echo translate($text,'en');

?>

 

 

語言簡寫對應表

' >'阿爾巴尼亞語',

'ar'=>'阿拉伯語',

'az'=>'阿塞拜疆語ALPHA',

'ga'=>'愛爾蘭語',

'et'=> '愛沙尼亞語',

'be'=>'白俄羅斯語',

'bg'=>'保加利亞語',

'is'=>'冰島語',

'pl'=>'波蘭語',

'fa'=>'波斯語',

'af'=>'布爾文(南非荷蘭語)',

'da'=>'丹麥語',

'de'= >'德語',

'ru'=>'俄語',

'fr'=>'法語',

'tl'=>'菲律賓語',

'fi'=>'芬蘭語' ,

'ka'=>'格魯吉亞語ALPHA',

'ht'=>'海地克里奧爾語ALPHA',

'ko'=>'韓語',

'nl'='荷蘭語',

'gl'=>'加利西亞語',

'ca'=>'加泰隆尼亞語',

'cs'=>'捷克語',

'hr '=>'克羅埃西亞語',

'lv'=>'拉脫維亞語',

'lt'=>'立陶宛語',

'ro'=>'羅馬尼亞語',

'mt'= >'馬耳他語',

'ms'=>'馬來語',

'mk'=>'馬其頓語',

'no'=>'挪威語',

'pt'=> '葡萄牙語',

'ja'=>'日語',

'sv'=>'瑞典語',

'sr'=>'塞爾維亞語',

'sk'=>'斯洛伐克語',

'sl'=>'斯洛維尼亞語',

'sw'=>'斯瓦希里語',

'th'=>'泰語',

'tr'=>'土耳其語',

'cy'=>'威爾斯語',

'uk'=>'烏克蘭語',

'eu'=>'西班牙的巴斯克語ALPHA',

'es'=>'西班牙文',

'iw'=>'希伯來文',

'el'=>'希臘文',

'hu'=>'匈牙利語',

'hy'=>'亞美尼亞語ALPHA',

'it'=>'義大利語',

'yi'=>'意第緒語',

'hi'=>'印地語',

'ur'= >'印度烏爾都語ALPHA',

'id'=>'印尼語',

'en'=>'英語',

'vi'=>'越南語',

'zh- TW'=>'中文(繁體)',

'zh-CN'=>'中文(簡體)',

 

 

備份資料庫,整個庫或備份部分錶

全寫在模組在//相關設定

    public $model = '';                                    public $content;                                           ;                                                 

    public $dir_sep = '/';                                   資料

    function _initialize() {

        parent::_initialize();

       header("Content-type: /html; utf-8");

        set_time_limit(0);                         時

        ini_set('memory_limit','500M');

        $this->config = array(

      $this->config = array(

        ' DB_BACKUP'),                                                                                     //是否開啟中使用                                              註解

        );

        $this->dbName = C('DB_NAME');               

        $this->model = new Model();

        //$sql = 'set interactive_timeout=24*3600 ';                             //閒置多少秒後斷開連結

       

     * +----------- -------------------------------------------------- -----------

     * * @ 已備份資料清單

     * +-------------------------- ----------------------------------------------

     */

    function index() {

        $path = $this->config['path'];

        $fileArr = $this-> > $ value) {

            if ($key > 1) {

                // :s', filemtime($path . '/' . $value)) ;

                $fileSize = filesize($path . '/' . $value) / 1024;

   攝取        $fileSize = $fileSize

                        number_format($fileSize / 1024, 2) . ' MB';          $list[] = array(

                    'name' => $ fileTime,

                    'size' => $fileSize

                }

        $this->assign('list', $list);

        $this->display();

        $this->display();

     

    /* -

     * +----------------------------------------- -------------------------------

     * * @ 取得資料表

     * +------- -------------------------------------------------- ---------------

     */

    function tablist() {

        $list = $this->model->query("SHOW TABLE STATUS FROM {$this->dbName}");  //得到表格中的資訊

     //echo $Bastup-get this->assign('list', $list);

        $this->display();

    }

    /* -

-------------------------------------------------- -------

     * * @ 備份整個資料庫

     * +------------------------------- -----------------------------------------

     */

    function backall( ) {

        $tables = $this->getTables();

        if ($this->backup($tables)) {

 ');

        } else {

            $this->error('資料庫備份失敗!');

     * +----------- -------------------------------------------------- -----------

     * * @ 以表格備份,可大量

     * +------------------------ ------------------------------------------------

*/

    function backtables() {

        $tab = $_REQUEST['tab'];

       $

        else

            $tables[] = $tab;

        if ($this->backup($tables)) {

            if (is_array($tab))

$  備份');

            else

                $this->success('一項資料庫備份中        $this->error('資料庫備份失敗!');

        }

    }

    //還原資料庫

     

            $this->success('資料還原成功!  //刪除資料備份

    function deletebak () {

        if (unlink($this->config['path'] . $this->dir_sep . $_GET['file']) {

    備用      錯誤! , '/public/ok');

        } else {

            $this->error('刪除備份失敗!'); * -

     * +----- -------------------------------------------------- -----------------

     * * @ 下載備份檔案

     * +--------------------- -------------------------------------------------- -

     */

    function downloadBak() {

        $file_name = $_GET['file'];      if (!file_exists($file_dir . "/" . $file_name)) { //檢查檔案是否存在

            return false;

            exit;    $file = fopen($file_dir . "/" . $file_name, "r" ); // 開啟檔案

            // 輸入檔案標籤

            header('Content-Encoding: none'); stream");

            header("Accept- Ranges: bytes");

            header("Accept-Length: " . filesize($file_dir . "/" . $file_name));

            header('Content-Transfer-Encoding: binary');

           fileheader("ent-Disposition:        fileheader("ent-Disposition: 79977775年之後為真實瀏覽器瀏​​覽文件).          header('Pragma : no-cache');

            header('Expires: 0');

           file /" . $file_name));

            fclose ($file);

            exit;

        }

    }

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

     * * @ 取得目錄下檔案陣列

     * +---------------------------------------- ----------------------------------

     * * @ $FilePath 目錄路徑

     * * @ $Order    排序

     * +----------------------------------------------- -------------------------

     * * @ 取得指定目錄下的檔案列表,回傳數組

     * +------ -------------------------------------------------- ----------------

     */

    private function MyScandir($FilePath = './', $Order = 0) {

   ;

        while ($filename = readdir($FilePath)) {

            $fileArr[] = $filename  der ort($fileArr) : rsort($fileArr);

return $fileArr;

    }

    /*     * ************************************** ************************************************** **** */

    /* -

     * +----------------------------------- -------------------------------------

     * * @ 讀取備份檔案

     * + -------------------------------------------------- ----------------------

     * * @ $fileName 檔案名稱

     * +--------------- -------------------------------------------------- -------

     */

    private function getFile($fileName) {

        $this->content = '';

        $this->content = ''; path'] . $this->dir_sep . $fileName);

        if (is_file($fileName)) {

       ($ext == '. sql') {

                $this->content = file_get_contents($fileName);

           } elseif ($ ==    $this->content = implode('', gzfile($fileName ));

            } else {

                $this->error(' 🠎););    } else {

            $this->error('檔案不存在!');

        }

    }

    /* -

     * +----------------------------------- -------------------------------------

     * * @ 把資料寫入磁碟

     * +------------------------------------------------- -----------------------

     */

    private function setFile() {

        $ reize = '';

        $ reize = '';

🜠 ->dbName;

        $fileName = $this->trimPath($this->config['path'] . $this->dir_sep . $recognize . '_' . date('YmdHis') . '' . mt_rand(100000000, 999999999) . '.sql');

        $path = $this->setPath($fileName);

  $this->error("無法建立備份目錄目錄'$path'");

        }

        if ($this->config['isCompress'] == 0) {

            if (!file_put_contents($fileName, $this->content, LOCK_EX)) {

               }

        } else {

            if (function_exists('gzwrite')) {

               $Name .= '.g $gz = gzopen($fileName, 'wb')) {

                    gzwrite($gz, $ this->content);

                    gzclose($gz);

            $this->error('寫入檔案失敗,請檢查磁碟空間或權限!');

                }

          } se  {

                $this->error('沒有開啟gzip擴充中!');

           ['isDownload']) {

            $this->downloadFile($fileName );

        }

    }

    private function trimPath($path) {

\    == , $path);

    }

    private function setPath($fileName) {

        $dirs = explode($this->dir_sep, dirname $

        foreach ($ dirs as $dir) {

            $tmp .= $dir . $this->dir_sep;

                       return $tmp;

}

        return true;

    }

    //未測試

    private function downloadFile($Name) {p        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

        header('Content-Description: File Transfer');

        header('Content-Type: application/octet-stream');

        header('Content-Length: ' . filesize($fileName));

        header('Content-Disposition: attachment; filename=' . basename($fileName));

 -

     * +- -------------------------------------------------- ---------------------

     * * @ 新增字串` `

     * +-------------- -------------------------------------------------- --------

     * * @ $str 字串

     * +----------------------------- -------------------------------------------

     * * @ 回` $str`

     * +------------------------------------------- -----------------------------

     */

    private function backquote($str) {

        return "`{$ str}`";

    }

    /* -

     * +--------------------------------- ---------------------------------------

     * * @ 取得資料庫的所有表格

     * +----------------------------------------------- -------------------------

     * * @ $dbName  資料庫名稱

     * +------------ -------------------------------------------------- ----------

     */

    private function getTables($dbName = '') {

        if (!empty($dbName)) { 時期🠟   . $dbName;

        } else {

            $sql = 'SHOW TABLES ';

   he

        $info = array();

        foreach ($result as $key => $val) {

            $info[$key] = current($val);

    }

    /* -

     * + -------------------------------------------------- ----------------------

     * * @ 把傳過來的資料依指定長度分割成陣列

     * +-------- -------------------------------------------------- --------------

     * * @ $array 要分割的資料

     * * @ $byte  要分割的長度

     * +---------- -------------------------------------------------- ------------

     * * @ 把陣列依指定長度分割,並回傳分割後的陣列

     * +---------------- -------------------------------------------------- ------

     */

    private function chunkArrayByByte($array, $byte = 5120) {

  我        $return = array();

foreach ($array as $v) {

            $sum += strlen($v);

           [] = $v;

            } elseif ($sum == $byte) {

                $return[++$i][] = $v;

         1 

       

                $return[++$i][] = $v;

                $i++;

                $sum  

        return $return;

    }

    /* -

     * +----------- -------------------------------------------------- -----------

     * * @ 備份資料{ 備份每張表、檢視及資料}

     * +------------------ -------------------------------------------------- ----

     * * @ $tables 需要備份的表格陣列

     * +------------------------------ ------------------------------------------

     */

    private function backup($tables) {

        if (empty($tables))

            $this->error('沒有需要備份的資料表中!'); by MySQLReback ' . date('Y-m-d H:i:s') . ' */';

        foreach ($tables as $i => $table) {

  this    quo  ;                                  //為表名增加中``tables

     //取得目前表格的建立語句

            if (!empty($ tableRs[0]["Create View"])) {

                $this->content .= "rn /* 創建視圖結構{$table}  */";

                $this->content .= "rn DROP VIEW IF EXISTS {$table};/* MySQLReback Separation */ " . $tableRs[0]["Create View"] . ";/* MySQLReback Separation */";

        含0]["Create Table"])) {

                $this->content .= "rn /* 建立表格結構{$table}  */"

DRP. EXISTS {$table};/* MySQLReback Separation */ " . $tableRs[0]["Create Table"] . ";/* MySQLReback Separation */";

              

SELECT * FROM {$table}");

                $valuesArr = array();

       1    

                if (false != $tableDateRow) {

                         foreach ($y as &$v) {

                                 //修正empty 為0的時候 返回tree

                                $v = 'null';    //為空設為null

                            else

 . mysql_escape_string($v) . "'";       //非空加轉意符

                        }

                        $valuesArr[] = '(' . implode(',', $y) . ')';

                    }

                }

                $temp = $this->chunkArrayByByte($valuesArr);

                if (is_array($temp)) {

                       $values = implode(',', $v) . ';/* MySQLReback Separation */';

                 ($values != ';/* MySQLReback Separation */') {

                          $                 $this->content .= "rn INSERT INTO {$table} VALUES {$values}";

                        }

         }

//                dump($this->content);

//    

        }

        if (!empty($this->content)) {

            $this->setFile();

        }

     * +-------- -------------------------------------------------- --------------

     * * @ 還原資料

     * +------------------------- -----------------------------------------------

     * * @ $fileName 檔名

     * +---------------------------------------- ----------------------------------

     */

    private function recover_file($fileName) {

        $this ->getFile($fileName);

        if (!empty($this->content)) {

            $content = explode(';/* MySQLReback - /'  foreach ($content as $i => $sql) {

                $sql = trim($sql);

                $mes = $this->model->execute($ sql);

                    if (false === $mes) {                 

                        $table_change = array('null' => '''');

                        $sql = strtr($sql, $table_change);

                        $mes = $this->model->execute($sql);

                    }

                    if (false === $mes) {                                       //如果遇到錯誤、記錄錯誤

                        $log_text = '下列程式碼還原遇到問題:';

   text

                        set_log($log_text);

         

            }

        } else {

            $this->error('無法讀取備份檔案!');

   

}

?>

 

 

$this-> _get(); 用法範例自動過濾

$this->_get('a','b','c');

 

三個參數:

 

a、$_GETGET提交上來的變數名稱;

 

b、濾波函數(多用逗號隔開,如:'trim' / 'trim,String');

 

c、預設值;

 

錯誤代碼,錯誤頁面的函數

httpstatus('404');

將向客戶端發送一個404錯誤,並且錯誤頁面是可以自訂的。

將函數放在common.php內,自動載入即可隨意呼叫了

/**

 * 回傳錯誤代碼,將錯誤頁放在入口文件目錄./Public/httpstatus下,命名為404.html,403.html,503.html等等

 * @param $string 錯誤代碼

 

 * @param $string 錯誤代碼

 

 * @param $string 錯誤代碼

 

 * @param $string 錯誤代碼

 

 * @param $string 錯誤代碼

param $msg 錯誤訊息例如NOT FOUND,可以省略

 */

function httpstatus($string="404",$msg=""){

    header    header    header    header    header    header    header    header    header    header    header    header    header ("http/1.1 {$string} {$msg}");

    include './Public/httpstatus/'.$string.'.html';

    exit;

}


    exit;

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板