This article mainly introduces the relevant materials for downloading all the code in the PHP commonly used tools. if you need any of them, you can refer to the following nonsense and paste the php code directly, the code is as follows:
0); $ I ++) {if ($ number = strpos (str_pad (decbin (ord (substr ($ string, $ I, 1), 8, '0', STR_PAD_LEFT), '0') {if ($ length <1.0) {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 ;} /*** Traverse folder * @ param string $ dir * @ param boolean $ all true indicates recursive traversal * @ 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 ['Files'] [] = $ cur_path ;}} closedir ($ handle);} return $ ret ;} /*** send an email ** @ 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 '); // mail configuration $ mailer-> SetLanguage ('zh _ cn'); $ mailer-> Host = Yii: app () -> params ['emailhost']; // sending email server $ mailer-> Port = Yii: app ()-> params ['emailport']; // email Port $ mailer-> Timeout = Yii: app ()-> params ['emailtimeout']; // email sending Timeout value $ mailer-> ContentType =' Text/html '; // Set the html format $ mailer-> SMTPAuth = true; $ mailer-> Username = Yii: app ()-> params ['emailusername']; $ mailer-> Password = Yii: app ()-> params ['emailpassword']; $ mailer-> IsSMTP (); $ mailer-> From = $ mailer-> Username; // sender's email address $ mailer-> FromName = Yii: app ()-> params ['emailformname']; // sender name $ mailer-> AddReplyTo ($ mailer-> Username); $ mailer-> CharSet = 'utf-8 '; // add email logs $ modelMail = new MailLog (); $ modelMai L-> accept = $ toemail; $ modelMail-> subject = $ subject; $ modelMail-> message = $ message; $ modelMail-> send_status = 'waiting '; $ modelMail-> save (); // send an email $ mailer-> AddAddress ($ toemail); $ mailer-> Subject = $ subject; $ mailer-> Body = $ message; if ($ mailer-> Send () = true) {$ modelMail-> times = $ modelMail-> times + 1; $ modelMail-> send_status = 'success '; $ modelMail-> save (); return true;} else {$ error = $ mailer-> ErrorInfo; $ modelMail-> times = $ modelMail-> times + 1; $ modelMail-> send_status = 'failed'; $ modelMail-> error = $ error; $ modelMail-> save (); return false ;}} /*** determine whether the string is UTF-8 or gb2312 * @ param unknown $ str * @ param string $ default * @ return string */public static function utf8_gb2312 ($ str, $ default = 'gb2312') {$ str = preg_replace ("/[\ x01-\ x7F] +/", "", $ str ); if (empty ($ str) return $ default; $ preg = array ("g B2312 "=>"/^ ([\ xA1-\ xF7] [\ xA0-\ xFE]) + $ /", // check whether the regular expression is gb2312 "UTF-8" => "/^ [\ x {4E00}-\ x {9FA5}] + $/u ", // check whether the regular expression is a Chinese character (the UTF-8 encoding condition). The range actually contains the traditional Chinese text); if ($ default = 'gb2312 ') {$ option = 'utf-8';} else {$ option = 'gb2312';} if (! Preg_match ($ preg [$ default], $ str) {return $ option;} $ str = @ iconv ($ default, $ option, $ str ); // It cannot be converted to $ option, indicating that the original $ default if (empty ($ str) {return $ option;} return $ default ;} /*** UTF-8 and gb2312 are automatically converted * @ param unknown $ string * @ param string $ outEncoding * @ return unknown | string */public static function safeEncoding ($ string, $ outEncoding = 'utf-8') {$ encoding = "UTF-8"; for ($ I = 0; $ I <strlen ($ strin G); $ I ++) {if (ord ($ string {$ I}) <128) continue; if (ord ($ string {$ I}) & 224) = 224) {// The first byte is judged by $ char = $ string {++ $ I}; if (ord ($ char) & 128) = 128) {// The second byte is judged by $ char =$ string {++ $ I}; if (ord ($ char) & 128) = 128) {$ encoding = "UTF-8"; break ;}}if (ord ($ string {$ I}) & 192) = 192) {// The first byte is judged by $ char =$ string {++ $ I}; if (ord ($ char) & 128) = 128) {// The second byte is determined by $ encoding = "GB2312"; break ;}} if (strtoupper ($ encoding) == strtoupper ($ outEncoding) return $ string; elsereturn @ iconv ($ encoding, $ outEncoding, $ string );} /*** return all values of a key name in a two-dimensional array * @ param input $ array * @ param string $ key * @ return array */public static function array_key_values ($ array = array (), $ key = '') {$ ret = array (); foreach (array) $ array as $ k => $ v) {$ ret [$ k] = $ v [$ key];} return $ ret;}/*** determines whether the file/directory can be written (replacing the system Built-in is_writeable function) * @ param string $ file/directory * @ 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 ;} /*** format unit */static public f Unction 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];}/*** drop-down box, the single-choice button automatically selects the ** @ param $ string input character * @ param $ param condition * @ param $ type * selected checked * @ return string */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 = 'select '? 'Selected = "selected" ': 'checked = "checked"'; echo $ return ;} /*** download the remote image ** @ param string $ the absolute url of the url image * @ param string $ full path of the filepath file (for example,/www/images/test ), this function automatically determines the image suffix * @ param string $ filename (excluding the extension) based on the image url and http header information) * @ return mixed: an array describing image information is returned after the download is successful. if the download fails, false */static public function downloadImage ($ url, $ filepath, $ filename) is returned) {// header information returned by the server $ responseHeaders = array (); // original image name $ originalfilename = ''; // Image suffix $ ext =''; $ ch = curl_init ($ url); // set the value returned by curl_exec to include the Http header curl_setopt ($ ch, CURLOPT_HEADER, 1); // set the value returned by curl_exec to include the Http content curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // set the page curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // set the maximum number of HTTP redirection curl_setopt ($ ch, CURLOPT_MAXREDIRS, 3); // the data returned by the server (including http header information and content) $ html = curl_exec ($ ch); // obtain information about the capture. $ httpinfo = curl_getinfo ($ ch); curl_close ($ Ch); if ($ html! = False) {// separate the header and body of the response. because the server may use 302 redirection, therefore, the string must be separated into two + jump times substrings $ httpArr = explode ("\ r \ n", $ html, 2 + $ httpinfo ['redirect _ count']); // The second penultimate is the http header of the server's last response $ header = $ httpArr [count ($ httpArr) -2]; // The last line is the server's last response content $ body = $ httpArr [count ($ httpArr)-1]; $ header. = "\ r \ n"; // Get the header information of the last response preg_match_all ('/([a-z0-9-_] + ): \ s * ([^ \ r \ n] +) \ r \ n/I ', $ header, $ matches); if (! Empty ($ matches) & count ($ matches) = 3 &&! Empty ($ matches [1]) &! Empty ($ matches [1]) {for ($ I = 0; $ I <count ($ matches [1]); $ I ++) {if (array_key_exists ($ I, $ matches [2]) {$ responseHeaders [$ matches [1] [$ I] = $ matches [2] [$ I] ;}} // Obtain the image suffix if (0 <preg_match ('{(?: [^ \/\] + )\. (Jpg | jpeg | gif | png | bmp) $} I ', $ url, $ matches) {$ originalfilename = $ matches [0]; $ ext = $ matches [1];} else {if (array_key_exists ('content-type', $ responseHeaders )) {if (0 <preg_match ('{image/(\ w +)} I', $ responseHeaders ['content-type'], $ extmatches )) {$ ext = $ extmatches [1] ;}}// save the object if (! Empty ($ ext) {// if the directory does not exist, create the directory if (! Is_dir ($ filepath) {mkdir ($ filepath, 0777, true);} $ filepath. = '/'. $ filename. ". $ ext "; $ local_file = fopen ($ filepath, 'w'); if (false! ==$ Local_file) {if (false! = Fwrite ($ local_file, $ body) {fclose ($ local_file); $ sizeinfo = getimagesize ($ filepath ); return array ('filepath' => realpath ($ filepath), 'width' => $ sizeinfo [0], 'height' => $ sizeinfo [1], 'orginalfilename' =>$ originalfilename, 'filename' => pathinfo ($ filepath, PATHINFO_BASENAME) ;}}} return false ;} /*** check whether the ip address is in a field * @ param string $ ip the ip address to be queried * @ param $ ip address prohibited by arrIP * @ return boolean */public static func Tion ipAccess ($ ip = '0. 0.0.0 ', $ arrIP = array () {$ access = true; $ ip & $ arr_cur_ip = explode ('. ', $ ip); foreach (array) $ arrIP as $ key => $ value) {if ($ value = '*. *. *. * ') {$ access = false; // disable all breaks;} $ 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] = '*')) {// The third section is * or the same if ($ arr_cur_ip [3] = $ Tmp_arr [3]) | ($ tmp_arr [3] = '*') {// The fourth segment is * or the same $ access = false; // in the ip prohibited column, access to break is prohibited; }}} return $ access ;} /*** @ param string $ string original text or ciphertext * @ param string $ operation (ENCODE | DECODE ), the default value is DECODE * @ param string $ key * @ param int $ expiry. the ciphertext validity period is valid during encryption, in seconds, 0 is permanently valid * @ return string the original text after processing or the ciphertext after base64_encode processing ** @ example ** $ a = authcode ('ABC', 'encoding ', 'key'); * $ B = authcode ($ a, 'Decode ', 'Key'); // $ B (abc) ** $ a = authcode ('ABC', 'encoding', 'key', 3600 ); * $ B = authcode ('ABC', 'Decode', 'key'); // within an hour, $ B (abc ), otherwise, $ B is blank */public static function authcode ($ string, $ operation = 'Decode', $ key = '', $ expiry = 3600) {$ ckey_length = 4; // the length of the random key is 0-32. // adding a random key can make the ciphertext uncertain. even if the original text and the key are identical, the encryption result will be different each time, increase the difficulty of cracking. // The larger the value, the larger the ciphertext change law. The ciphertext changes to the power of $ ckey_length = 16 // when this value is 0, no random key $ key = md5 ($ key? $ Key: 'key'); // you can enter the default key value $ keya = md5 (substr ($ key, 0, 16) here )); $ keyb = md5 (substr ($ key, 16, 16); $ keyc = $ ckey_length? ($ Operation = 'decode '? Substr ($ string, 0, $ ckey_length): substr (md5 (microtime (),-$ ckey_length): ''; $ cryptkey = $ keya. md5 ($ keya. $ keyc); $ key_length = strlen ($ cryptkey); $ string = $ operation = 'decode '? Base64_decode (substr ($ string, $ ckey_length): sprintf ('% 010d', $ expiry? $ Expiry + time (): 0 ). substr (md5 ($ string. $ keyb), 0, 16 ). $ string; $ string_length = strlen ($ string); $ result = ''; $ box = range (0,255); $ rndkey = array (); for ($ I = 0; $ I <= 255; $ I ++) {$ rndkey [$ I] = ord ($ cryptkey [$ I % $ key_length]);} for ($ j = $ I = 0; I I <256; $ I ++) {$ j = ($ j + $ box [$ I] + $ rndkey [$ I]) % 256; $ tmp = $ box [$ I]; $ box [$ I] = $ box [$ j]; $ box [$ j] = $ tmp;} for ($ a = $ j = $ I = 0; $ I <$ string_length; $ I ++) {$ a = ($ a + 1) % 256; $ j = ($ j + $ box [$ a]) % 256; $ tmp = $ box [$ a]; $ box [$ a] = $ box [$ j]; $ box [$ j] = $ tmp; $ result. = chr (ord ($ string [$ I]) ^ ($ box [($ box [$ a] + $ box [$ j]) % 256]);} if ($ operation = 'decode') {if (substr ($ result, 0, 10) = 0 | substr ($ result, 0, 10) -time ()> 0) & substr ($ result, 10, 16) = substr (md5 (substr ($ result, 26 ). $ keyb), 0, 16) {return substr ($ result, 26) ;}else {return '';}} else {return $ keyc. str_replace ('=', '', base64_encode ($ result);} public static function gbkToUtf8 ($ str) {return iconv (" GBK "," UTF-8 ", $ str);}/*** get all directories and files contained in the input directory * return * author: flynetcn */static public function deepScanDir ($ dir) in the form of an associated array) {$ fileArr = array (); $ dirArr = array (); $ dir = rtrim ($ dir, '//'); if (is_dir ($ dir )){ $ DirHandle = opendir ($ dir); while (false! ==( $ FileName = readdir ($ dirHandle) {$ subFile = $ dir. DIRECTORY_SEPARATOR. $ fileName; if (is_file ($ subFile) {$ fileArr [] = $ subFile;} elseif (is_dir ($ subFile) & str_replace ('. ', '', $ fileName )! = '') {$ DirArr [] = $ subFile; $ arr = self: deepScanDir ($ subFile); $ dirArr = array_merge ($ dirArr, $ arr ['dir']); $ fileArr = array_merge ($ fileArr, $ arr ['file']);} closedir ($ dirHandle );} return array ('dir' => $ dirArr, 'file' => $ fileArr );} /*** retrieve all files contained in the input directory * returns the * author: flynetcn */static public function get_dir_files ($ dir) {if (is_file ($ dir) in array format )) {return array ($ dir) ;}$ files = array (); if (is_dir ($ dir) & ($ dir_p = Opendir ($ dir) {$ ds = DIRECTORY_SEPARATOR; while ($ filename = readdir ($ dir_p ))! = False) {if ($ filename = '. '| $ filename = '.. ') {continue;} $ filetype = filetype ($ dir. $ ds. $ filename); if ($ filetype = 'dir') {$ files = array_merge ($ files, self: get_dir_files ($ dir. $ ds. $ filename);} elseif ($ filetype = 'file') {$ files [] = $ dir. $ ds. $ filename ;}} closedir ($ dir_p);} return $ files ;}}
Too many lines can't be saved. view and download them completely.
The above content is all described in this article. if you like it, you can download the source code directly.