PHP 实用代码收集


Posted in PHP onJanuary 22, 2010

1. 可阅读随机字符串

此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。

/************** 
*@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. 生成一个随机字符串

如果不需要可阅读的字符串,使用此函数替代,即可创建一个随机字符串,作为用户的随机密码等。

/************* 
*@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. 编码电子邮件地址

使用此代码,可以将任何电子邮件地址编码为 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. 验证邮件地址

电子邮件验证也许是中最常用的网页表单验证,此代码除了验证电子邮件地址,也可以选择检查邮件域所属 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. 列出目录内容
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. 销毁目录

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

/***** 
*@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. 解析 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. 解析 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. 创建日志缩略名

创建用户友好的日志缩略名。

function create_slug($string){ 
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string); 
return $slug; 
}

10. 获取客户端真实 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. 强制性文件下载

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

/******************** 
*@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. 创建标签云
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 提供了一个极少使用的 similar_text 函数,但此函数非常有用,用于比较两个字符串并返回相似程度的百分比。

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

14. 在应用程序中使用 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. 在字符断点处截断文字

所谓断字 (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. 文件 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. 解压缩 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. 为 URL 地址预设 http 字符串

有时需要接受一些表单中的网址输入,但用户很少添加 http:// 字段,此代码将为网址添加该字段。

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

19. 将网址字符串转换成超级链接

该函数将 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. 调整图像尺寸

创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑。

/********************** 
*@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. 检测 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 
}
PHP 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
利用php生成验证码
Feb 23 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
零基础php编程好学吗
Oct 11 PHP
解决Laravel5.5下的toArray问题
Oct 15 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 #PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 #PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 #PHP
获取远程文件大小的php函数
Jan 11 #PHP
PHP 编程安全性小结
Jan 08 #PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 #PHP
PHP5.3.1 不再支持ISAPI
Jan 08 #PHP
You might like
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php 字符串替换的方法
2012/01/10 PHP
php开发文档 会员收费1期
2012/08/14 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python错误处理详解
2014/09/28 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
python验证身份证信息实例代码
2019/05/06 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
python tkinter基本属性详解
2019/09/16 Python
python numpy 反转 reverse示例
2019/12/04 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
初三政治教学反思
2014/01/30 职场文书
梅花魂教学反思
2014/04/25 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript