PHP一些实用的自定义函数收集

解决一些常见需求的自定义函数
服务器君一共花费了224.391 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

虽然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='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销毁目录

删除一个目录,包括它的内容。

/***** 
*@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":"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="<?xml version='1.0'?> 
<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强制性文件下载

为用户提供强制性的文件下载功能。

/******************** 
*@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 style="background-color:yellow">$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; 
} 

本文地址:http://www.nowamagic.net/librarys/veda/detail/305,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/305

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《编程之美:微软技术面试心得》 《编程之美》小组 (作者)

《编程之美:微软技术面试心得》是一本让人着迷的书!阅读起来。有些题目的内容会引起强烈的共鸣,尤其是那些自己非常熟悉并且又深知解答的题目;也有一些题目让我异常惊诧,原来除了我所知道的解答思路之外,还有更好的解答以及更深层次的原因。还有一些题目是从来没想到过的。阅读过程是一次愉快的享受,也是脑细胞持续活跃的过程。

更多计算机宝库...