zoukankan      html  css  js  c++  java
  • PHP实用代码片段(三)

    1. 目录清单

    使用下面的 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>'."
    ";
                    }
                }
                closedir($handle);
            }
        }
    }

    语法:

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

    2. 检测用户语言

    使用下面的 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;
    }

    3. 查看 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
    ?>

    4. 从 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 = '"');
    ?>

    5. 解析 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, '<br />';
    }

    6. 解析 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

    7. 获取当前页面 URL

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

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

    语法:

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

    8. 从任意的 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="">&nbsp; </a></p>';
                }    
            }
        }    
    }

    语法:

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

    9. 转发数量

    使用这个 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;
    ?>

    10. 计算两个日期的差

    <?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
    ", $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>'; 
    ?>
  • 相关阅读:
    关于内存对齐的一点理解
    绿萝记
    《程序是怎样跑起来的》读书笔记——第五章 内存和磁盘的亲密关系
    《程序是怎样跑起来的》读书笔记——第四章 熟练使用有棱有角的内存
    《程序是怎样跑起来的》读书笔记——第三章 计算机进行小数运算时出错的原因
    《程序是怎样跑起来的》读书笔记——第二章 数据是用二进制数表示的
    《程序是怎样跑起来的》读书笔记——第一章 对程序员来说CPU是什么
    代理模式--学习记录
    latex学习--基础知识
    JavaIO之File类
  • 原文地址:https://www.cnblogs.com/phperlinxinlan/p/8473623.html
Copyright © 2011-2022 走看看