Kairyou's Blog

专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]
  • 长沙、凤凰古城 往返 汽车火车

    / 分类: 生活 / No Comments

    长沙-凤凰 汽车:

    价格都是130左右,行程大概是5个小时
    汽车西站有上午8:30和11:00的,在凤凰汽车站下车(离城区有一段路,需打车)。
    汽车南站有上午10点的,和下午4点的。
    火车站附近的长城宾馆,上午8:30.和10:00、下午2:00、下午4点的,到凤凰的天下凤凰大酒店下车。
     
    长沙-凤凰 火车:
    长沙坐火车-吉首(8个小时左右),吉首火车站坐汽车-凤凰汽车站(一个多小时)
     
    凤凰-长沙 汽车:
    凤凰汽车站-长沙汽车西站
    车型: 49座金龙旅游车,用时:约5小时
    发车时间:上午:08:30、10:30 ;下午:15:00、17:30
     
    凤凰汽车站-长沙汽车南站
    车型: 49座金龙旅游车,用时:约5小时
    发车时间:下午:16.30(每天一班)
     
    凤凰天下凤凰大酒店-长沙韶山北路湘泉宾馆(火车站附近)
    车型:德国进口豪华旅游大巴,带洗手间,用时:约5.5小时
    发车时间:上午:08:30、11:00;下午:14:00 、16:00
     
    票价都是130元/张,路程都大约450公里。
     
    以上都是搜索到的。
    我去凤凰的线路:长沙坐火车-怀化(7个小时左右,凌晨6点左右到,卧铺大概120左右),怀化汽车站-凤凰(好像3-4个小时,目前在修路),下车后步行几百米就到城区了。
     
    我回长沙是直接到凤凰汽车站做车,上午10:00出发,终点是长沙汽车西站,现在的价格是120。
    凤凰的的士司机比较狠,看你是外地人他就不打表的。感谢小杨送我们去汽车站坐车,下车时路上有积水,还把她的鞋子弄脏了。
  • PHP 读取大文件的X行到Y行的内容

    / 分类: 开发,实践 / 5 Comments

    最新写了个小程序,需要读取一个文件的几行内容,但是文件比较大,所以研究了下PHP读取大文件的几行内容的方法,写了一个方法,代码如下(加了注释):

    //返回文件从X行到Y行的内容(支持php5、php4)
    function getFileLines($filename, $startLine = 1, $endLine=50, $method='rb') {
    $content = array();
    $count = $endLine - $startLine;
    if(version_compare(PHP_VERSION, '5.1.0', '>=')){// 判断php版本(因为要用到SplFileObject,PHP>=5.1.0)
    $fp = new SplFileObject($filename, $method);
    $fp->seek($startLine-1);// 转到第N行, seek方法参数从0开始计数
    for($i = 0; $i <= $count; ++$i) {
    $content[]=$fp->current();// current()获取当前行内容
    $fp->next();// 下一行
    }
    }else{//PHP<5.1
    $fp = fopen($filename, $method);
    if(!$fp) return 'error:can not read file';
    for ($i=1;$i<$startLine;++$i) {// 跳过前$startLine行
    fgets($fp);
    }
    for($i;$i<=$endLine;++$i){
    $content[]=fgets($fp);// 读取文件行内容
    }
    fclose($fp);
    }
    return array_filter($content); // array_filter过滤:false,null,''
    }

    Ps:
    上面都没加"读取到末尾的判断":!$fp->eof() 或者 !feof($fp),加上这个判断影响效率,自己加上测试很多很多很多行的运行时间就晓得了,而且这里加上也完全没必要。

    从上面的函数就可以看出来使用SplFileObject比下面的fgets要快多了,特别是文件行数非常多、并且要取后面的内容的时候。fgets要两个循环才可以,并且要循环$endLine次。

    此方法花了不少功夫,测试了很多中写法,就是想得出效率最高的方法。哪位觉得有值得改进的欢迎赐教。

    使用,返回35270行-35280行的内容:

    echo '<pre>';var_dump(getFileLines('test.php',35270,35280));