阿辛的网志

书写能让我更好的思考

brew install Error: SHA1 mismatch 的解决方法

on Friday, April 11th, 2014 at 8:18 pm by 阿辛, 5,235 views

今天本子上要装一个mcrypt,然后想顺便把系统的php升级一下,因为用的是php5.4的所以就升级到5.4最新稳定版,结果发现brew upgrade不行,然后重新brew install php54也不行,出现下面的报错:(brew install php54-mcrypt也是类似下面的报错)

1
2
3
4
5
6
7
8
$ brew install php54
==> Downloading http://www.php.net/get/php-5.4.27.tar.bz2/from/this/mirror
######################################################################## 100.0%
Error: SHA1 mismatch
Expected: b468faaf1f88dd4dd5dbeb11283dd9d76c523cd5
Actual: db4e4e75673ed03f4d14014d4d1c6baa444c93a4
Archive: /Library/Caches/Homebrew/php54-5.4.27
(To retry an incomplete download, remove the file above.)

此报错原因是下载的镜像的文件校验码和formula里面的校验码对不上,解决方法很简单:

1. 先brew update一下,然后brew doctor一下(如果诊断有问题,只需要按照提示做就行)
然后再brew install php54,(安装其他包遇到同样报错,也是一样操作)。

一般来说最新的formula更新之后就好了,但如果还是不行的话,做下面这步:

2. 编辑文件/usr/local/Library/Formula/abstract-php-version.rb(如果安装的是其他包,找到对应的文件即可)
将其中需要安装的版本镜像地址修改,比如我修改的是

1
2
3
4
5
6
7
8
9
10
11
12
13
module Php54Defs
  PHP_SRC_TARBALL = 'http://www.php.net/get/php-5.4.27.tar.bz2/from/this/mirror'
  PHP_GITHUB_URL  = 'https://github.com/php/php-src.git'
  PHP_VERSION     = '5.4.27'
  PHP_BRANCH      = 'PHP-5.4'
 
#把 www.php.net 改为 uk1.php.net 如下:
 
module Php54Defs
  PHP_SRC_TARBALL = 'http://uk1.php.net/get/php-5.4.27.tar.bz2/from/this/mirror'
  PHP_GITHUB_URL  = 'https://github.com/php/php-src.git'
  PHP_VERSION     = '5.4.27'
  PHP_BRANCH      = 'PHP-5.4'

然后再brew install php54 php54-mcrypt就ok了,当然这里用的是 uk 的镜像,速度是比较慢的,不过能用就行,就懒得找其他的了。

注意,在这段代码下面,就是文件的3种校验码

1
2
3
4
5
PHP_CHECKSUM = {
                 :md5    => '1c6e99187d25023411b663ea09f145ee',
                 :sha1   => '798f2a803d81b386da62e1986ac0f743ecb6c3be',
                 :sha256 => '09dcc44cded735e1cf1b1b9f2749d1a0fd90e03378b6a70364a662f4740e61e2',
               }

就是因为sha1和下载镜像的文件sha1不一致。

以此类推。

Mac OS下虚拟机IE访问本机.htc文件失效

on Tuesday, February 19th, 2013 at 9:43 am by 阿辛, 5,654 views

换到Mac OS之后,测试IE系列浏览器方法:
1. 安装虚拟机,装一个Windows
2. 安装IETester,(如果是xp系统,IE需要至少升级到7,最好是8)
3. Mac OS中配置Apache弄个虚拟主机(对每个项目自定义一个域名)
4. 修改虚拟机Windows的HOSTS文件,绑定Mac OS的IP和域名,然后就能访问测试本地环境的网站了。

但我发现用于让IE支持css3的.htc文件无法访问,或者说访问的方式不正确,在同事的Mac上试试没问题(他用的是Nginx),所以判定应该是Apache配置的问题,google一番之后发现,要使得IE中网页正确调用.htc文件,应该是直接访问.htc文件的时候浏览器提示是下载此文件,而我直接访问是直接读取了文件(并提示有js错误)。

解决方法:
在Apache配置文件目录中有一个Mime.types文件,打开,并加入下面的代码:
text/x-component htc
重启Apache,清空IE缓存再次访问.htc就变成提示下载此文件,这时候再访问网站,发现问题解决了,IE下面的css3效果出来了。

如果是公用的配置文件,不想修改,也可以在.htaccess中加入(或httpd.conf文件):
AddType text/x-component .htc

原因:Mac OS下Apache配置没有正确识别.htc文件的MIME信息,返回的是 www/unknown(曾经在Windows下面同样是Apache默认配置却不存在此问题)

补充:如果是nginx也只需要在mime.types里面加入text/x-component htc

龙年快乐!

on Saturday, January 21st, 2012 at 9:26 pm by 阿辛, 11,014 views

先给各位朋友拜个早年!祝大家龙年快乐,健康、工作各种好!

2011年,对我来说算是比较平淡的一年,唯一的大事是把婚结了。工作上平平淡淡,忙忙碌碌,不过很多方面都有了明确的方向。

2012年,新的一年里面,希望自己能坚持自己的方向,专注,简单的去做好。对诱惑要忍得住;对错过要放得开;对鸡肋要敢舍弃!

z-index失效及onmouseout失效问题

on Monday, August 29th, 2011 at 10:16 am by 阿辛, 11,611 views

两个都是小技巧问题,就写一起吧。其实并不是失效,而是用的方法不对。

先说z-index,当position为relative或者absolute或者fixed的时候,可以使用z-index指定当前元素的层级关系,值越大元素就越在上面,从而实现盖住下面元素的目的。但是遇到下面这种情况,会发现z-index值大的确盖不住值小的元素:

1
2
3
4
5
6
7
8
9
10
<style>
li { position: relative; width: 100px; height: 50px; background: blue; margin-bottom: 10px; z-index: 1; }
a { position: absolute; top: 0; left: 0; display: block; width: 80px; height: 100px; }
.a1 { background: red; width: 50px; z-index: 3; }
.a2 { background: yellow; z-index: 2; }
</style>
<ul>
    <li><a href="#" class="a1">xinple</a></li>
    <li><a href="#" class="a2">org</a></li>
</ul>

代码运行结果

可以看到,第一个li里面的a元素z-index为3,但是盖不住第二个li里面z-index为2的a元素(如果不设置li的z-index,firefox可以但IE6不行)。这是因为z-index会传递父元素的值,当第一个li中的a去覆盖第二个li里面的a时,因为父元素li的z-index值为1,所以盖不住值为2的元素了,这时候只需要设置父元素的z-index的值大于下面的a2,就实现了:

1
<li style="z-index:4"><a href="#" class="a1">xinple</a></li>

代码运行结果

如果是在同一个父元素下面,则按照z-index值大小来层叠,注意,不管父元素z-index值多大,子元素都能盖再其上面。 浏览全文 »

解决IE6不支持position:fixed问题

on Wednesday, August 24th, 2011 at 9:48 am by 阿辛, 12,423 views

很少的时候,界面上需要一个固定位置的块,不论页面怎么滚动,始终停在它的位置,比如“返回顶部”、“给建议”、“分享按钮”、“广告”等等。css中有position: fixed;可以直接用,很方便,但是万恶的IE6却不支持,下面讲两种方法解决这个问题。

方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
*html {/* 只有IE6支持 */
    background-image: url(about:blank); /* 使用空背景 */
    background-attachment: fixed; /* 固定背景 */
}
#box {
    /* 非IE6浏览器使用固定元素 */
    position: fixed;
    top: 0;
    left: 0;
    /* IE6改为绝对定位,并通过css表达式根据滚动位置更改top的值 */
    _position: absolute;
    _top: expression(eval(document.documentElement.scrollTop));
}

这个方法要注意的是,*html使用固定位置空背景目的是解决滚动的时候抖动的问题,原理是这样,滚动页面浏览器重新计算出网页,然后执行css,所以固定元素产生延迟的抖动,使用固定背景之后,在滚动的时候先执行了css,再重新计算网页,所以没有抖动问题了。
document.documentElement.scrollTop是滚动条偏移的值,可以根据这个来设置位置,比如document.documentElement.scrollTop+200或者使用margin定位也行。

方法二:纯css的解决方法

1
2
3
4
5
6
7
8
html { _overflow: hidden; }
body { _height: 100%; _overflow: auto; }
.box {
    position: fixed;
    left: 10px;
    top: 180px;
    _position: absolute;
}

原理很简单,滚动条是body的滚动,固定元素是相对body定位,那么把它设置窗口那么高,不就一直是在窗口那个位置了?

最后,我选择的是方法一。
虽然第二种看起来简单,但是我想直接设置了html或者body的height和overflow可能会带来未知的界面bug,不太敢用。第一种方法感觉安全一些,而且可以查看淘宝网,也是用的第一种方法。

用HTML5重构网页

on Wednesday, July 27th, 2011 at 9:26 am by 阿辛, 8,122 views

现在HTML5越来越流行,淘宝网很早就开始使用了HTML5的标签了。我因为工作忙一直迟迟没有使用,直到前一阵实在有点忍不住,就一口气把自己的博客用HTML5重构了。

回想五六年前的网站重构,轰轰烈烈,从table到div,从HTML4.0怪异模式到XHTML tranditional到XHTML strict重构了几遍。这次估计因为IE浏览器的限制不会那么流行。但是HTML5是发展的必然趋势,IE9和其他非IE核心的浏览器都已经支持的很好。可喜的是,现在已经有了方案使得小于IE9版本的IE浏览器支持HTML5标签:HTML5 enabling script 而且细心的朋友会发现,淘宝网也是使用的这个js。

原理就是通过Javascript的document.createElement("header");来创建标签,这样就能正常使用css来进行样式定义了(注意官方给出的调用方法,只会在小于IE9版本的IE浏览器才执行此js来创建HTML5标签)。创建的新标签没有block属性,所以我们的css reset还需要加入对新标签的定义例如:header, nav, section, article, aside, footer { display: block; } 浏览全文 »