雖然PHP自帶的函數庫很強大,但在日常很多情況下,我們也得自己寫自訂的函數去實現某些功能與需求。下面收集了一些比較實用的、解決一些常見需求的自訂函數,例如將網址字串轉換成超級連結、列出目錄內容、驗證郵件地址等等
#1. PHP可閱讀隨機字串
此程式碼將建立一個可閱讀的字串,使其更接近字典中的單字,實用且具有密碼驗證功能。
function readable_random_string($length = 6){ $conso=array("b","c","d","f","g","h","j","k","l", "m","n","p","r","s","t","v","w","x","y","z"); $vocal=array("a","e","i","o","u"); $password=""; srand ((double)microtime()*1000000); $max = $length/2; for($i=1; $i<=$max; $i++) { $password.=$conso[rand(0,19)]; $password.=$vocal[rand(0,4)]; } return $password; }
2. PHP產生一個隨機字串
如果不需要可閱讀的字串,使用此函數替代,即可建立一個隨機字串,作為使用者的隨機密碼等。
function generate_rand($l){ $c= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; srand((double)microtime()*1000000); for($i=0; $i < $l; $i++) { $rand.= $c[rand()%strlen($c)]; } return $rand; }
3. PHP編碼電子郵件地址
使用此程式碼,可以將任何電子郵件地址編碼為 html 字元實體,以防止被垃圾郵件程式收集。
function encode_email($email='info@domain.com', $linkText='Contact Us', $attrs ='class="emailencoder"' ) { // remplazar aroba y puntos $email = str_replace('@', '@', $email); $email = str_replace('.', '.', $email); $email = str_split($email, 5); $linkText = str_replace('@', '@', $linkText); $linkText = str_replace('.', '.', $linkText); $linkText = str_split($linkText, 5); $part1 = '<、a href="ma'; $part2 = 'ilto:'; $part3 = '" '. $attrs .' >'; $part4 = '<、/a>'; $encoded = '<、script type="text/javascript">'; $encoded .= "document.write('$part1');"; $encoded .= "document.write('$part2');"; foreach($email as $e) { $encoded .= "document.write('$e');"; } $encoded .= "document.write('$part3');"; foreach($linkText as $l) { $encoded .= "document.write('$l');"; } $encoded .= "document.write('$part4');"; $encoded .= '<、/script>'; return $encoded; }
4. PHP驗證郵件地址
電子郵件驗證也許是中最常用的網頁表單驗證,此程式碼除了驗證電子郵件地址,也可以選擇檢查郵件網域所屬DNS 中的MX 記錄,讓郵件驗證功能更強大。
function is_valid_email($email, $test_mx = false) { if(eregi("^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) if($test_mx) { list($username, $domain) = split("@", $email); return getmxrr($domain, $mxrecords); } else return true; else return false; }
5. PHP列出目錄內容
function list_files($dir) { if(is_dir($dir)) { if($handle = opendir($dir)) { while(($file = readdir($handle)) !== false) { if($file != "." && $file != ".." && $file != "Thumbs.db"){ echo '<、a target="_blank" href="'.$dir.$file.'">'.$file.'<、/a><、br>'."\n"; } } closedir($handle); } } }
6. PHP銷毀目錄
刪除一個目錄,包括它的內容。
function destroyDir($dir, $virtual = false) { $ds = DIRECTORY_SEPARATOR; $dir = $virtual ? realpath($dir) : $dir; $dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir; if (is_dir($dir) && $handle = opendir($dir)) { while ($file = readdir($handle)) { if ($file == '.' || $file == '..') { continue; } elseif (is_dir($dir.$ds.$file)) { destroyDir($dir.$ds.$file); } else { unlink($dir.$ds.$file); } } closedir($handle); rmdir($dir); return true; } else { return false; } }
7. PHP解析JSON 資料
與大多數流行的Web 服務如twitter 透過開放API 來提供資料一樣,它總是能夠知道如何解析API 資料的各種傳送格式,包括JSON,XML 等等。
$json_string='{"id":1,"name":"foo","email":"foo@foobar.com","interest":["wordpress","php"]} '; $obj=json_decode($json_string); echo $obj->name; //prints foo echo $obj->interest[1]; //prints php
8. PHP解析 XML 資料
//xml string $xml_string=" <、users> <、user id='398'> <、name>Foo<、/name> <、email>foo@bar.com<、/name> <、/user> <、user id='867'> <、name>Foobar<、/name> <、email>foobar@foo.com<、/name> <、/user> <、/users>"; //load the xml string using simplexml $xml = simplexml_load_string($xml_string); //loop through the each node of user foreach ($xml->user as $user) { //access attribute echo $user['id'], ' '; //subnodes are accessed by -> operator echo $user->name, ' '; echo $user->email, '<、br />'; }
9. PHP建立日誌縮寫
建立使用者友善的日誌縮寫。
function create_slug($string){ $slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string); return $slug; }
10. PHP取得客戶端真實 IP 位址
函數將取得使用者的真實 IP 位址,即使他使用代理伺服器。
function getRealIpAddr() { if (!emptyempty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; }
11. PHP強制性檔案下載
為使用者提供強制性的檔案下載功能。
function force_download($file) { if ((isset($file))&&(file_exists($file))) { header("Content-length: ".filesize($file)); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $file . '"'); readfile("$file"); } else { echo "No file selected"; } }
以上是php:總結一些實用的自訂函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!