自分のプロジェクトでよく使用される PHP ツールの完全なリストを共有し、PHP ツールの完全なリストを共有しますPhp コード /** * アシスタントクラス * @著者 www.shouce.ren * */ クラスヘルパー { /** * 現在のサーバーシステムを決定します * @return 文字列 */ パブリック 静的 関数 getOS(){ if(PATH_SEPARATOR == ':'){ } } /** * 現在のマイクロ秒数 * @戻り番号 */ public static function microtime_float() { リスト ($usec, $sec) = explode (" ", microtime ()); ️戻る } /** * 文字列をUTF-8形式で切り取ります(漢字1文字または文字が1バイトを占めます) * * @著者 zhao jinhan * @バージョンv1.0.0 * */ public static function truncate_utf8_string($string, $length, $etc = '...') { $結果 = ''; $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 休憩。 } $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) { $結果 .= $など; } return $result; } /** * フォルダーを横断する * @param string $dir * @param boolean $all true は再帰走査を意味します * @return 配列 */ 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 。 '/' 。 $ファイル; if (is_dir ( $cur_path )) { $ret['dirs'][] =$cur_path; $all && self::scanfDir( $cur_path, $all, $ret); } else { $ret ['files'] [] = $cur_path; } } } closedir ( $handle ); } 戻る $右; } /** * メールで送信 * @param string $toemail * @param string $subject * @param string $message * @return ブール値 */ public static function sendMail($toemail = '', $subject = '', $message = '') { $ Mailer = yii :: Createcomponent ️ / / 電子メール設定 $メーラー>ホスト ️ $Porter-> = Yii::app()->params['emailPort'] //メールポート ; $mailer->Timeout = Yii::app()->params['emailTimeout'];//メール送信タイムアウト $mailer->ContentType = 'text/html';//HTML形式を設定します ️ $mailer->SMTPAuth = true; $ Mailer-& gt; yii :: app ()-& gt; params [ ] $ Mailer-& GT; パスワード = yii :: app ()-& gt; ️ $mailer-> $メーラー - > $ Mailer-& GT; fromName = yii :: app ()-& gt; Params ['emailformname ']; ️ $mailer->AddReplyTo $modelMail->send_status = '待機中'; $modelMail->save (); // 送信邮件 $mailer->AddAddress ( $toemail ); $mailer->件名 = $件名; $メーラー->本文 = $メッセージ; if ($mailer->Send () === true) { $modelMail->times = $modelMail->times + 1; $modelMail->send_status = 'success'; $modelMail->save (); true を返します。 } else { $error = $mailer->ErrorInfo; $modelMail->times = $modelMail->times + 1; $modelMail->send_status = '失敗'; $modelMail->error = $error; $modelMail->save (); false を返します。 } } /** * 文字列が utf-8 か gb2312 かを決定します * @param 不明 $str * @param string $default * @return 文字列 */ public static function utf8_gb2312($str, $default = 'gb2312') ️ if (emptyempty($str)) $defaultを返す "gb2312" => "/^([xA1-xF7][xA0-xFE])+$/", //gb2312 かどうかを判断する正規 ️繁体字中国語文字は既に含まれています ); ️ ️ } if (!preg_match($preg[$default], $str)) { } ️ // $option に変換できません。つまり、元のオプションは $default ではありません } } /** * UTF-8とgb2312の自動変換 * @param 不明な $string * @param string $outEncoding * @return 不明|文字列 */ public static functionsafeEncoding($string,$outEncoding = 'UTF-8') for($i = 0; $i strlen ($string); $i ++) { ️ 字 个 // 最初のバイト判定合格 ️ 字 个 // 2バイト目の判定は通る ~ ️ _ ~ ️ } ️) & 192) == 192) { 字 个 // 最初のバイト判定合格 ️ 字 个 // 2バイト目の判定は通る ~ } } ️誰誰誰誰誰誰誰誰誰の、、歌ってる、歌ってる、」 } /** * 2次元配列内のキー名のすべての値を返します * @param 入力 $array * @param string $key * @return 配列 */ public static function array_key_values($array =array(), $key='') $ret = array(); $ret[$k] = $v[$key]; } ️ _ } /** * ファイル/ディレクトリが書き込み可能かどうかを判断します (システム独自の is_writeable 関数を置き換えます) * @param string $file ファイル/ディレクトリ * @return ブール値 */ 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 $書き込み可能; } /** 単位のフォーマット */ 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 タイプ * 選択済みチェック済み * @return 文字列 */ static public function selected( $string, $param = 1, $type = 'select' ) { $true = false; if ( is_array( $param ) ) { $true = in_array( $string, $param ); }elseif ( $string == $param ) { $true = true; } $return=''; if ( $true ) $return = $type == '選択'? 'selected="選択済み"' : 'checked="チェック済み"'; エコー $return; } /** * リモート写真をダウンロード * @param string $url 画像の絶対 URL * @param string $filepath ファイルのフルパス (/www/images/test など) この関数は、画像の URL と http ヘッダー情報に基づいて画像のサフィックスを自動的に決定します。 * @param string $filename 保存するファイル名(拡張子は除く) * @returnmixed ダウンロードが成功すると画像情報を記述した配列が返されます ダウンロードが失敗した場合は false が返されます */ static public function downloadImage($url, $filepath, $filename) { //サーバーから返されたヘッダー情報 ️ ponseヘッダー 後の // 画像のサフィックス ️ $ch =curl_init($url); //curl_exec によって返される値に HTTP ヘッダーを含めるように設定します curl_setopt($ch, CURLOPT_HEADER, 1); //curl_exec によって返される値を、HTTP コンテンツを含めるように設定します curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //クロールジャンプ後のページを設置(http 301, 302) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //HTTP リダイレクトの最大数を設定します curl_setopt($ch, CURLOPT_MAXREDIRS, 3); //サーバーから返されるデータ (http ヘッダー情報とコンテンツを含む) $html =curl_exec($ch); この取 // このキャプチャされた情報の関連情報を取得します curl_close($ch); if ($html !== false) { //応答のヘッダーと本文を分離します。サーバーは 302 個のジャンプを使用する可能性があるため、ここでは文字列を 2 + ジャンプ数の部分文字列に分割する必要があります ️ ;️ // 最後から 2 番目の段落はサーバーの最後の応答の http ヘッダーです 最初の数 // カウントダウンの最初の段落はサーバーの最後の応答コンテンツです ️ 最後に取得 // Responseのヘッダー情報を取得します preg_match_all('/([a-z0-9-_]+):s*([^rn]+)rn/i', $header, $matches); ️ 1])) { S re $ レスポンスヘッダー [ $ は [1] [ $ i] に一致します] = $ は [2] [ $ i] に一致します ; ️ } 画像取得 // 画像のサフィックス名を取得します if (0 '{(?:[^/\\]+).(jpg|jpeg|gif|png|bmp)$}i', $url, $matches)) { ~ $ext = $matches[1]; if (array_key_exists('Content-Type', $responseHeaders)) { ~i'、$responseHeaders['Content-Type']、$extmatches)) { ~ ️ } 文存 // ファイルを保存 //ディレクトリが存在しない場合は、最初にディレクトリを作成する必要があります ️ mkdir($filepath, 0777, true); Le i $ ファイルパス. = '/' $ ファイル名. ". $ Ext"; $local_file = fopen($filepath, 'w'); ️ (Fclose (l $ local_file); ~ ️ $size。 info[1], '元のファイル名' => $元のファイル名, 'ファイル名' => パス情報($ファイルパス, ); ️ } } } /** * @param string $ip クエリ対象の IP * @param $arrIP 禁止された IP * @return ブール値 */ public static function ipAccess($ip='0.0.0.0', $arrIP = array()){ $access = true; $ip && $arr_cur_ip = explode('.', $ip); foreach((配列)$arrIP as $key=> $value){ if($value == '*.*.*.*'){ $access = false; // すべて禁止 休憩。 } $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 = false; //在禁止ip列,则禁止访问 休憩。 } } } } 。 } /** * @param string $string 元のテキストまたは暗号文 * @param string $operation 操作 (ENCODE | DECODE)、デフォルトは DECODE です * @param string $key * @param int $expiry 暗号文の有効期間、暗号化されたときに有効、単位は秒、0 は永続的な有効性を意味します * @return string 加工された原文、またはbase64_encodeで加工された暗号文 * * @example * * $a = 認証コード('abc', 'ENCODE', 'key'); * * $b = authcode($a, 'DECODE', 'key') // $b(abc) * * $a = 認証コード('abc', 'ENCODE', 'key', 3600);