必须收藏的php实用代码片段


Posted in PHP onFebruary 02, 2016

在编写代码的时候有个神奇的工具总是好的!下面这里收集了 40+ PHP 代码片段,可以帮助你开发PHP 项目。 之前已经为大家分享了《必须收藏的23个php实用代码片段》。
这些PHP 片段对于PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧~

24. 从 PHP 数据创建 CSV 文件

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

语法:

<?php
$data[0] = "apple";
$data[1] = "oranges";
generateCsv($data, $delimiter = ',', $enclosure = '"');
?>

25. 解析 XML 数据

$xml_string="<?xml version='1.0'?>
<moleculedb>
  <molecule name='Benzine'>
    <symbol>ben</symbol>
    <code>A</code>
  </molecule>
  <molecule name='Water'>
    <symbol>h2o</symbol>
    <code>K</code>
  </molecule>
</moleculedb>";
   
//load the xml string using simplexml function
$xml = simplexml_load_string($xml_string);
   
//loop through the each node of molecule
foreach ($xml->molecule as $record)
{
  //attribute are accessted by
  echo $record['name'], ' ';
  //node are accessted by -> operator
  echo $record->symbol, ' ';
  echo $record->code, '';
}

26. 解析 JSON 数据

$json_string='{"id":1,"name":"rolf","country":"russia","office":["google","oracle"]} ';
$obj=json_decode($json_string);
//print the parsed data
echo $obj->name; //displays rolf
echo $obj->office[0]; //displays google

27. 获取当前页面 URL
这个 PHP 片段可以帮助你让用户登录后直接跳转到之前浏览的页面

function current_url()
{
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$validURL = str_replace("&", "&", $url);
return validURL;
}

语法:

<?php
echo "Currently you are on: ".current_url();
?>

28. 从任意的 Twitter 账号获取最新的 Tweet

function my_twitter($username)
{
   $no_of_tweets = 1;
   $feed = "http://search.twitter.com/search.atom?q=from:" . $username . "&rpp=" . $no_of_tweets;
   $xml = simplexml_load_file($feed);
  foreach($xml->children() as $child) {
    foreach ($child as $value) {
      if($value->getName() == "link") $link = $value['href'];
      if($value->getName() == "content") {
        $content = $value . "";
    echo '<p class="twit">'.$content.' <a class="twt" href="'.$link.'" title=""> </a></p>';
      }  
    }
  }  
}

语法:

<?php
$handle = "koonktech";
my_twitter($handle);
?>

29. 转发数量
使用这个 PHP 片段可以检测你的页面 URL 有多少转发数量

function tweetCount($url) {
  $content = file_get_contents("http://api.tweetmeme.com/url_info?url=".$url);
  $element = new SimpleXmlElement($content);
  $retweets = $element->story->url_count;
  if($retweets){
    return $retweets;
  } else {
    return 0;
  }
}

语法:

<?php
$url = "http://blog.koonk.com";
$count = tweetCount($url);
return $count;
?>

30. 计算两个日期的差

<?php
$date1 = date( 'Y-m-d' );
$date2 = "2015-12-04";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
-------------------------------------------------------- OR
$date1 = new DateTime("2007-03-24");
$date2 = new DateTime("2009-06-26");
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days ";
// shows the total amount of days (not divided into years, months and days like above)
echo "difference " . $interval->days . " days ";
-------------------------------------------------------- OR
     
     
/**
 * Calculate differences between two dates with precise semantics. Based on PHPs DateTime::diff()
 * implementation by Derick Rethans. Ported to PHP by Emil H, 2011-05-02. No rights reserved.
 *
 * See here for original code:
 * http://svn.php.net/viewvc/php/php-src/trunk/ext/date/lib/tm2unixtime.c?revision=302890&view=markup
 * http://svn.php.net/viewvc/php/php-src/trunk/ext/date/lib/interval.c?revision=298973&view=markup
 */
function _date_range_limit($start, $end, $adj, $a, $b, $result)
{
  if ($result[$a] < $start) {
    $result[$b] -= intval(($start - $result[$a] - 1) / $adj) + 1;
    $result[$a] += $adj * intval(($start - $result[$a] - 1) / $adj + 1);
  }
  if ($result[$a] >= $end) {
    $result[$b] += intval($result[$a] / $adj);
    $result[$a] -= $adj * intval($result[$a] / $adj);
  }
  return $result;
}
function _date_range_limit_days($base, $result)
{
  $days_in_month_leap = array(31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  $days_in_month = array(31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  _date_range_limit(1, 13, 12, "m", "y", &$base);
  $year = $base["y"];
  $month = $base["m"];
  if (!$result["invert"]) {
    while ($result["d"] < 0) {
      $month--;
      if ($month < 1) {
        $month += 12;
        $year--;
      }
      $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
      $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
      $result["d"] += $days;
      $result["m"]--;
    }
  } else {
    while ($result["d"] < 0) {
      $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0);
      $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month];
      $result["d"] += $days;
      $result["m"]--;
      $month++;
      if ($month > 12) {
        $month -= 12;
        $year++;
      }
    }
  }
  return $result;
}
function _date_normalize($base, $result)
{
  $result = _date_range_limit(0, 60, 60, "s", "i", $result);
  $result = _date_range_limit(0, 60, 60, "i", "h", $result);
  $result = _date_range_limit(0, 24, 24, "h", "d", $result);
  $result = _date_range_limit(0, 12, 12, "m", "y", $result);
  $result = _date_range_limit_days(&$base, &$result);
  $result = _date_range_limit(0, 12, 12, "m", "y", $result);
  return $result;
}
/**
 * Accepts two unix timestamps.
 */
function _date_diff($one, $two)
{
  $invert = false;
  if ($one > $two) {
    list($one, $two) = array($two, $one);
    $invert = true;
  }
  $key = array("y", "m", "d", "h", "i", "s");
  $a = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $one))));
  $b = array_combine($key, array_map("intval", explode(" ", date("Y m d H i s", $two))));
  $result = array();
  $result["y"] = $b["y"] - $a["y"];
  $result["m"] = $b["m"] - $a["m"];
  $result["d"] = $b["d"] - $a["d"];
  $result["h"] = $b["h"] - $a["h"];
  $result["i"] = $b["i"] - $a["i"];
  $result["s"] = $b["s"] - $a["s"];
  $result["invert"] = $invert ? 1 : 0;
  $result["days"] = intval(abs(($one - $two)/86400));
  if ($invert) {
    _date_normalize(&$a, &$result);
  } else {
    _date_normalize(&$b, &$result);
  }
  return $result;
}
$date = "2014-12-04 19:37:22";
echo '<pre>';
print_r( _date_diff( strtotime($date), time() ) );
echo '</pre>';
?>

31. 删除文件夹内容

function Delete($path)
{
  if (is_dir($path) === true)
  {
    $files = array_diff(scandir($path), array('.', '..'));
    foreach ($files as $file)
    {
      Delete(realpath($path) . '/' . $file);
    }
    return rmdir($path);
  }
  else if (is_file($path) === true)
  {
    return unlink($path);
  }
  return false;
}

语法:

<?php
$path = "images/";
Delete($path); // This will delete images folder along with its contents.
?>

32. 搜索和高亮字符串中的关键字

function highlighter_text($text, $words)
{
  $split_words = explode( " " , $words );
  foreach($split_words as $word)
  {
    $color = "#4285F4";
    $text = preg_replace("|($word)|Ui" ,
      "<span style=\"color:".$color.";\"><b>$1</b></span>" , $text );
  }
  return $text;
}

语法:

<?php
$string = "I like chocolates and I like apples";
$words = "apple";
echo highlighter_text($string ,$words);
?>

33. 写入文件

<?
$filename = 'blog.csv';
$fp = fopen($filename, 'w');
$output = " Hello ";
$output .= " World! ";
$output .= "\r\n";
fputs($fp, $output);
fclose($fp);
?>

34. 根据 URL 下载图片

function imagefromURL($image,$rename)
{
$ch = curl_init($image);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata=curl_exec ($ch);
curl_close ($ch);
$fp = fopen("$rename",'w');
fwrite($fp, $rawdata);
fclose($fp);
}

语法:

<?php
$url = "http://koonk.com/images/logo.png";
$rename = "koonk.png";
imagefromURL($url,$rename);
?>

35. 检测 URL 是否有效

function isvalidURL($url)
{
$check = 0;
if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
 $check = 1;
}
return $check;
}

语法:

<?php
$url = "http://koonk.com";
$check = checkvalidURL($url);
echo $check; //if returns 1 then URL is valid.
?>

36. 生成二维码

function qr_code($data, $type = "TXT", $size ='150', $ec='L', $margin='0') 
{
   $types = array("URL" =--> "http://", "TEL" => "TEL:", "TXT"=>"", "EMAIL" => "MAILTO:");
  if(!in_array($type,array("URL", "TEL", "TXT", "EMAIL")))
  {
    $type = "TXT";
  }
  if (!preg_match('/^'.$types[$type].'/', $data))
  {
    $data = str_replace("\\", "", $types[$type]).$data;
  }
  $ch = curl_init();
  $data = urlencode($data);
  curl_setopt($ch, CURLOPT_URL, 'http://chart.apis.google.com/chart');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, 'chs='.$size.'x'.$size.'&cht=qr&chld='.$ec.'|'.$margin.'&chl='.$data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  $response = curl_exec($ch);
  curl_close($ch);
  return $response;
}

语法:

<?php
header("Content-type: image/png");
echo qr_code("http://koonk.com", "URL");
?>

37. 计算两个地图坐标之间的距离

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
  $theta = $longitude1 - $longitude2;
  $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
  $miles = acos($miles);
  $miles = rad2deg($miles);
  $miles = $miles * 60 * 1.1515;
  $feet = $miles * 5280;
  $yards = $feet / 3;
  $kilometers = $miles * 1.609344;
  $meters = $kilometers * 1000;
  return compact('miles','feet','yards','kilometers','meters');
}

语法:

<?php
$point1 = array('lat' => 40.770623, 'long' => -73.964367);
$point2 = array('lat' => 40.758224, 'long' => -73.917404);
$distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
foreach ($distance as $unit => $value) {
  echo $unit.': '.number_format($value,4).'';
}
?>

38. 获取一个特定话题标签的所有 Tweets

function getTweets($hash_tag) {
  $url = 'http://search.twitter.com/search.atom?q='.urlencode($hash_tag) ;
  echo "<p>Connecting to <strong>$url</strong> ...</p>";
  $ch = curl_init($url);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
  $xml = curl_exec ($ch);
  curl_close ($ch);
  //If you want to see the response from Twitter, uncomment this next part out:
  //echo "<p>Response:</p>";
  //echo "<pre>".htmlspecialchars($xml)."</pre>";
  $affected = 0;
  $twelement = new SimpleXMLElement($xml);
  foreach ($twelement->entry as $entry) {
    $text = trim($entry->title);
    $author = trim($entry->author->name);
    $time = strtotime($entry->published);
    $id = $entry->id;
    echo "<p>Tweet from ".$author.": <strong>".$text."</strong> <em>Posted ".date('n/j/y g:i a',$time)."</em></p>";
  }
  return true ;
}

39. 添加 th,st,nd 或者 rd 作为数字的后缀

Friday the 13th
function ordinal($cdnl){
  $test_c = abs($cdnl) % 10;
  $ext = ((abs($cdnl) %100 < 21 && abs($cdnl) %100 > 4) ? 'th'
      : (($test_c < 4) ? ($test_c < 3) ? ($test_c < 2) ? ($test_c < 1)
      ? 'th' : 'st' : 'nd' : 'rd' : 'th'));
  return $cdnl.$ext;
}

语法:

<?php
$number = 10;
echo ordinal($number); //output is 10th
?>

40. 限制文件下载的速度

<?php
// local file that should be send to the client
$local_file = 'test-file.zip';
// filename that the user gets as default
$download_file = 'your-download-name.zip';
  
// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5;
if(file_exists($local_file) && is_file($local_file)) {
  // send headers
  header('Cache-control: private');
  header('Content-Type: application/octet-stream');
  header('Content-Length: '.filesize($local_file));
  header('Content-Disposition: filename='.$download_file);
  
  // flush content
  flush();  
  // open file stream
  $file = fopen($local_file, "r");  
  while(!feof($file)) {
  
    // send the current file part to the browser
    print fread($file, round($download_rate * 1024));  
  
    // flush the content to the browser
    flush();
  
    // sleep one second
    sleep(1);  
  }  
  
  // close file stream
  fclose($file);}
else {
  die('Error: The file '.$local_file.' does not exist!');
}
?>

41. 把文本转换成图片

<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("images/button.png");
$color = imagecolorallocate($im, 255, 255, 255);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
$py = 9;
$fontSize = 1;
imagestring($im, fontSize, $px, $py, $string, $color);
imagepng($im);
imagedestroy($im);
?>

42. 获取远程文件的大小

function remote_filesize($url, $user = "", $pw = "")
{
  ob_start();
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_NOBODY, 1);
  if(!empty($user) && !empty($pw))
  {
    $headers = array('Authorization: Basic ' . base64_encode("$user:$pw"));
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  }
  $ok = curl_exec($ch);
  curl_close($ch);
  $head = ob_get_contents();
  ob_end_clean();
  $regex = '/Content-Length:\s([0-9].+?)\s/';
  $count = preg_match($regex, $head, $matches);
  return isset($matches[1]) ? $matches[1] : "unknown";
}

语法

<?php
$file = "http://koonk.com/images/logo.png";
$size = remote_filesize($url);
echo $size;
?>

43. 使用 imagebrick 进行 pdf 到图像的转换

<?php
$pdf_file  = './pdf/demo.pdf';
$save_to  = './jpg/demo.jpg';   //make sure that apache has permissions to write in this folder! (common problem)
//execute ImageMagick command 'convert' and convert PDF to JPG with applied settings
exec('convert "'.$pdf_file.'" -colorspace RGB -resize 800 "'.$save_to.'"', $output, $return_var);
if($return_var == 0) {       //if exec successfuly converted pdf to jpg
  print "Conversion OK";
}
else print "Conversion failed.".$output;
?>

44. 使用 tinyurl 生成短网址

function get_tiny_url($url) 
{ 
  $ch = curl_init(); 
  $timeout = 5; 
  curl_setopt($ch,CURLOPT_URL,'http://tinyurl.com/api-create.php?url='.$url); 
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
  $data = curl_exec($ch); 
  curl_close($ch); 
  return $data; 
}

语法:

<?php
$url = "http://blog.koonk.com/2015/07/Hello-World";
$tinyurl = get_tiny_url($url);
echo $tinyurl;
?>

45. youtube 下载链接生成器
使用下面的 PHP 片段可以让你的用户下载 Youtube 视频

function str_between($string, $start, $end)
{
$string = " ".$string; $ini = strpos($string,$start); if ($ini == 0) return ""; $ini += strlen($start); $len = strpos($string,$end,$ini) - $ini; return substr($string,$ini,$len); }
function get_youtube_download_link(){
  $youtube_link = $_GET['youtube'];
  $youtube_page = file_get_contents($youtube_link);
  $v_id = str_between($youtube_page, "&video_id=", "&");
  $t_id = str_between($youtube_page, "&t=", "&");
  $flv_link = "http://www.youtube.com/get_video?video_id=$v_id&t=$t_id";
  $hq_flv_link = "http://www.youtube.com/get_video?video_id=$v_id&t=$t_id&fmt=6";
  $mp4_link = "http://www.youtube.com/get_video?video_id=$v_id&t=$t_id&fmt=18";
  $threegp_link = "http://www.youtube.com/get_video?video_id=$v_id&t=$t_id&fmt=17";
  echo "\t\tDownload (right-click > save as):\n\t\t";
  echo "<a href=\"$flv_link\">FLV</a>\n\t\t";
  echo "<a href=\"$hq_flv_link\">HQ FLV (if available)</a>\n\t\t";
  echo "<a href=\"$mp4_link\">MP4</a>\n\t\t";
  echo "<a href=\"$threegp_link\">3GP</a>\n";
}

46. Facebook 样式的时间戳

Facebook (x mins age, y hours ago etc)
function nicetime($date)
{
  if(empty($date)) {
    return "No date provided";
  }
    
  $periods     = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
  $lengths     = array("60","60","24","7","4.35","12","10");
    
  $now       = time();
  $unix_date     = strtotime($date);
    
    // check validity of date
  if(empty($unix_date)) {  
    return "Bad date";
  }
  // is it future date or past date
  if($now > $unix_date) {  
    $difference   = $now - $unix_date;
    $tense     = "ago";
      
  } else {
    $difference   = $unix_date - $now;
    $tense     = "from now";
  }
    
  for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
    $difference /= $lengths[$j];
  }
    
  $difference = round($difference);
    
  if($difference != 1) {
    $periods[$j].= "s";
  }
    
  return "$difference $periods[$j] {$tense}";
}

语法:

<?php
$date = "2015-07-05 03:45";
$result = nicetime($date); // 2 days ago
?>

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
php+dbfile开发小型留言本
Oct 09 PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
PHP日期和时间函数的使用示例详解
Aug 06 PHP
PHP执行linux命令常用函数汇总
Feb 02 #PHP
必须收藏的23个php实用代码片段
Feb 02 #PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 #PHP
PHP自带方法验证邮箱是否存在
Feb 01 #PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 #PHP
实例详解PHP中html word 互转的方法
Jan 28 #PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 #PHP
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
js实现每日签到功能
2018/11/29 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
python中常用的九种预处理方法分享
2016/09/11 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
python实现扫描日志关键字的示例
2018/04/28 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
浅析Python 条件控制语句
2020/07/15 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
生日派对邀请函
2014/01/13 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
敬老月活动总结
2014/08/28 职场文书
单位实习介绍信
2015/05/05 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
Python 正则模块详情
2021/11/02 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript