程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP一些實用的自定義函數收集

PHP一些實用的自定義函數收集

編輯:關於PHP編程

雖然PHP自帶的函數庫很強大,但是在日常很多情況下,我們也還得自己寫自定義的函數去實現某些功能與需求。下面收集了一些比較實用的、解決一些常見需求的自定義函數,比如將網址字符串轉換成超級鏈接、列出目錄內容、驗證郵件地址等等,如果你覺得好,可以收藏本頁,方便以後翻閱~

1. PHP可閱讀隨機字符串

此代碼將創建一個可閱讀的字符串,使其更接近詞典中的單詞,實用且具有密碼驗證功能。

/************** 
*@length - length of random string (must be a multiple of 2) 
**************/ 
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生成一個隨機字符串

如果不需要可閱讀的字符串,使用此函數替代,即可創建一個隨機字符串,作為用戶的隨機密碼等。

/************* 
*@l - length of random string 
*/ 
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='[email protected]', $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銷毀目錄

刪除一個目錄,包括它的內容。

/***** 
*@dir - Directory to destroy 
*@virtual[optional]- whether a virtual directory 
*/ 
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":"[email protected]","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="<?xml version='1.0'?> 
<users> 
<user id='398'> 
<name>Foo</name> 
<email>[email protected]</name> 
</user> 
<user id='867'> 
<name>Foobar</name> 
<email>[email protected]</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強制性文件下載

為用戶提供強制性的文件下載功能。

/******************** 
*@file - path to file 
*/ 
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"; 
	} 
} 

12. PHP創建標簽雲

function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 ) 
{ 
	$minimumCount = min( array_values( $data ) ); 
	$maximumCount = max( array_values( $data ) ); 
	$spread = $maximumCount - $minimumCount; 
	$cloudHTML = ''; 
	$cloudTags = array();  
	 
	$spread == 0 && $spread = 1;  
	 
	foreach( $data as $tag => $count ) 
	{ 
		$size = $minFontSize + ( $count - $minimumCount ) 
		* ( $maxFontSize - $minFontSize ) / $spread; 
		$cloudTags[] = '<a style="font-size: ' . floor( $size ) . 'px' 
		. '" href="#" title="\'' . $tag . 
		'\' returned a count of ' . $count . '">' 
		. htmlspecialchars( stripslashes( $tag ) ) . '</a>'; 
	}  
 
	return join( "\n", $cloudTags ) . "\n"; 
} 
/************************** 
**** Sample usage ***/ 
$arr = Array('Actionscript' => 35, 'Adobe' => 22, 'Array' => 44, 'Background' => 43, 
'Blur' => 18, 'Canvas' => 33, 'Class' => 15, 'Color Palette' => 11, 'Crop' => 42, 
'Delimiter' => 13, 'Depth' => 34, 'Design' => 8, 'Encode' => 12, 'Encryption' => 30, 
'Extract' => 28, 'Filters' => 42); 
echo getCloud($arr, 12, 36); 

13. PHP尋找兩個字符串的相似性

PHP 提供了一個極少使用的 similar_text 函數,但此函數非常有用,用於比較兩個字符串並返回相似程度的百分比。

similar_text($string1, $string2, $percent); 
//$percent will have the percentage of similarity 

14. PHP在應用程序中使用 Gravatar 通用頭像

隨著 WordPress 越來越普及,Gravatar 也隨之流行。由於 Gravatar 提供了易於使用的 API,將其納入應用程序也變得十分方便。

/****************** 
*@email - Email address to show gravatar for 
*@size - size of gravatar 
*@default - URL of default gravatar to use 
*@rating - rating of Gravatar(G, PG, R, X) 
*/ 
function show_gravatar($email, $size, $default, $rating) 
{ 
	echo '<img src="http://www.gravatar.com/avatar.php?gravatar_id='.md5($email). 
	'&default='.$default.'&size='.$size.'&rating='.$rating.'" width="'.$size.'px" 
	height="'.$size.'px" />'; 
} 

15. PHP在字符斷點處截斷文字

所謂斷字 (word break),即一個單詞可在轉行時斷開的地方。這一函數將在斷字處截斷字符串。

// Original PHP code by Chirp Internet: www.chirp.com.au 
// Please acknowledge use of this code by including this header. 
function myTruncate($string, $limit, $break=".", $pad="...") { 
	// return with no change if string is shorter than $limit 
	if(strlen($string) <= $limit) 
	return $string;  
	 
	// is $break present between $limit and the end of the string? 
	if(false !== ($breakpoint = strpos($string, $break, $limit))) { 
		if($breakpoint < strlen($string) - 1) { 
			$string = substr($string, 0, $breakpoint) . $pad; 
		} 
	} 
	return $string; 
} 
/***** Example ****/ 
$short_string=myTruncate($long_string, 100, ' '); 

16. PHP文件 Zip 壓縮

/* creates a compressed zip file */ 
function create_zip($files = array(),$destination = '',$overwrite = false) { 
	//if the zip file already exists and overwrite is false, return false 
	if(file_exists($destination) && !$overwrite) { return false; } 
	//vars 
	$valid_files = array(); 
	//if files were passed in... 
	if(is_array($files)) { 
		//cycle through each file 
		foreach($files as $file) { 
		//make sure the file exists 
			if(file_exists($file)) { 
				$valid_files[] = $file; 
			} 
		} 
	} 
	//if we have good files... 
	if(count($valid_files)) { 
		//create the archive 
		$zip = new ZipArchive(); 
		if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
			return false; 
		} 
		//add the files 
		foreach($valid_files as $file) { 
			$zip->addFile($file,$file); 
		} 
		//debug 
		//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;  
 
		//close the zip -- done! 
		$zip->close();  
 
		//check to make sure the file exists 
		return file_exists($destination); 
	} 
	else 
	{ 
		return false; 
	} 
} 
/***** Example Usage ***/ 
$files=array('file1.jpg', 'file2.jpg', 'file3.gif'); 
create_zip($files, 'myzipfile.zip', true); 

17. PHP解壓縮 Zip 文件

/********************** 
*@file - path to zip file 
*@destination - destination directory for unzipped files 
*/ 
function unzip_file($file, $destination){ 
	// create object 
	$zip = new ZipArchive() ; 
	// open archive 
	if ($zip->open($file) !== TRUE) { 
		die (’Could not open archive’); 
	} 
	// extract contents to destination directory 
	$zip->extractTo($destination); 
	// close archive 
	$zip->close(); 
	echo 'Archive extracted to directory'; 
} 

18. PHP為 URL 地址預設 http 字符串

有時需要接受一些表單中的網址輸入,但用戶很少添加 http:// 字段,此代碼將為網址添加該字段。

if (!preg_match("/^(http|ftp):/", $_POST['url'])) { 
   $_POST['url'] = 'http://'.$_POST['url']; 
} 

19. PHP將網址字符串轉換成超級鏈接

該函數將 URL 和 E-mail 地址字符串轉換為可點擊的超級鏈接。

function makeClickableLinks($text) { 
	$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)', 
	'<a href="\1">\1</a>', $text); 
	$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', 
	'\1<a href="http://\2">\2</a>', $text); 
	$text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', 
	'<a href="mailto:\1">\1</a>', $text);  
	 
	return $text; 
} 

20. PHP調整圖像尺寸

創建圖像縮略圖需要許多時間,此代碼將有助於了解縮略圖的邏輯。

/********************** 
*@filename - path to the image 
*@tmpname - temporary path to thumbnail 
*@xmax - max width 
*@ymax - max height 
*/ 
function resize_image($filename, $tmpname, $xmax, $ymax) 
{ 
    $ext = explode(".", $filename); 
    $ext = $ext[count($ext)-1];   
 
    if($ext == "jpg" || $ext == "jpeg") 
        $im = imagecreatefromjpeg($tmpname); 
    elseif($ext == "png") 
        $im = imagecreatefrompng($tmpname); 
    elseif($ext == "gif") 
        $im = imagecreatefromgif($tmpname);   
 
    $x = imagesx($im); 
    $y = imagesy($im);   
 
    if($x <= $xmax && $y <= $ymax) 
        return $im;   
 
    if($x >= $y) { 
        $newx = $xmax; 
        $newy = $newx * $y / $x; 
    } 
    else { 
        $newy = $ymax; 
        $newx = $x / $y * $newy; 
    }   
 
    $im2 = imagecreatetruecolor($newx, $newy); 
    imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y); 
    return $im2; 
} 

21. PHP檢測 ajax 請求

大多數的 JavaScript 框架如 jquery,Mootools 等,在發出 Ajax 請求時,都會發送額外的 HTTP_X_REQUESTED_WITH 頭部信息,頭當他們一個ajax請求,因此你可以在服務器端偵測到 Ajax 請求。

if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){ 
    //If AJAX Request Then 
}else{ 
//something else 

22. 關鍵詞高亮

function highlight($sString, $aWords) { 
    if (!is_array ($aWords) || emptyempty ($aWords) || !is_string ($sString)) { 
        return false; 
    } 
 
    $sWords = implode ('|', $aWords); 
    return preg_replace ('@\b('.$sWords.')\b@si', '<strong >$1</strong>', $sString); 
} 

23. 獲取你的Feedburner的用戶

function get_average_readers($feed_id,$interval = 7){ 
    $today = date('Y-m-d', strtotime("now")); 
    $ago = date('Y-m-d', strtotime("-".$interval." days")); 
    $feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feed_id."&dates=".$ago.",".$today; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $feed_url); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    $xml = new SimpleXMLElement($data); 
    $fb = $xml->feed->entry['circulation']; 
 
    $nb = 0; 
    foreach($xml->feed->children() as $circ){ 
        $nb += $circ['circulation']; 
    } 
 
    return round($nb/$interval); 
} 

24. 自動生成密碼

function generatePassword($length=9, $strength=0) { 
    $vowels = 'aeuy'; 
    $consonants = 'bdghjmnpqrstvz'; 
    if ($strength >= 1) { 
        $consonants .= 'BDGHJLMNPQRSTVWXZ'; 
    } 
    if ($strength >= 2) { 
        $vowels .= "AEUY"; 
    } 
    if ($strength >= 4) { 
        $consonants .= '23456789'; 
    } 
    if ($strength >= 8 ) { 
        $vowels .= '@#$%'; 
    } 
 
    $password = ''; 
    $alt = time() % 2; 
    for ($i = 0; $i < $length; $i++) { 
        if ($alt == 1) { 
            $password .= $consonants[(rand() % strlen($consonants))]; 
            $alt = 0; 
        } else { 
            $password .= $vowels[(rand() % strlen($vowels))]; 
            $alt = 1; 
        } 
    } 
    return $password; 
} 

25. 壓縮多個CSS文件

header('Content-type: text/css'); 
ob_start("compress"); 
function compress($buffer) { 
  /* remove comments */ 
  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); 
  /* remove tabs, spaces, newlines, etc. */ 
  $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer); 
  return $buffer; 
} 
 
/* your css files */ 
include('master.css'); 
include('typography.css'); 
include('grid.css'); 
include('print.css'); 
include('handheld.css'); 
 
ob_end_flush(); 

26. 獲取短網址

function getTinyUrl($url) { 
    return file_get_contents("http://tinyurl.com/api-create.php?url=".$url); 
} 

27. 根據生日計算年齡

function age($date){ 
    $year_diff = ''; 
    $time = strtotime($date); 
    if(FALSE === $time){ 
        return ''; 
    } 
 
    $date = date('Y-m-d', $time); 
    list($year,$month,$day) = explode("-",$date); 
    $year_diff = date("Y") – $year; 
    $month_diff = date("m") – $month; 
    $day_diff = date("d") – $day; 
    if ($day_diff < 0 || $month_diff < 0) $year_diff–; 
 
    return $year_diff; 
} 

28. 計算執行時間

//Create a variable for start time 
$time_start = microtime(true); 
 
// Place your PHP/HTML/JavaScript/CSS/Etc. Here 
 
//Create a variable for end time 
$time_end = microtime(true); 
//Subtract the two times to get seconds 
$time = $time_end - $time_start; 
 
echo 'Script took '.$time.' seconds to execute'; 

29. PHP的維護模式

function maintenance($mode = FALSE){ 
    if($mode){ 
        if(basename($_SERVER['SCRIPT_FILENAME']) != 'maintenance.php'){ 
            header("Location: http://example.com/maintenance.php"); 
            exit; 
        } 
    }else{ 
        if(basename($_SERVER['SCRIPT_FILENAME']) == 'maintenance.php'){ 
            header("Location: http://example.com/"); 
            exit; 
        } 
    } 
} 

30. 阻止CSS樣式被緩存

<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" type="text/css" /&glt; 

31. 為數字增加 st\nd\rd 等

function make_ranked($rank) { 
    $last = substr( $rank, -1 ); 
    $seclast = substr( $rank, -2, -1 ); 
    if( $last > 3 || $last == 0 ) $ext = 'th'; 
    else if( $last == 3 ) $ext = 'rd'; 
    else if( $last == 2 ) $ext = 'nd'; 
    else $ext = 'st';  
 
    if( $last == 1 && $seclast == 1) $ext = 'th'; 
    if( $last == 2 && $seclast == 1) $ext = 'th'; 
    if( $last == 3 && $seclast == 1) $ext = 'th';  
 
    return $rank.$ext; 
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved