PHP代码库、使用代码片段整理(2016-04-15更新)

前言

今天闲来无事,看了下自己的浏览器书签,看了以前收藏的一些PHP常用代码片段,想想把这些整理一下,也方便以后利用,说不准哪天就用上了,省得再去自己写,这些一来可以节省时间,二来可以巩固知识,可谓一举两得。

目录索引

1. PHP数组生成 CSV 文件 2. 清除对数据库的恶意代码输入 3. 解压文件Unzip

4. 从网页提取关键字 5. 检查服务器是否是 HTTPS 6. 在任意网页显示源代码

7. 创建数据的URI 8. 取得一个页面中的所有链接 9. 让网页标题变得对搜索引擎更友好

10. 下载和保存远程图片在你的服务器中 11. 验证邮箱、url、数字 12. 自动转化URL为可点击的链接

13. 去除微软word生成的大量标签 14. 检测浏览器语言 15. 显示facebook的好友

16. PHP可阅读随机字符串 17. PHP生成一个随机字符串 18. PHP编码电子邮件地址

19. PHP列出目录内容 20. PHP销毁目录 21. PHP解析 JSON 数据

22. PHP创建日志缩略名 23. PHP获取客户端真实 IP 地址 24. PHP强制性文件下载

25. PHP寻找两个字符串的相似性 26. PHP在应用程序中使用 Gravatar 通用头像 27. PHP在字符断点处截断文字

28. PHP为 URL 地址预设 http 字符串 29. PHP调整图像尺寸 30. PHP检测 ajax 请求

代码库

1. PHP数组生成 CSV 文件

这的确是一个很简单的功能,从一个PHP数组生成一个.csv文件。此函数使用 fputcsv PHP 内置函数生成逗号分隔文件(.CSV)。该函数有3个参数:数据,分隔符和CSV enclosure,默认是双引号。

function generateCsv($data, $delimiter = ',', $enclosure = '"') {
   $handle = fopen('php://temp', 'r+');
   foreach ($data as $line) {
           fputcsv($handle, $line, $delimiter, $enclosure);
   }
   rewind($handle);
   while (!feof($handle)) {
           $contents .= fread($handle, 8192);
   }
   fclose($handle);
   return $contents;
}
2. 清除对数据库的恶意代码输入

这是一个有用的PHP函数,可清理所有的输入数据,降低代码注入的几率

function sanitize_input_data($input_data) {  
    $input_data = trim(htmlentities(strip_tags($input_data,“,”)));  
    if (get_magic_quotes_gpc())  
    $input_data = stripslashes($input_data);  
    $input_data = mysql_real_escape_string($input_data);  
    return $input_data;  
}  

3. 解压文件Unzip

这是一个非常方便的PHP函数,可解压缩zip文件。它有两个参数:压缩文件的路径、目标文件的路径。

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';  
}  

4. 从网页提取关键字

这是一个非常有用的代码片段,可从任何网页中提取meta关键字

$meta = get_meta_tags('http://www.emoticode.net/');  
$keywords = $meta['keywords'];  
// Split keywords  
$keywords = explode(',', $keywords );  
// Trim them  
$keywords = array_map( 'trim', $keywords );  
// Remove empty values  
$keywords = array_filter( $keywords );  

print_r( $keywords ); 

5. 检查服务器是否是 HTTPS

这个PHP代码片段能够读取关于你服务器 SSL 启用(HTTPS)的相关信息。

if ($_SERVER['HTTPS'] != "on") {   
    echo "This is not HTTPS";  
}else{  
    echo "This is HTTPS";  
}  

6. 在任意网页显示源代码

这是简单的PHP代码,用于显示任何网页的源代码,包含行号。

$lines = file('http://google.com/');  
foreach ($lines as $line_num => $line) {   
    // loop thru each line and prepend line numbers  
    echo "Line #<strong>{$line_num}</strong> : " . htmlspecialchars($line) . "  
\n";  
} 

7. 创建数据的URI

因为我们知道,数据URI可以将图像嵌入到HTML、CSS和JS,以节省HTTP请求。这是一个非常实用的PHP代码片段来创建数据URI。

function data_uri($file, $mime) {  
  $contents=file_get_contents($file);  
  $base64=base64_encode($contents);  
  echo "data:$mime;base64,$base64";  
}  

8. 取得一个页面中的所有链接

通过使用此代码段,您可以很容易地提取任何网页上的所有链接。

$html = file_get_contents('http://www.example.com');  

$dom = new DOMDocument();  
@$dom->loadHTML($html);  

// grab all the on the page  
$xpath = new DOMXPath($dom);  
$hrefs = $xpath->evaluate("/html/body//a");  

for ($i = 0; $i < $hrefs->length; $i++) {  
       $href = $hrefs->item($i);  
       $url = $href->getAttribute('href');  
       echo $url.'  
';  
} 

9. 让网页标题变得对搜索引擎更友好

这是个非常有用的PHP函数,能够根据网页标题创建搜索引擎友好的URL。

function make_seo_name($title) {  
    return preg_replace('/[^a-z0-9_-]/i', '', strtolower(str_replace(' ', '-', trim($title))));  
} 

10. 下载和保存远程图片在你的服务器中

如果你想从一个特定的URL下载图像并保存到服务器上,那么这个代码片断刚好满足要求。

$image = file_get_contents('http://www.url.com/image.jpg');  
file_put_contents('/images/image.jpg', $image); //save the image on your server  

11. 验证邮箱、url、数字

简单实用的代码段你懂的

function isEmail( $email )
{
        return preg_match("/^([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,4}([\.][a-z]{2})?$/i" , $email  );
}

function isNumber( $num )
{
        return is_numeric( $num );
}

function isUrl( $url , $preg = false )
{
        if( $preg )
        {
            $status = preg_match ( "/^([^:\/\/])+\:\/\/[\w-]+\.[\w-.\?\/]+$/" , $url );
        }
        else
        {
            $status =  filter_var( $url , FILTER_VALIDATE_URL );
        }

        return $status;
}

12. 自动转化URL为可点击的链接

这个超实用,非常适合快速的转化用户输入的URL地址。在wordpress中,如果我们需要转化URL,只需要调用make_clickable(),如果你在其它地方使用,可以参考下面代码

function _make_url_clickable_cb($matches) {
    $ret = '';
    $url = $matches[2];

    if ( empty($url) )
        return $matches[0];
    // removed trailing [.,;:] from URL
    if ( in_array(substr($url, -1), array('.', ',', ';', ':')) === true ) {
        $ret = substr($url, -1);
        $url = substr($url, 0, strlen($url)-1);
    }
    return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $ret;
}

function _make_web_ftp_clickable_cb($matches) {
    $ret = '';
    $dest = $matches[2];
    $dest = 'http://' . $dest;

    if ( empty($dest) )
        return $matches[0];
    // removed trailing [,;:] from URL
    if ( in_array(substr($dest, -1), array('.', ',', ';', ':')) === true ) {
        $ret = substr($dest, -1);
        $dest = substr($dest, 0, strlen($dest)-1);
    }
    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}

function _make_email_clickable_cb($matches) {
    $email = $matches[2] . '@' . $matches[3];
    return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}

function make_clickable($ret) {
    $ret = ' ' . $ret;
    // in testing, using arrays here was found to be faster
    $ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_url_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret);

    // this one is not in an array because we need it to run last, for cleanup of accidental links within links
    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
    $ret = trim($ret);
    return $ret;
}

13. 去除微软word生成的大量标签

如果你把word里的内容拷贝到web页面,会生成大量的额外标签,下面代码可以帮助你去除这些代码

function cleanHTML($html) {
/// <summary>
/// Removes all FONT and SPAN tags, and all Class and Style attributes.
/// Designed to get rid of non-standard Microsoft Word HTML tags.
/// </summary>
// start by completely removing all unwanted tags

$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>","",$html);

// then run another pass over the html (twice), removing unwanted attributes

$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<\1>",$html);
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=("[^"]*"|'[^']*'|[^>]+)([^>]*)>","<\1>",$html);

return $html
}

14. 检测浏览器语言

以下代码返回用户浏览器使用的语言

function get_client_language($availableLanguages, $default='en'){
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        $langs=explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);

        foreach ($langs as $value){
            $choice=substr($value,0,2);
            if(in_array($choice, $availableLanguages)){
                return $choice;
            }
        }
    } 
    return $default;
}

15. 显示facebook的好友

这个估计天朝用不上

<?php
    $page_id = "YOUR PAGE-ID";
    $xml = @simplexml_load_file("http://api.facebook.com/restserver.php?method=facebook.fql.query&query=SELECT%20fan_count%20FROM%20page%20WHERE%20page_id=".$page_id."") or die ("a lot");
    $fans = $xml->page->fan_count;
    echo $fans;
?>

16. 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;  
} 

17. 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;  
} 

18. PHP编码电子邮件地址

使用此代码,可以将任何电子邮件地址编码为 html 字符实体,以防止被垃圾邮件程序收集。

function encode_email($email=’info@domain.com’, $linkText=’Contact Us’, 
$attrs =’class=”emailencoder”‘ )  
{  
// remplazar aroba y puntos  
$email = str_replace(‘@’, ‘&#64;’, $email);  
$email = str_replace(‘.’, ‘&#46;’, $email);  
$email = str_split($email, 5);  
$linkText = str_replace(‘@’, ‘&#64;’, $linkText);  
$linkText = str_replace(‘.’, ‘&#46;’, $linkText);  
$linkText = str_split($linkText, 5);  
$part1 = ‘<a href=”ma’;  
$part2 = ‘ilto&#58;’;  
$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;  
}

19. 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);  
}  
}  
} 

20. 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;  
}  
} 

21. 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 

22. PHP创建日志缩略名

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

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

23. 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;  
} 

24. 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”;  
}  
} 

25. PHP寻找两个字符串的相似性

PHP 提供了一个极少使用的 similar_text 函数,但此函数非常有用,用于比较两个字符串并返回相似程度的百分比。

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

26. 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” />’;  
} 

27. 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, ‘ ‘); 

28. PHP为 URL 地址预设 http 字符串

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

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

29. 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;  
} 

30. 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  
}