当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-07 20:04:23 浏览: 评论:0 

在编写代码的时候有个神奇的工具总是好的!下面这里收集了 40+ PHP 代码片段,可以帮助你开发PHP 项目。 之前已经为大家分享了《必须收藏的23个php实用代码片段》。

这些PHP 片段对于PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧~

24. 从 PHP 数据创建 CSV 文件

  1. function generateCsv($data$delimiter = ','$enclosure = '"') { 
  2.   $handle = fopen('php://temp''r+'); 
  3.   foreach ($data as $line) { 
  4.       fputcsv($handle$line$delimiter$enclosure); 
  5.   } 
  6.   rewind($handle); 
  7.   while (!feof($handle)) { 
  8.       $contents .= fread($handle, 8192); 
  9.   } 
  10.   fclose($handle); 
  11.   return $contents

语法:

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

25. 解析 XML 数据

  1. $xml_string="<?xml version='1.0'?> 
  2. <moleculedb> 
  3.   <molecule name='Benzine'
  4.     <symbol>ben</symbol> 
  5.     <code>A</code> 
  6.   </molecule> 
  7.   <molecule name='Water'
  8.     <symbol>h2o</symbol> 
  9.     <code>K</code> 
  10.   </molecule> 
  11. </moleculedb>"; 
  12.      
  13. //load the xml string using simplexml function 
  14. $xml = simplexml_load_string($xml_string); 
  15.      
  16. //loop through the each node of molecule 
  17. foreach ($xml->molecule as $record
  18.   //attribute are accessted by 
  19.   echo $record['name'], ' '
  20.   //node are accessted by -> operator 
  21.   echo $record->symbol, ' '
  22.   echo $record->code, ''

26. 解析 JSON 数据

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

27. 获取当前页面 URL

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

  1. function current_url() 
  2. $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
  3. $validURL = str_replace("&""&"$url); 
  4. return validURL; 

语法:

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

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

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

语法:

  1. <?php 
  2. $handle = "koonktech"
  3. my_twitter($handle); 
  4. ?> 

29. 转发数量

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

  1. function tweetCount($url) { 
  2.   $content = file_get_contents("http://api.tweetmeme.com/url_info?url=".$url); 
  3.   $element = new SimpleXmlElement($content); 
  4.   $retweets = $element->story->url_count; 
  5.   if($retweets){ 
  6.     return $retweets
  7.   } else { 
  8.     return 0; 
  9.   } 

语法:

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

30. 计算两个日期的差

  1. <?php 
  2. $date1 = date'Y-m-d' ); 
  3. $date2 = "2015-12-04"
  4. $diff = abs(strtotime($date2) - strtotime($date1)); 
  5. $years = floor($diff / (365*60*60*24)); 
  6. $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); 
  7. $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 
  8. printf("%d years, %d months, %d days\n"$years$months$days); 
  9. -------------------------------------------------------- OR 
  10. $date1 = new DateTime("2007-03-24"); 
  11. $date2 = new DateTime("2009-06-26"); 
  12. $interval = $date1->diff($date2); 
  13. echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "
  14. // shows the total amount of days (not divided into years, months and days like above) 
  15. echo "difference " . $interval->days . " days "
  16. -------------------------------------------------------- OR 
  17.        
  18.        
  19. /** 
  20.  * Calculate differences between two dates with precise semantics. Based on PHPs DateTime::diff() 
  21.  * implementation by Derick Rethans. Ported to PHP by Emil H, 2011-05-02. No rights reserved. 
  22.  * 
  23.  * See here for original code: 
  24.  * http://svn.php.net/viewvc/php/php-src/trunk/ext/date/lib/tm2unixtime.c?revision=302890&view=markup 
  25.  * http://svn.php.net/viewvc/php/php-src/trunk/ext/date/lib/interval.c?revision=298973&view=markup 
  26.  */ 
  27. function _date_range_limit($start$end$adj$a$b$result
  28.   if ($result[$a] < $start) { 
  29.     $result[$b] -= intval(($start - $result[$a] - 1) / $adj) + 1; 
  30.     $result[$a] += $adj * intval(($start - $result[$a] - 1) / $adj + 1); 
  31.   } 
  32.   if ($result[$a] >= $end) { 
  33.     $result[$b] += intval($result[$a] / $adj); 
  34.     $result[$a] -= $adj * intval($result[$a] / $adj); 
  35.   } 
  36.   return $result
  37. function _date_range_limit_days($base$result
  38.   $days_in_month_leap = array(31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
  39.   $days_in_month = array(31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
  40.   _date_range_limit(1, 13, 12, "m""y", &$base); 
  41.   $year = $base["y"]; 
  42.   $month = $base["m"]; 
  43.   if (!$result["invert"]) { 
  44.     while ($result["d"] < 0) { 
  45.       $month--; 
  46.       if ($month < 1) { 
  47.         $month += 12; 
  48.         $year--; 
  49.       } 
  50.       $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0); 
  51.       $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month]; 
  52.       $result["d"] += $days
  53.       $result["m"]--; 
  54.     } 
  55.   } else { 
  56.     while ($result["d"] < 0) { 
  57.       $leapyear = $year % 400 == 0 || ($year % 100 != 0 && $year % 4 == 0); 
  58.       $days = $leapyear ? $days_in_month_leap[$month] : $days_in_month[$month]; 
  59.       $result["d"] += $days
  60.       $result["m"]--; 
  61.       $month++; 
  62.       if ($month > 12) { 
  63.         $month -= 12; 
  64.         $year++; 
  65.       } 
  66.     } 
  67.   } 
  68.   return $result
  69. function _date_normalize($base$result
  70.   $result = _date_range_limit(0, 60, 60, "s""i"$result); 
  71.   $result = _date_range_limit(0, 60, 60, "i""h"$result); 
  72.   $result = _date_range_limit(0, 24, 24, "h""d"$result); 
  73.   $result = _date_range_limit(0, 12, 12, "m""y"$result); 
  74.   $result = _date_range_limit_days(&$base, &$result); 
  75.   $result = _date_range_limit(0, 12, 12, "m""y"$result); 
  76.   return $result
  77. /** 
  78.  * Accepts two unix timestamps. 
  79.  */ 
  80. function _date_diff($one$two
  81.   $invert = false; 
  82.   if ($one > $two) { 
  83.     list($one$two) = array($two$one); 
  84.     $invert = true; 
  85.   } 
  86.   $key = array("y""m""d""h""i""s"); 
  87.   $a = array_combine($keyarray_map("intval"explode(" "date("Y m d H i s"$one)))); 
  88.   $b = array_combine($keyarray_map("intval"explode(" "date("Y m d H i s"$two)))); 
  89.   $result = array(); 
  90.   $result["y"] = $b["y"] - $a["y"]; 
  91.   $result["m"] = $b["m"] - $a["m"]; 
  92.   $result["d"] = $b["d"] - $a["d"]; 
  93.   $result["h"] = $b["h"] - $a["h"]; 
  94.   $result["i"] = $b["i"] - $a["i"]; 
  95.   $result["s"] = $b["s"] - $a["s"]; 
  96.   $result["invert"] = $invert ? 1 : 0; 
  97.   $result["days"] = intval(abs(($one - $two)/86400)); 
  98.   if ($invert) { 
  99.     _date_normalize(&$a, &$result); 
  100.   } else { 
  101.     _date_normalize(&$b, &$result); 
  102.   } 
  103.   return $result
  104. $date = "2014-12-04 19:37:22"
  105. echo '<pre>'
  106. print_r( _date_diff( strtotime($date), time() ) ); 
  107. echo '</pre>'
  108. ?> 

31. 删除文件夹内容

  1. function Delete($path
  2.   if (is_dir($path) === true) 
  3.   { 
  4.     $files = array_diff(scandir($path), array('.''..')); 
  5.     foreach ($files as $file
  6.     { 
  7.       Delete(realpath($path) . '/' . $file); 
  8.     } 
  9.     return rmdir($path); 
  10.   } 
  11.   else if (is_file($path) === true) 
  12.   { 
  13.     return unlink($path); 
  14.   } 
  15.   return false; 

语法:

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

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

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

语法:

  1. <?php 
  2. $string = "I like chocolates and I like apples"
  3. $words = "apple"
  4. echo highlighter_text($string ,$words); 
  5. ?> 

33. 写入文件

  1. <? 
  2. $filename = 'blog.csv'
  3. $fp = fopen($filename'w'); 
  4. $output = " Hello "
  5. $output .= " World! "
  6. $output .= "\r\n"
  7. fputs($fp$output); 
  8. fclose($fp); 
  9. ?> 

34. 根据 URL 下载图片

  1. function imagefromURL($image,$rename
  2. $ch = curl_init($image); 
  3. curl_setopt($ch, CURLOPT_HEADER, 0); 
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  5. curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
  6. $rawdata=curl_exec ($ch); 
  7. curl_close ($ch); 
  8. $fp = fopen("$rename",'w'); 
  9. fwrite($fp$rawdata); 
  10. fclose($fp); 

语法:

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

35. 检测 URL 是否有效

  1. function isvalidURL($url
  2. $check = 0; 
  3. if (filter_var($url, FILTER_VALIDATE_URL) !== false) { 
  4.  $check = 1; 
  5. return $check

语法:

  1. <?php 
  2. $url = "http://www.phpfensi.com"
  3. $check = checkvalidURL($url); 
  4. echo $check//if returns 1 then URL is valid. 
  5. ?> 

36. 生成二维码

  1. function qr_code($data$type = "TXT"$size ='150'$ec='L'$margin='0')  
  2.    $types = array("URL" =--> "http://""TEL" => "TEL:""TXT"=>"""EMAIL" => "MAILTO:"); 
  3.   if(!in_array($type,array("URL""TEL""TXT""EMAIL"))) 
  4.   { 
  5.     $type = "TXT"
  6.   } 
  7.   if (!preg_match('/^'.$types[$type].'/'$data)) 
  8.   { 
  9.     $data = str_replace("\\", "", $types[$type]).$data
  10.   } 
  11.   $ch = curl_init(); 
  12.   $data = urlencode($data); 
  13.   curl_setopt($ch, CURLOPT_URL, 'http://chart.apis.google.com/chart'); 
  14.   curl_setopt($ch, CURLOPT_POST, true); 
  15.   curl_setopt($ch, CURLOPT_POSTFIELDS, 'chs='.$size.'x'.$size.'&cht=qr&chld='.$ec.'|'.$margin.'&chl='.$data); 
  16.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  17.   curl_setopt($ch, CURLOPT_HEADER, false); 
  18.   curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
  19.   $response = curl_exec($ch); 
  20.   curl_close($ch); 
  21.   return $response

语法:

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

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

  1. function getDistanceBetweenPointsNew($latitude1$longitude1$latitude2$longitude2) { 
  2.   $theta = $longitude1 - $longitude2
  3.   $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  4.   $miles = acos($miles); 
  5.   $miles = rad2deg($miles); 
  6.   $miles = $miles * 60 * 1.1515; 
  7.   $feet = $miles * 5280; 
  8.   $yards = $feet / 3; 
  9.   $kilometers = $miles * 1.609344; 
  10.   $meters = $kilometers * 1000; 
  11.   return compact('miles','feet','yards','kilometers','meters'); 

语法:

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

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

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

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

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

语法:

  1. <?php 
  2. $number = 10; 
  3. echo ordinal($number); //output is 10th 
  4. ?> 

40. 限制文件下载的速度

  1. <?php 
  2. // local file that should be send to the client 
  3. $local_file = 'test-file.zip'
  4. // filename that the user gets as default 
  5. $download_file = 'your-download-name.zip'
  6.     
  7. // set the download rate limit (=> 20,5 kb/s) 
  8. $download_rate = 20.5; 
  9. if(file_exists($local_file) && is_file($local_file)) { 
  10.   // send headers 
  11.   header('Cache-control: private'); 
  12.   header('Content-Type: application/octet-stream'); 
  13.   header('Content-Length: '.filesize($local_file)); 
  14.   header('Content-Disposition: filename='.$download_file); 
  15.     
  16.   // flush content 
  17.   flush();   
  18.   // open file stream 
  19.   $file = fopen($local_file"r");   
  20.   while(!feof($file)) { 
  21.     
  22.     // send the current file part to the browser 
  23.     print fread($fileround($download_rate * 1024));   
  24.     
  25.     // flush the content to the browser 
  26.     flush(); 
  27.     
  28.     // sleep one second 
  29.     sleep(1);   
  30.   }   
  31.     
  32.   // close file stream 
  33.   fclose($file);} 
  34. else { 
  35.   die('Error: The file '.$local_file.' does not exist!'); 
  36. ?> 

41. 把文本转换成图片

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

42. 获取远程文件的大小

  1. function remote_filesize($url$user = ""$pw = ""
  2.   ob_start(); 
  3.   $ch = curl_init($url); 
  4.   curl_setopt($ch, CURLOPT_HEADER, 1); 
  5.   curl_setopt($ch, CURLOPT_NOBODY, 1); 
  6.   if(!emptyempty($user) && !emptyempty($pw)) 
  7.   { 
  8.     $headers = array('Authorization: Basic ' . base64_encode("$user:$pw")); 
  9.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
  10.   } 
  11.   $ok = curl_exec($ch); 
  12.   curl_close($ch); 
  13.   $head = ob_get_contents(); 
  14.   ob_end_clean(); 
  15.   $regex = '/Content-Length:\s([0-9].+?)\s/'
  16.   $count = preg_match($regex$head$matches); 
  17.   return isset($matches[1]) ? $matches[1] : "unknown"

语法

  1. <?php 
  2. $file = "http://www.phpfensi.com/images/logo.png"
  3. $size = remote_filesize($url); 
  4. echo $size
  5. ?> 

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

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

44. 使用 tinyurl 生成短网址

  1. function get_tiny_url($url)  
  2. {  
  3.   $ch = curl_init();  
  4.   $timeout = 5;  
  5.   curl_setopt($ch,CURLOPT_URL,'http://tinyurl.com/api-create.php?url='.$url);  
  6.   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  
  7.   curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);  
  8.   $data = curl_exec($ch);  
  9.   curl_close($ch);  
  10.   return $data;  

语法:

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

45. youtube 下载链接生成器

使用下面的 PHP 片段可以让你的用户下载 Youtube 视频

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

46. Facebook 样式的时间戳

  1. Facebook (x mins age, y hours ago etc) 
  2. function nicetime($date
  3.   if(emptyempty($date)) { 
  4.     return "No date provided"
  5.   } 
  6.       
  7.   $periods     = array("second""minute""hour""day""week""month""year""decade"); 
  8.   $lengths     = array("60","60","24","7","4.35","12","10"); 
  9.       
  10.   $now       = time(); 
  11.   $unix_date     = strtotime($date); 
  12.       
  13.     // check validity of date 
  14.   if(emptyempty($unix_date)) {   
  15.     return "Bad date"
  16.   } 
  17.   // is it future date or past date 
  18.   if($now > $unix_date) {   
  19.     $difference   = $now - $unix_date
  20.     $tense     = "ago"
  21.         
  22.   } else { 
  23.     $difference   = $unix_date - $now
  24.     $tense     = "from now"
  25.   } 
  26.       
  27.   for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { 
  28.     $difference /= $lengths[$j]; 
  29.   } 
  30.       
  31.   $difference = round($difference); 
  32.       
  33.   if($difference != 1) { 
  34.     $periods[$j].= "s"
  35.   } 
  36.       
  37.   return "$difference $periods[$j] {$tense}"

语法:

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

Tags: php实用代码

分享到: