46 个非常有用的 PHP 代码片段

来源:互联网 发布:hadoop 数据存储 编辑:程序博客网 时间:2024/04/29 16:50

    在编写代码的时候有个神奇的工具总是好的!在上篇文章《46 个非常有用的 PHP 代码片段(一)》中,我们分享了前20个PHP 代码片段。今天我们继续分享后20+PHP代码片段,它们不仅可以帮助你开发 PHP 项目,而且对于 PHP 初学者也非常有帮助。

21.目录清单

使用下面的 PHP 代码片段可以在一个目录中列出所有文件和文件夹。

function list_files($dir){    if(is_dir($dir))    {        if($handle = opendir($dir))        {            while(($file = readdir($handle)) !== false)            {                if($file != "." && $file != ".." && $file != "Thumbs.db"/*pesky windows, images..*/)                {                    echo '<a target="_blank" href="'.$dir.$file.'">'.$file.'</a><br>'."\n";                }            }            closedir($handle);        }    }}

语法:

<?php    list_files("images/"); //This will list all files of images folder?>

22.检测用户语言

使用下面的 PHP 代码片段可以检测用户浏览器所使用的语言。

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

23.查看 CSV 文件

function readCSV($csvFile){    $file_handle = fopen($csvFile, 'r');    while (!feof($file_handle) ) {        $line_of_text[] = fgetcsv($file_handle, 1024);    }    fclose($file_handle);    return $line_of_text;}

语法:

<?php$csvFile = "test.csv";$csv = readCSV($csvFile);$a = csv[0][0]; // This will get value of Column 1 & Row 1?>

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 moleculeforeach ($xml->molecule as $record){   //attribute are accessted by   echo $record['name'], '  ';   //node are accessted by -> operator   echo $record->symbol, '  ';   echo $record->code, '<br />';}

26.解析 JSON 数据

$json_string='{"id":1,"name":"rolf","country":"russia","office":["google","oracle"]} ';$obj=json_decode($json_string);//print the parsed dataecho $obj->name; //displays rolfecho $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;}

语法:

<?phpecho "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;}

语法:

<?phpheader("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).'<br />';}?>

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

$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.把文本转换成图片

<?phpheader("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 settingsexec('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.<br />".$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><br><br>\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?>

英文原文:46 USEFUL PHP CODE SNIPPETS THAT CAN HELP YOU WITH YOUR PHP PROJECTS
译文源自:http://www.oschina.net/question/2012764_246023

本文转自:http://www.imooc.com/article/1376

0 0
原创粉丝点击