forecho 的独立博客

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

Mac Sublime Text 实现 Chrome 快速预览

2015年01月08日

安装

按照 Tools -> Build System -> New Build System… 新建一个「Build System」文件。 写入以下代码:

1
2
3
{
    "cmd": ["open", "-a", "/Applications/Google Chrome.app", "$file"]
}

保存在「~/Library/Application Support/Sublime Text 2/Packages/User」,文件名为「Chrome.sublime-build」。

使用方法

在 Tools -> Build System 选择 Chrome,然后直接按「command+b」快捷键就自动打开 Chrome 了。

参考链接

  1. Sublime Text 2 Browser Preview(youtube 视频要翻墙)
  2. Set up Sublime Text to Preview Your Code in a Web Browser
  3. Sublime Text 2 keyboard shortcut to open file in specified browser (e.g. Chrome)

CakePHP 使用小技巧

2014年11月19日

知道主键 ID 更新一条数据,代码示例:

1
2
$this->Order->id = $id;
$this->Order->saveField('status', $status);

点赞的时候需要+1,如何更新数据库?

1
2
3
4
$this->Widget->updateAll(
    array('Widget.numberfield' => 'Widget.numberfield + 1'),
    array('Widget.id' => 1)
);

如何通过主键最简单的方式获取到一条数据?

1
2
3
4
// 只获取name字段信息
$this->User->read('name', $id);
// 获取所有信息
$this->User->read(null, $id);

安装 Python Pip

2014年11月18日

Windows 安装

  1. 先下载 get-pip.py
  2. 再运行python get-pip.py执行安装程序
  3. 添加环境变量到计算机,例如:C:\Python27\Scripts

Ubuntu安装

  1. 在终端运行sudo apt-get install python-pip

解决asciii码错误

使用Yii的 CMenu

2014年11月17日

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$this->widget('zii.widgets.CMenu',array(
    'activeCssClass'=>'当前热点元素的样式',
    'firstItemCssClass'=>'第一个元素的样式',
    'lastItemCssClass'=>'最后一个元素的样式',
    'htmlOptions'=>array('class'=>'默认样式'),
    'items'=>array(
        array(
            'label'=>'网站概况',
            'url'=>array('/admin'),
            'itemOptions'=>array(
                'class'=>'li_status'
            ),
            'active'=>$this->id=='admin'?true:false
        ),
        array(
            'label'=>'图片管理',
            'url'=>array('/picture'),
            'template'=>'{menu}<span>this is additional infomation</span>',
            'itemOptions'=>array('class'=>'li_picture'),
            'active'=>$this->id=='picture'?true:false,
            'visible'=>true
        ),
        array('label'=>'管理员管理',
            'url'=>array('/manager'),
            'itemOptions'=>array('class'=>'li_manager'),
            'submenuOptions'=>array('class'=>'subclass'),
            'active'=>($this->id=='manager' && $this->action->id!='changepswd')?true:false,
            'visible'=>false
        ),
        array(
            'label'=>'密码修改',
            'url'=>array('/manager/changepswd'),
            'linkOptions'=>array('target'=>'_blank'),
            'itemOptions'=>array(
                'class'=>'li_changepswd'
            ),
            'items'=>array(
                array('label'=>'子栏目')
            ),
            'active'=>($this->id=='manager' && $this->action->id=='changepswd')?true:false,
            'visible'=>true
        ),
        array(
            'label'=>'登陆',
            'url'=>array('/site/login'),
            'itemOptions'=>array('class'=>'li_login'),
            'visible'=>Yii::app()->user->isGuest
        ),
        array(
            'label'=>'退出 ('.Yii::app()->user->name.')',
            'url'=>array('/site/logout'),
            'itemOptions'=>array('class'=>'li_login'),
            'visible'=>!Yii::app()->user->isGuest
        )
    ),
));

说明:

PHP MySQL 表非主键自增长

2014年11月13日

场景

一个活动表,一个活动记录表,活动记录表要根据活动 ID,记录每个人的活动分数和时间等用户参与信息,其中活动记录表有一个字段是用户的编号,每个活动的记录都要从1开始自增。现在的问题是怎么实现这个自增的效果?

表结构如下:

主要说一下活动记录表 activity_records 的 主要字段结构:

字段 注释
id 主键自增
activity_id 活动ID
user_id 用户 ID
number 活动记录编号

解决方案

MacBook 升级 Yosemite 之后 PHP 环境修复

2014年10月19日

Yosemite 终于发布了,我第一时间升级了。但是没想到 PHP 环境受到影响了,直到现在终于修复好了。 一、修复 Apache Apache 好像是换新版本了,升级完系统之后项目打不开了。之前设置好的虚拟主机都无效了。 首先打开 sudo vim /etc/apache2/httpd.conf  这个文件, 1. 开启虚拟主机功能,去掉下面代码的「#」注释:

#Include /private/etc/apache2/extra/httpd-vhosts.conf

改过的代码如下:

Include /private/etc/apache2/extra/httpd-vhosts.conf

2. 如果想开启伪静态,去掉下面代码的「#」注释:

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so

改过的代码如下:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

3. 如果想使用系统自带的 PHP 版本的话,去掉下面代码的「#」注释:

#LoadModule php5_module libexec/apache2/libphp5.so

改过的代码如下:

LoadModule php5_module libexec/apache2/libphp5.so

  以上操作完了之后记得要重启Apache:

sudo apachectl restart

  二、修复虚拟主机 现在我们虽然能用虚拟主机了,但是好像不能解析 PHP 了,打开 /private/etc/apache2/extra/httpd-vhosts.conf 文件在每一个配置里面添加一行下面的代码就可以了: Require all granted 示例如下:

<Directory "/Users/$USER/Sites/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
</Directory>

记得要重启 Apache:

sudo apachectl restart

三、安装 PHP Mcrypt 扩展 这个花费我很长时间,主要是我本来还想用 brew 安装的,省事,但是还是没效果,最后没办法还是编译安装了。

cd ~/Downloads
wget https://github.com/php/php-src/archive/PHP-5.5.14.zip
unzip PHP-5.5.14.zip
cd php-src-PHP-5.5.14/ext/mcrypt/
/usr/bin/phpize
./configure
make
sudo make install

然后拷贝一份 php.ini 配置文件,重装系统这个文件没了:

sudo cp /etc/php.ini.default /etc/php.ini

然后记得在 php.ini 文件里面添加这个扩展,如下面代码: extension = mcrypt.so   以上操作完之后你的 PHP 环境应该又回来了。:) -—————-update 2014年11月02日—————- Yosemite 自带编译安装之后的 PHP 环境 GD 库不支持 png 和 FreeType ,会导致各种验证码出不来,坑。 一键解决办法如下(重新编译使用 PHP5.6):

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

  参考文章: Apache, MySQL & PHP on OS X Yosemite How to Manually Build & Install php-mcrypt on Mac OS X Installing and Configuring Apache, PHP and MySQL on OSX 10.10 Yosemite After upgrade, PHP no longer supports PNG operations

Comments

王晓: hi 博主,我用你上述所说的一键安装GD库,代码已经执行,可是半小时了,为什么还停留在这个界面?

王晓: 上图

ForEcho: 刚开始我也很疑惑,等了半天没反应,后来我发现那个包要100多兆,比较大而且这个服务器是放在国外的,条件允许的话,最好翻墙。

baocaixiong: 用brewHome保平安。

alinwei: 大神,在本地搭建hexo 然后,hexo s 可以正常访问,然后推送到github后,也是正常的,但是二级域名一直是404,等了一天还是,不知道问题出现在哪里,希望大神有时间帮看哈。项目地址:https://github.com/missyun/alinwei.github.io 感谢!!

Mac 升级 Yosemite 之后 PHP 环境修复

2014年10月19日

Yosemite 终于发布了,我第一时间升级了。但是没想到 PHP 环境受到影响了,直到现在终于修复好了。

修复 Apache

Apache 好像是换新版本了,升级完系统之后项目打不开了。之前设置好的虚拟主机都无效了。

首先打开 sudo vim /etc/apache2/httpd.conf 这个文件,

开启虚拟主机功能,去掉下面代码的「#」注释:

1
#Include /private/etc/apache2/extra/httpd-vhosts.conf

改过的代码如下:

1
Include /private/etc/apache2/extra/httpd-vhosts.conf

如果想开启伪静态,去掉下面代码的「#」注释:

1
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so

改过的代码如下:

1
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

### 如果想使用系统自带的 PHP 版本的话,去掉下面代码的「#」注释:

1
#LoadModule php5_module libexec/apache2/libphp5.so

改过的代码如下:

1
LoadModule php5_module libexec/apache2/libphp5.so

以上操作完了之后记得要重启Apache:

1
sudo apachectl restart

修复虚拟主机

PHP 裁剪数组

2014年09月05日

  • 用 array_splice 可以裁剪,原来的数组会被改变,键值会重组
  • 用 array_slice ,原来的数组不会改变,键值可以不用重组

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo '<pre>';
$arrayRaw = array('2' => 'c','3' => 'd', '4' => 'e', '5' => 'f');
echo "0", PHP_EOL;
print_r(array_splice($arrayRaw, 2));
echo "1", PHP_EOL;
print_r($arrayRaw);

$arrayRaw = array('2' => 'c','3' => 'd', '4' => 'e', '5' => 'f');
array_slice($arrayRaw, 0, 2, true);
echo "2", PHP_EOL;
print_r(array_slice($arrayRaw, 0, 2, true));
echo "3", PHP_EOL;
print_r($arrayRaw);
echo '</pre>';

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