必须收藏的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 相关文章推荐
解析php5配置使用pdo
Jul 03 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
php生成随机颜色方法汇总
Dec 03 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
php微信开发接入
Aug 27 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
php封装的mongodb操作类代码
Aug 06 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
Yii2框架可逆加密简单实现方法
Aug 25 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
php操作xml
2013/10/27 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
ThinkPHP安装和设置
2015/07/27 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
Javascript window对象详解
2014/11/12 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python如何生成树形图案
2018/01/03 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Python 必须了解的5种高级特征
2020/09/10 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
企业办公室主任岗位职责
2014/02/19 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书