よく使用される PHP ツールの完全なコレクションを自分のプロジェクトで共有します PHP コード /** * アシスタントクラス * @author www.shouce.ren * */ クラスヘルパー { /** * 現在のサーバー システムを決定します * @return string */ public static function getOS(){ if(PATH_SEPARATOR == ':'){ return 'Linux'; }else{ return 'Windows'; } } /** * 現在の微妙な番号 * @return 番号 */ public static 関数 microtime_float() { list ( $usec, $sec ) = explode ( " ", マイクロタイム () ); return (( float ) $usec ( float ) $sec); } /** * UTF-8 形式で文字列を切り取ります (漢字 1 文字または文字が 1 バイトを占めます) * * @author zhao jinhan * @バージョン v1.0.0 * */ public static function truncate_utf8_string($string, $ length, $etc = '...') { $result = ''; $string = html_entity_decode ( trim ( strip_tags ( $string ) ), ENT_QUOTES, 'UTF-8'); $strlen = strlen ( $string ); for($i = 0; (($i $strlen) && ($length > 0)); $i ) { if ($number = strpos ( str_pad ( decbin ( ord ( substr ( $string, $i, 1 ) ) ), 8, '0', STR_PAD_LEFT ), '0' )) { if ($length break; } $result .= substr ( $string, $i, $number ); $length -= 1.0; $i = $number - 1; } else { $result .= substr ( $string, $i , 1 ); $length -= 0.5; } } $result = htmlspecialchars ( $result, ENT_QUOTES, 'UTF-8'); if ($i $strlen) { $result .= $etc; } return $result; } /** * フォルダーのトラバース * @param string $dir * @param boolean $すべて true は再帰的走査を意味します * @return array */ public static function scanfDir($dir='',$all = false, &$ret = array()){ if ( false !== ($handle = opendir ( $dir ))) { while ( false !== ($file = readdir ( $handle )) ) { if (!in_array($file,array('.','..','.git','.gitignore) ','.svn','.htaccess','.buildpath','.project'))) { $cur_path = $dir 。 '/' 。 $file; if (is_dir ( $cur_path )) { $ret['dirs'][] =$cur_path; $all && self::scanfDir( $cur_path, $all, $ret); } else { $ret [ 「ファイル」] [] = $cur_path; } } } closedir ( $handle ); } return $ret; } /** * 邮件送信 * @param string $toemail * @param string $ subject * @param string $message * @return boolean */ public static function sendMail($toemail = ' ', $subject = '', $message = '') { $mailer = Yii::createComponent ('application.extensions.mailer.EMailer'); //メール設定 ;Host = Yii::app()->params['emailHost'];メールサーバー $mailer ->Port = Yii::app()->params['emailPort']//メールポート ; $ mailer->Timeout = Yii::app()->params['emailTimeout'];//メール送信タイムアウト 🎜>$mailer->ContentType = 'text/html';//HTML 形式を設定 $mailer->SMTPAuth = true; $mailer->Password = Yii::app()->params['emailPassword']; $mailer->IsSMTP (); $mailer->FromName = Yii::app()->params['emailFormName']; // 送信者名 $mailer->AddReplyTo ($mailer->Username); $mailer ->CharSet = 'UTF-8'; 🎜>new MailLog (); $modelMail->subject = $subject $modelMail->send_status = '待機中'; $modelMail->save (); // 送信邮件 $mailer->AddAddress ( $toemail ); $mailer->件名 = $subject; $mailer->本文 = $message; if ($mailer->Send () === true) { $ modelMail->times = $modelMail->times 1; $modelMail->send_status = '成功'; $modelMail->save (); true を返します。 } else { $error = $mailer->ErrorInfo; $modelMail->times = $modelMail->times 1; $modelMail->send_status = '失敗'; $modelMail->error = $error; $modelMail->save (); return false; } } /** * 文字列が utf-8 か gb2312 かを判断します * @param 不明 $str * @param string $default * @return string */ public static function utf8_gb2312($str, $デフォルト = 'gb2312') >"/[x01-x7F] /", "", $str); 空空($str)) return $preg; = array( "gb2312" => "/^([xA1-xF7][xA0-xFE]) $/" , //gb2312 {9FA5}] $/u", // 漢字かどうかの定期判定(条件) utf8 エンコードの場合)、この範囲には実際には繁体字中国語の文字が含まれます ); 'gb2312') { 🎜>$ オプション = 'utf-8' ; ; 🎜> $ str = @iconv($default, $option, $str); // $option を変換できません。元のオプションが $default ではないことを示します。 if (emptyempty($str)) { デフォルト; } /** * UTF-8 および gb2312 自動変換 * @param 不明 $string * @param string $outEncoding * @return 不明|文字列 */ public static function safeEncoding($string,$ outEncoding = 'UTF-8') { $encoding = 「UTF-8」; for($i = 0; $i strlen ( $string ); $i ) { if (ord ( $string {$i} ) 続き; if ((ord ( $string {$i} ) & 224) == 224) { // 第一字节判断通过 $char = $string { $i}; if ((ord ( $char ) & 128) == 128) { // 第二个字节判断通过 $char = $string { $i}; if ((ord ( $char ) & 128) == 128) { $encoding = "UTF-8"; 休憩; } } } if ((ord ( $string {$i}) & 192) == 192) { = $string { $i}; 🎜> { strtoupper ( $outEncoding )) return $string; } > public static function array_key_values($array =array(), $key='') 🎜 >foreach((配列)$array $k=>$v){ $ret[$ k] =$ v [$ key]; /** * ファイル/ディレクトリが書き込み可能かどうかを判断します (システムに付属の is_writeable 関数を置き換えます) * @param string $fileファイル/ディレクトリ * @return boolean */ public static function is_writeable($file) { if (is_dir($file)){ $dir = $file; if ($fp = @fopen("$dir/test.txt", 'w')) { @fclose($fp); @unlink("$dir/test.txt"); $writeable = 1; } else { $writeable = 0; } } else { if ($fp = @fopen($file, 'a ')) { @fclose($fp); $writeable = 1; } else { $writeable = 0; } } return $writeable; } /** * フォーマット単位 */ static public function byteFormat( $size, $ dec = 2 ) { $a = array ( "B" , "KB" 、"MB"、"GB"、"TB"、"PB"); $pos = 0; while ( $size >= 1024 ) { $size /= 1024; $pos ; } return round( $size, $dec ) 。 「 」 。 $a[$pos]; } /** * ドロップダウンボックス、ラジオボタン自動選択 * * @param $ string 入力文字 * @param $param 条件 * @param $type Type * 選択済み、チェック済み * @return string */ static public function selected( $string, $param = 1, $type = 'select' ) { $true = false; if ( is_array( $param ) ) { $true = in_arレイ( $string, $param ); }elseif ( $string == $param ) { $true = true; } $return=''; if ( $true ) $return = $type == 「選択」? 'selected="選択済み"' : 'checked="チェック済み"'; echo $return; } /** * リモート画像のダウンロード * @param string $url 画像の絶対 URL * @param string $filepath ファイルのフルパス (/www/images/test など) この関数は、画像の URL と http ヘッダー情報に基づいて画像のサフィックス名を自動的に決定します * @ param string $filename 保存するファイル名(拡張子は除く) * @returnmixed ダウンロードが成功した場合、ファイル名を記述する配列ダウンロードに失敗した場合は画像情報が返されます。 が返されます。*/ static public function downloadImage($url, $ filepath, $filename) { //サーバーから返されたヘッダー情報 $responseHeaders = array(); //元の画像名 originalfilename = '; > $ch =curl_init($url); > //curl_exec によって返される値に HTTP ヘッダーを含めるように設定します curl_setopt($ch, CURLOPT_HEADER, 1); >//curl_exec によって返される値に Http コンテンツを含めるように設定します curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //HTTP リダイレクトの最大数を設定します curl_ setopt($ch, CURLOPT_MAXREDIRS , 3); //サーバーから返されたデータ (http ヘッダー情報とコンテンツを含む) $html =curl_exec($ch); // このクロールに関する関連情報を取得します $httpinfo =curl_getinfo($ch) ;); ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ タイムス串 $ httparr = Explode ( "" rnrn ", $ html, 2 $ httpinfo [ 'redirect_count']] ); //最後から 2 番目の段落はサーバーの最後の応答の http ヘッダーです $header = $httpArr[count($ httpArr) - 2]; 🎜>$body = $httpArr[count($httpArr) - 1]; $header = "rn" ):s*([^rn] ) rn/i', $header, $matches); >$matches[ 1]) && !空空($matches[1])) { for ($i = 0; $i count($matches[1]); $i ) { $i, $matches[2])) { $i]] = $matches[2][$i]; } '{(?:[ ^/\\] ).(jpg|jpeg|gif|png|bmp)$}i', $url, $matches)) { $originalfilename = $matches[0]; > >i', $responseHeaders['Content-Type'], $extmatches)) { >$ ext =$ extmatches [1];ディレクトリが存在しない場合は、まずディレクトリを作成する必要があります。 🎜> 🎜> ファイルパス .= '/'.$filename."。 $ext"; $local_file = fopen($filepath, 'w'); ) { > fclose($local_file); > 0], '高さ' => $sizeinfo[1], '元のファイル名' =>; $元のファイル名, 'ファイル名' => ; パス情報($filepath, PATHINFO_BASENAME)); false を返す } /** * IP が特定のセグメントにあるかどうかを検索 * @param string $ip クエリされる IP * @param $arrIP 禁止 IP * @return boolean */ public static function ipAccess($ip=' 0.0.0.0',$arrIP = array()){ $アクセス = true; $ip && $arr_cur_ip = explode('.',$ip); foreach((array)$arrIP as $key=> $value){ if($value == '*.*. *.*'){ $access = false; // 禁止すべて break; } $tmp_arr = explode('.', $value); if(($arr_cur_ip[0] == $tmp_arr[0]) && ($arr_cur_ip [1] == $tmp_arr[1])) { //前二段同様 if(($arr_cur_ip[2] == $tmp_arr[2]) || ($tmp_arr[2] == '*') ){ // 第三段は* または者と同じ if(( $arr_cur_ip[3] == $tmp_arr[3]) || ($tmp_arr[3] == '*')){ //第四段は* または者と同じ $access = falせ; //在禁止ip列,则禁止访问 break; } } } } return $access; } /** * @param string $string 元のテキストまたは暗号文 * @param string $operation 操作 (ENCODE | DECODE)、デフォルトis DECODE * @param string $key Key * @param int $expiry 暗号文の有効期間、暗号化中に有効、単位は秒、 0 永続的に有効です * @return string 処理された元のテキスト、またはbase64_encodeで処理された暗号文 * * @example * ') 🎜> * * $a = 認証コード('abc' , 'ENCODE', 'key', 3600); * $ b = authcode('abc', 'DECODE', 'key'); // 1 時間以内に $ b(abc)、それ以外の場合、$b は空です */ public