首页 > 编程技术 > php

php开发中实用的PHP代码片段

发布时间:2016-11-25 15:42

下面我们一起来看我整理了在php开发中一些常用的php函数整理,希望这些函数代码地各位同学同样有帮助哦。

1.关键词高亮

 代码如下 复制代码

function highlight($sString, $aWords) {
 if (!is_array ($aWords) || empty ($aWords) || !is_string ($sString)) {
  return false;
 }

 $sWords = implode ('|', $aWords);
  return preg_replace ('@b('.$sWords.')b@si', '<strong style="background-color:yellow">$1</strong>', $sString);
}

2.获取你的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);
}

3.自动生成密码

 代码如下 复制代码

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';
 } www,111cn.net
 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;
}

4.压缩多个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("rn", "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();

5.获取短网址

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

6.根据生日计算年龄

 代码如下 复制代码

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

7.计算执行时间

 代码如下 复制代码

//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';8.PHP的维护模式
function maintenance($mode = FALSE){
    if($mode){  www.111cn.net

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


9.阻止CSS样式被缓存

 代码如下 复制代码

<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" type="text/css" /&glt;10.数字增加 stndrd 等
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;
}

通过IP判断来源


这是一个非常实用的代码片段,可以帮助你通过IP来判断访客来源。下面的方法通过接收一个参数,然后返回IP所在地点。如果没有找到,则返回UNKNOWN。

 

 代码如下 复制代码
function detect_city($ip) {
 
        $default = 'UNKNOWN';
 
        if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
            $ip = '8.8.8.8';
 
        $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
 
        $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
        $ch = curl_init();
 
        $curl_opt = array(
            CURLOPT_FOLLOWLOCATION  => 1,
            CURLOPT_HEADER      => 0,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_USERAGENT   => $curlopt_useragent,
            CURLOPT_URL       => $url,
            CURLOPT_TIMEOUT         => 1,
            CURLOPT_REFERER         => 'http://' . $_SERVER['HTTP_HOST'],
        );
 
        curl_setopt_array($ch, $curl_opt);
 
        $content = curl_exec($ch);
 
        if (!is_null($curl_info)) {
            $curl_info = curl_getinfo($ch);
        }
 
        curl_close($ch);
 
        if ( preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs) )  {
            $city = $regs[1];
        }
        if ( preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs) )  {
            $state = $regs[1];
        }
 
        if( $city!='' && $state!='' ){
          $location = $city . ', ' . $state;
          return $location;
        }else{
          return $default;
        }
 
    }


 判断一张图片的主色调


下面这个代码非常实用,能帮助你判断一张图片中的主色调,你可以分析任何图片。

 

 代码如下 复制代码
$i = imagecreatefromjpeg("image.jpg");
 
for ($x=0;$x<imagesx($i);$x++) {
    for ($y=0;$y<imagesy($i);$y++) {
        $rgb = imagecolorat($i,$x,$y);
        $r   = ($rgb >> 16) & 0xFF;
        $g   = ($rgb >>  & 0xFF;
        $b   = $rgb & 0xFF;
 
        $rTotal += $r;
        $gTotal += $g;
        $bTotal += $b;
        $total++;
    }
}
 
$rAverage = round($rTotal/$total);
$gAverage = round($gTotal/$total);
$bAverage = round($bTotal/$total);


不显示PHP错误而发送电子邮件取代之


如果你不想在页面中显示PHP错误,也可以通过email来获取错误信息。下面的代码可以帮助你实现。

 

 代码如下 复制代码
<?php
 
// Our custom error handler
function nettuts_error_handler($number, $message, $file, $line, $vars){
    $email = "
        <p>An error ($number) occurred on line
        <strong>$line</strong> and in the <strong>file: $file.</strong>
        <p> $message </p>";
 
    $email .= "<pre>" . print_r($vars, 1) . "</pre>";
 
    $headers = 'Content-type: text/html; charset=iso-8859-1' . "rn";
 
    // Email the error to someone...
    error_log($email, 1, 'you@youremail.com', $headers);
 
    // Make sure that you decide how to respond to errors (on the user's side)
    // Either echo an error message, or kill the entire project. Up to you...
    // The code below ensures that we only "die" if the error was more than
    // just a NOTICE.
    if ( ($number !== E_NOTICE) && ($number < 2048) ) {
        die("There was an error. Please try again later.");
    }
}
 
// We should use our custom function to handle errors.
set_error_handler('nettuts_error_handler');
 
// Trigger an error... (var doesn't exist)
echo $somevarthatdoesnotexist;
今天看一站长用php curl函数实现登录一套系统的同时并且获取登录的cookie并实现用户登录了,下面我把代码整理一下给各位参考。

从去年想这个事情怎么解决,今年终于算是把他搞清楚了,但验证码必须要填。

如果你能像360抢票哪有自动识别验证码,那就没事了。废话不多扯了。回归正题

这里要用CURL。

设计思路:先登录页面获取COOKIES,然后拿着cookies找服务器要验证码。最后提供服务器需要的全部信息。

(这种思维是完全模拟游览器访问页面,根本区别出来是人还机器)

 代码如下 复制代码


public function index(){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url); //填对于的URL就可以了
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //主要cookie的路径,本保存页面cookie
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //返回结果自动输出
  $response = curl_exec($ch);
  curl_close($ch);
    }

访问正方教务系统的首页,第一获取页面中的HTML,第二是获取cookies。
其他的就想问?获取HTML有啥用?

如果你细心观察教务系统首页的HTML的话,你会发现里面有很多隐藏字段,而这些字段又是变化的。
所以你干脆把HTML都获取然后解析,然后把需要的字段都桃出来

HTML结构


看到没有,那么的隐藏字段,都是提交数据的必须,而且不能多。

页面效果


页面效果
接下来我要将一个最重要的问题,怎么获取验证码?

开始我想直接

 代码如下 复制代码


<img" width=100% src="xxxx/CheckCode.aspx" />

不就行了?这样验证码虽然是出来,但这个验证码不属于你,所以在你存远程登录时候,都会告诉你,验证码错误

那怎么获取属于自己的验证码呢?这时候,自然想到的是cookies。

服务器是怎么区分游览器请求是不是同一个人,就看cookies里面的sessionid了

这样。你拿着你在首页获取到的cookies,再找服务器要你的验证码,它会给错?

 代码如下 复制代码

public function getImg()
    {
        $url = "http://xxxx/CheckCode.aspx";
        $filedir = SITE_PATH."/TMP/Cookies";
        $cookie_file =  $filedir."/cookie.txt";
        $ch = curl_init();  www.111cn.net
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_TIMEOUT, "10");
        header("Content-type:image/gif"); //这个视不同图片格式不一样,请注意
        echo  curl_exec($ch);
        curl_close($ch);
    }

然后再在其他页面调用这个方法,你就可以获取到验证码。

CURL的PHP请求跟你游览器发出的PHP属于两个不同的线程,所以,他们的cookies是不同共用的。
————————–
这样你就可以登录了,但不要以为这样登录了,你可以操作全部功能了,那你就想错了。还有一个很小的细节。。

下面我来给各位分享一个php中数组编码转换例子,这里用到了iconv函数,但对于数组我们要加以eval操作才行,下面看例子。

 场景说明/问题描述:

Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据。

自定义函数:

 代码如下 复制代码
function array_iconv($in_charset,$out_charset,$arr){   
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));   

函数说明:
var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回。

范例:

 代码如下 复制代码
 $postdata = $_POST;
$data = array_iconv('gb2312','utf-8',$postdata)
print_r($data);

借助Firefox firebug组件我们可以看到:

php数组编码转换函数的示例

再看下数据库:

 

php数组编码转换函数的示例

可以看到编码已经正常且入库成功

下面给各位同学整理了一些关于php array数组的相关处理函数and str字符串处理与正则表达式,希望文章对你会有所帮助。

数组的相关处理函数:

1)数组的键值操作函数
 
array_values();//获取数组中的值
array_keys();//获取数组中的键
in_array();//检查一个值是否在数组中
array_key_exists();//检查一个键是否在数组中
array_flip();//键和值对调
array_reverse();//数组中的值反转

2)统计数组的元素和唯一性

count();//统计数组的个数
array_count_values();//统计数组中值出现的次数
array_unique();//删除数组中重复值

3)使用回调函数处理数组的函数
 
array_filter();//数组值过滤
array_map();//将回调函数作用到给定数组的单元上

4)数组的排序函数

 
sort();
//按值把数组值进行排序,升序,不保留key
rsort();
//按值把数组值进行排序,降序,不保留key
 
asort();
//按值把数组值进行排序,升序,保留key
arsort();
//按值把数组值进行排序,降序,保留key
 
ksort();
//按键把数组值进行排序,升序,保留key
krsort();
//按键把数组值进行排序,降序,保留key
 
natsort();
//按自然数排序
natcasesort();
//忽略大小写的自然数排序
 
array_multisort();//用一个数组对另外一个数组进行排序
SORT_DESC倒序
SORT_ASC正序  array_multisort($arr2,SORT_DESC,$arr);

5)拆分、合并、分解与结合函数

 
array_slice();//截取一段值 $arr2=array_slice($arr,0,3); 0开始位置,3个 ,返回值:截取的内容
 
array_splice();//截取一段值,保留一段值  
 
返回值:截取后剩下的内容  //array_splice(3,3,"aa"); 从下标3的位置开始向后截取3个值,aa替换截取的内容
 
array_combine();//合并,一个是key,一个是value eg: $arr3=array_combine($arr1,$arr2); $arr1为key值 ,$arr2为值
 
array_merge();  并集  //合并,键值相同,后面覆盖前面 返回一个新数组 $arr3=array_merge($arr1,$arr2);
 
array_intersect();//交集
 
array_diff();//差集
 
implode();//把数组连接成字符串  eg: $str=implode("|" ,$arr);  | 分割符
  
explode();//把字符串分解成数组   eg: $arr=explode('|',$str);


6)数组与数据结构

 
array_pop();//从最后弹出一个值,返回弹出值 //unset($arr[count($arr)-1]);
array_push(); array_push($arr,6);//从最后添加一个值,返回数组个数
//$arr[]="aa";
array_shift();//从前面弹出一个值,返回移出值,原数组下标重排
//unset($arr[0]); 原数组下标不重排
array_unshift();//从前面插入一个值,返回数组个数

7)其他有用的数组处理函数

 
array_rand();//随机取一个key
 
shuffle();//打乱数组
 
array_sum();//数组所有值的和
 
range();//获取一个范围内数组
//range(1,10); 返回数组 array(1,2,3,...,10);
//range(1,10,2); array(1,3,5,7,9);  2代表差值;默认是0不写

字符串处理与正则表达式
————————————————

1.字符串的处理介绍
2.常用的字符串输出函数
3.常用的字符串格式化函数
4.字符串比较函数
5.正则表达式在字符串中的应用
6.与perl兼容的正则表达式函数

字符串的输出:

 
1)echo "hello world www.111cn.net";
2)print "aaaa";
3)die("输出一条错误消息");
4)printf("--%s----%s--",$a,$b);
%s  字符串
%d  数字
%f  浮点型   //%.2f   小数点后面两位
5)sprintf("$s%s",$a,$b);
不直接输出,而是返回值给一个新的变量

常用的字符串格式化函数:
1.去除空格和字符串填补函数
 
ltrim() //去左边空格
rtrim() //去右边空格;
trim()  //去掉两头空格  $str='abc'; trim($str,'b'); echo $str ; 结果 :ac; 可以删除指定的字符串
str_pad() //向字符串里添加空格或字符串
 
<?php
$input = "Alien";
echo str_pad($input, 10);  // 输出 "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // 输出 "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // 输出 "__Alien___"
echo str_pad($input, 6 , "___");   // 输出 "Alien_"
?>

2.字符串大小写转换函数

 
strtolower()
strtoupper()
ucfirst()
ucwords()

3.与html标签相关联的字符串函数

 
nl2br()
htmlspecialchars()
strip_tags()
addslashes()
stripslashes()

4.其他字符串格式化函数

 
strrev()
strlen()//返回字符串的长度
number_format()
md5()   //单向不可逆加密
str_shuffle()  //随机输出字符串

字符串比较函数:
1.按字节进行字符串的比较
1
 
strcmp($str1,$str2) //比较字符串的每个字节
 
strcasecmp()//忽略大小写比较字符串的每个字节

2.按自然排序法时字符串的比较

 
strnatcmp();
//按自然排序比较字符串中的数字

字符串的分割与拼接:
1.分割
 
//把字符串分割成数组
explode()
preg_split('//',$str);

2.拼接
//把数组拼接成字符串

 
implode()
join()  //等于implode();

字符串的截取:

 
substr()

字符串的查找:
 
strstr()//查找指定字符在字符串中的第一次出现
 
 
strrchr()//查找指定字符在字符串中的最后一次出现
 
 
strpos()//w在$str中第一次出现的位置
strrpos($str,'w')//w在$str中最后一次出现的位置

字符串的替换:
1
 
str_replace()

支持多字节文字

 
mb_substr($str,0,7,"utf-8");
mb_strpos();
mb_strrpos();
mb_strstr();
mb_strtoupper();
mb_strtolower();

正则表达式在字符串中的应用:
一.正则表达式介绍
正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割,匹配,查找及替换操作,在php在正则表

达式一般是由正规字符和一些特殊字符联合构成的一个文本模式的程序性描述,这在儿我们使用perl兼容正则表达式
二.正则表达式语法
1.原子 www.111cn.net
1)单个字符,数字
a-z,A-Z,0-9   a-z其中任意一个字符
2)模式单元
(abc) 匹配abc并且成一个单元
3)原子表
[abc]它中的任意一个字符a或b或c
4)重新使用的模式单元
\1,$1
5)普通转义字符
d,D,w,W,s,S
d 匹配一个数字
D 匹配一个非数字
w 匹配字母,数字,下划线
W 除了字母,数字,下划线
s 匹配空白字符,空格,tab
S 除了空白字符,空格,tab
6)转义元字符
*,. []
2.元字符
*,+,?,|,^,$,b,B,[],[^],{m},{m,n},{m,},(),.
d* 一个或多个或0个数字
d+ 一个或多个数字
d? 一个或0个数字
.  任意一个字符
3.模式修正符
i,m,s,U,e
i  忽略大小写
m  视为多行
s  视为一行
U  贪婪模式,最大模式
e  替换的时候用的,可以用函数加工向后引用\1,$1
三.字符串正则表达式函数
1.字符串的匹配与查找
preg_match()
preg_match_all()
preg_grep()
2.字符串的替换
preg_replace()
//问题:正则e修饰符<>
3.字符串的分割与连接
preg_split()
4.正则表达式的web验证应用
1)电子邮件地址
2)url地址
3)电话号码
 
 
ubb编辑器:
 
[url][/url][b]文字[/b]

在php中为我们提供了大量全局变量了我们可以利用它们来帮我们直接获取文件或目录的路么了,下面我找到一篇比较全面的文章加以整理,希望对大家会有帮助。

PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:

 代码如下 复制代码


<?php
/**
 * PHP获取路径或目录实现
 * @link http://www.111cn.net
 */
 
//魔术变量,获取当前文件的绝对路径
echo "__FILE__:  ========>  ".__FILE__; 
echo '<br/>';
 
//魔术变量,获取当前脚本的目录
echo "__DIR__:  ========>  ".__DIR__;
echo '<br/>';
 
//dirname返回路径的目录部分,dirname(__FILE__)相当于__DIR__
echo "dirname(__FILE__):  ========>  ".dirname(__FILE__);
echo '<br/>';
 
//$_SERVER['PHP_SELF']和$_SERVER['SCRIPT_NAME']的结果一般相同,他们都是获取当前脚本的文件名
//只有当php以cgi方式运行时有区别,但是现在几乎找不到以cgi方式运行php了
echo '$_SERVER["PHP_SELF"]:  ========>  '.$_SERVER['PHP_SELF'];
echo '<br/>';
 
echo '$_SERVER["SCRIPT_NAME"]:  ========>  '.$_SERVER['SCRIPT_NAME'];
echo '<br/>';
 
//当前执行脚本的绝对路径。记住,在CLI方式运行php是获取不到的
echo '$_SERVER["SCRIPT_FILENAME"]:  ========>  '.$_SERVER['SCRIPT_FILENAME'];
echo '<br/>';
 
//当前运行脚本所在的文档根目录。在服务器配置文件中定义。
echo '$_SERVER["DOCUMENT_ROOT"]:  ========>  '.$_SERVER['DOCUMENT_ROOT'];
echo '<br>';
 
//getcwd()返回当前工作目录
echo "getcwd():  ========>  ".getcwd();
echo '<br>';
 
echo '<br>';
echo "php教程(www.111cn.net)整理";


(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。
 
$_SERVER['HTTP_HOST'] 取得当前请求的Host:头部内容
$_SERVER['PHP_SELF']这可能是我们最为经常用到的了,它返回当前调用 的页的文件名,如果是http://localhost/test/2005/test.php, 那么将会返回/test/2005/test.php
$_SERVER['SCRIPT_NAME']它将返回包含当前脚本的路径。这在页面需要指向自己时非常有用
$_SERVER['SCRIPT_FILENAME']它将返回当前文件所在的绝对路径信息
$_SERVER['REQUEST_URI']返回访问此页面所需的URI,包括"/"

当然还有许多路径函数:
dirname(),返回路径信息中的目录部分,前面是带有"/"的
basename()返回路径中的基本的文件名部分,当然也可以设置后缀来控制输出。
realpath(),返回路径信息的绝对规范化的路径

标签:[!--infotagslink--]

您可能感兴趣的文章: