forecho 的独立博客

把生命浪费在美好的事物上

CakePHP 使用插件导出 CSV 文件

2014年09月05日

插件地址:https://github.com/josegonzalez/cakephp-csvview

用法就不说了,上面写的很详细了,补充两点吧。

1. 是数字显示的问题

有时候数字很大,导出的文件打开,数字变成科学计数法显示了,这显然不是我们想要的,手动在每个值后面添加一个制表符「\t」就解决这个问题了。代码如下:

1
2
3
4
5
foreach ($data as $key => $value) {
    $item[$key]['username'] = $value['username']. "\t";
    $item[$key]['mobile']   = $value['mobile'] . "\t";
    $item[$key]['created']  = $value['created'] . "\t";
}

PHP - Isset 与 Empty 的区别

2014年09月05日

当一个变量没有声明的时候,第一个 if 会报错

1
2
3
4
5
6
7
8
9
if ($a) {
   echo $a.'1'.PHP_EOL;
}
if (!empty($a)) {
   echo $a.'2'.PHP_EOL;
}
if (isset($a)) {
   echo $a.'3'.PHP_EOL;
}

Hello Octopress

2014年08月31日

大名鼎鼎的 Octopress 总算安装成功了,但是 WordPress 里面的文章一直导入成功,但是显示不成功,详情页打开是空白的,哎,有时间再折腾吧。

至于搭建教程网上一搜一大把,我就不说了,本博客是搭建 GitCafe 上的,国内服务器网速快。

截取以xx结尾的词

2014年05月14日

1
2
3
4
5
6
7
8
9
function endsWith($haystack, $needle)
{
   $length = strlen($needle);
   if ($length == 0) {
       return true;
   }

   return (substr($haystack, -$length) === $needle);
}

最近我有话要说

2014年04月22日

清明节回来的第一个周五,公司搞了一次春游活动,去了一躺厦门玩。

厦门是个好地方,可以说是旅游有好地方,可以说一年四季没有淡季。这次是跟团去的,导游带着我们逛,感觉像赶场子一样,反正每去一个地方停留的时间不会太长,导致整个厦门游回来对景区什么的倒是没什么印象。导游说话挺有意思的,跟我们讲了很多关于厦门的历史,去的时候我是对厦门一无所知的,到现在对厦门历史还算有了很大的理解。

导游在车上讲历史的时候,喜欢问「你们知道为什么吗?」,有人就很无聊的「猜」,那种「插话」让人感觉到他很无知,会觉得他很讨厌。感觉知道的话会很博学多才,怎么说呢?反正就是第一次觉得懂得多的人其实是很重要,这一点直接导致我想看《历史是什么玩意儿》这本书了,并且昨天已经开始看了。并且以后还会继续通过看书来增长自己的见识的。

回来之后就开始忙工作了,因为有些活很急,回来之后加了两天很晚的班。因为微信支付接口。

「因为这个接口刚出来,除了看文档,没有其他资料了」、「因为我对这个项目不太熟,所以会比较慢」,好吧,这都不应该算借口。「没有过不去的火焰山」,同样也没有解决不了的问题。延期了一个星期,我们一边加班一边跟着总监的指导,总算最终过了这倒门槛,下面我来总结一下这个模块开发的教训:

  1. 先做 Demo。不论是不是做接口开发,能先写 Demo 的尽量先从 Demo 开始。然后慢慢的完善。这个就好比画画,我们要先画结构图,再慢慢的描,最好越画越细致。大多数我们拿到一个功能需求文档,第一件事是开始设计数据库,巴拉巴拉的,然后等开始写代码的时候就开始发现之前设计的数据库不够好,然后又要改。所以从 Demo 开始,这个习惯一定要养成。
  2. 尽量封装。能封装的模块,就封装,最好能写个接口给别人调用,然后返回给他要的数据就可以了。这样开发的好处就是可以给多个项目使用,有时候开发一个功能要考虑的周全一些。
  3. JavaScript 是不能跨域的。之前调试发货接口的时候老是跑不通,花了一天时间都毫无进展,直到最后发现发货这块是用 JavaScript 实现的,但是 JavaScript 是不能跨域的。
  4. 出了问题先从自身的代码找原因,不要轻易的下结论。
  5. 做事情要做100%,不要做80%。
  6. 出现问题,首先要立刻拿出问题的解决方案,而不是说「这块功能不是我写的,我不知道,改怎么处理」。

Comments

乔巴瑞: 厚积薄发~ 我也觉得跟团玩总是急匆匆的,以后我也想去厦门玩,但是会选择自由行的那种

ForEcho: 从公司的角度来说,报团可能是最好的的选择了。但是对我们个人来说,不跟团是最好的。我自己玩是不跟团的。

MySQL 查询今日的数据数量

2014年04月22日

数据库我们存放的时间戳格式。

方法一:

先用PHP计算出时间戳。

1
2
// 获取今天开始的时间戳
$today = strtotime(date('Y-m-d 00:00:00', time()));

这个值就是今天凌晨的时间戳。 然后查询的时间大于这个值就可以了。

方法二:

直接用MySQ语句查询当天的记录。

1
SELECT * FROM message WHERE DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') ORDER BY id DESC

来深圳也一年了

2014年03月16日

2013年3月12号的票来的深圳,到现在已经满一年了。来说说感受吧。

慢慢的从一开始很反感加班,到现在开始接受加班,但是还是开始坚持自己的原则 - 提高自己的工作效率,尽量去减少没必要的加班。

慢慢的也能接受深圳快节奏的生活,每天上班一个小时的路程(半个小时地铁半个小时走路)的情况,上班也开始习惯在地铁上用 Kindle看书了,有时候都会感觉上班地铁时间太少。

1年来虽然小换了几份工作,但是对现在的公司还是比较满意的。公司有着十几个 PHP 工程师,公司氛围也还好,每天开开早会还是很不错的,虽然有时候觉得这早会的30分钟挺浪费时间的。公司给我提供了双显示器,实现了一直想要双屏开发的愿望。双屏开发还是很爽的,要是再配上我的 MacBook 开发就更爽了。

慢慢的也有机会接触比较大的项目了,就比方说现在做的微信统一企业的项目,这个项目做好了之后,相信以后会有更多的机会接触知名公司企业的项目了,到那个时候就会有很大的成就感的,这个在武汉就很难去接触。

深圳很潮湿的,回潮的时候楼梯上有水,刚开始我还以为是房东把楼梯给拖了一遍呢?没想到这个深圳特有的「景象」。

前一段时间跟设计部门开早会的时候,有人提议让其他人说某个人的缺点,一天说一个人,这个想法真不错。但是如果你跟某个人不熟的话还真说不出来,有的人你连第一印象都说不出来。

我记录了一下大家说我的缺点,以后就慢慢改正:

  • 比较闷骚。(好吧,这个我承认)
  • 不够 open。(这个其实跟上个差不多,特别是对女生,想来刚来公司的时候,旁边坐着一个设计的妹子,一个月我基本上没跟她说过话。-_-!!)
  • 有时候讲话的没思路(这个确实有,以前也被人提到过。语言表达能力太差,有时候说着说着自己都不知道自己再讲什么了-_-!!)
  • 胆小(这个确实也有,害怕跟陌生人说话)

基本上我只记住了上面几个。很感谢那些提出我缺点的人,我会慢慢改正的。 最后「做正确的事,等着被开除」,一起努力吧。

解决iPhone/iPad 按钮样式问题

2014年03月06日

你要的左边的按钮的样式,在Android上面显示是 OK 的,但是不知道为什么,iPad 和 iPhone 上面显示却是右边的按钮样式,很难看。 解决办法就是添加下面的代码:

1
-webkit-appearance: none;

或者是:

1
2
3
input[type="button"], input[type="submit"], input[type="reset"] {
    -webkit-appearance: none;
}

参考链接:

CSS submit button weird rendering on iPad/iPhone

CSS input button on iPhone

Mac 安装 PHP5.4 的 Mcrypt 扩展

2014年03月01日

忘记什么时候把 MacBook 的 PHP 版本升级到 PHP5.4了,然后准备学一下 Laravel 这个框架的时候,提醒 Mcrypt 扩展未安装。

安装这个扩展真是头疼,尽管有 Homebrew ,尽管能 Google 到很多英文很好的教程,有简单的命令的,有复杂命令的,但是照着教程敲代码还是安装不成功。

在终端输入 php -v 的时候,会出现下面报错代码:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so, 9): image not found in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

但是我 /etc/php.ini 配置文件里面根本没有 /usr/lib/php/extensions/no-debug-non-zts-20100525/ 这个路径,也不记得这个东西在哪?怎么修改?

剩下的我只能继续 Google,找几份教程一起来,然后我发现了这个:Mcrypt installer for OS X 10.8/10.9 不注意的话,估计会忽略最下面的下载链接

我下载下来试了一下,安装步骤就跟安装软件是一样的,一直点下一步就好了,然后我在输出 phpinfo() 的页面,竟然搜索到了 Mcrypt ,这就说明我安装成功了,然后试了一下 Laravel 首页,果然成功了。

还是这个方便省事,感谢这个软件。

最后分享一个学 Laravel 的资源:https://github.com/maliang/LikeLaravel 

Sublime Text 3配置

2014年02月10日

安装 Packages 1、ctrl+` 2、输入命令:

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

Preferences > Settings -User基本的配置:

{
    "font_size": 13,
    "ignored_packages":
    [
        "Vintage"
    ],
    "spell_check": false,
    "font_face": "YaHei Consolas Hybrid",
    "trim_trailing_white_space_on_save": true, //去除空格
    "update_check": false,
    "word_wrap": false
}

一些基本的插件:

  • Emmet:必装插件。

  • FileHeader:自动给文件加文件的注释信息。

  • TortoiseSVN:结合TortoiseSVN客户端使用。

  • FileDiffs:文件对比插件。

  • BracketHighlighter :高亮显示匹配的括号、引号和标签

  • TrailingSpaces: 高亮显示多余的空格和Tab

  • jQuery:必装插件

  • Alignment :等号对齐

  • CodeFormatter:代码格式化

注:可能是QQ和这个冲突了,自行设置了一下快捷键就可以用了。 打开 Preferences=>Package Settings=>Alignment=>Key Bindding - User 然后写入:

[
    { "keys": ["ctrl+alt+f"], "command": "alignment" }
]

或者改成其他不冲突的快捷键即可。