12 28

Docker创建centos的LNMP镜像

前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记。

安装docker

这个就不说了,不会的可以看下我之前的文章《Docker介绍及安装》。

启动docker

# service docker start

下载docker镜像

官网docker镜像网站:https://www.docker.com/ ,可以在这里查看官网或者第三方的docker镜像。当然如果没有VPN,网络比较慢的情况下,可以考虑使用:https://docker.cn/ ,这是一个国内的镜像网站。

# docker pull docker.cn/docker/centos:centos6

说明:docker pull命令是从远程下载镜像的命令,类似git pull。docker.cn/docker/centos 是国内镜像网站centos镜像的地址,如果要下载官方centos镜像,直接使用centos即可。:centos6是指这个镜像的tag,我下载的是centos6,如果要下载最新版本,可以使用:latest或者:centos7

10 27

Docker介绍及安装

Docker介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。更详细的介绍可以看下《5分钟弄懂Docker》。

Docker安装

这里的安装环境为Centos6.4,其他系统的安装请参考这里

首先,你需要安装EPEL仓库,请看这里EPEL installation instructions

docker的包是由EPEL提供的

如果你已经安装了(不相关)的docker包,它会跟docker-io有冲突,有一个错误报告,如果想继续安装docker-io,请先删除docker。

下一步,来让我们安装docker-io在我们的主机上

升级docker-io包

# sudo yum -y install docker-io

现在我们就安装好了,让我们开始docker进程

# sudo yum -y update docker-io

如果你想让他开机启动,我们需要这样做

# sudo service docker start

现在让我们确认一下docker是否工作了

# sudo chkconfig docker on

运行了,OK你现在去运行hello word的实例吧。

# sudo docker run -i -t fedora /bin/bash
07 22

PHP的Trim截取乱码

一直使用Trim过滤首尾两端的字符串,关于Trim的官方描述:

trim — 去除字符串首尾处的空白字符(或者其他字符)

今天发现一个很奇怪的问题, 代码如下:

<?php
$str = '研发、产品、';
echo trim($str, '、');

猜下这个会返回什么?“研发、产品”?NO,这个居然很奇怪的返回了“研发、产��”。

难道是我的打开方式不对,怎么会返回乱码呢。

经过一番测试,发现一个很有趣的问题。

<?php
echo trim('abacabb', 'ab');   //print 'c'

原本以为这个会返回acabb的,但是居然只返回了c。这就是对trim函数的误解了。

其实这个在官方说明文档的Example是有的,只是我没注意看而已。

trim会循环去掉字符串首位存在的字符。如上面的例子,则执行过程如下:

字符串abacabb会从下标0开始循环,如果存在ab中的字符就去掉,一直到没有就停止循环。

所以执行为:

  • 循环a存在字符串ab中,去掉,剩下bacabb
  • 循环b存在字符串ab中,去掉,剩下acabb
  • 循环a存在字符串ab中,去掉,剩下cabb
  • 循环c不存在字符串ab中,停止循环,所以去掉首字符就剩下:cabb。

但是trim是过滤首尾字符,所以还会从末尾循环去掉。

  • 循环b存在字符串ab中,去掉,剩下cab,
  • 循环b存在字符串ab中,去掉,剩下ca,
  • 循环a存在字符串ab中,去掉,剩下c,
  • 循环c不存在字符串ab中,停止循环,所以去掉末端字符就剩下:c。

所以整个结束后,abacabb就剩下了c了。看到这里对trim函数有所了解了吧。

好了,说回乱码的问题,为什么会出现返回乱码的情况呢。

这是因为在PHP中,字符串函数默认都不是 multibyte-safe 的。如果需要 multibyte-safe 则需要使用mb_系列的函数。

“、”的十六进制码为0xe3 0x80 0x81,对于不是 multibyte-safe 的函数会把它当做三个字符。

而“品”的十六进制码为0xe5 0x93 0x81。这里最后一个0x81刚好符合了,被过滤了。所以才会导致出现乱码的情况。

ok,问题找到了,trim没有mb函数,但是我们可以自己封装一个。Function mb_trim

PS:用了trim好久了,但是一直没有真正了解。看官方文档还是很重要的。

07 09

swfupload上传失败返回RESIZE_ERROR

上传用的是swfupload插件,今天有几张照片死活传不上去,调试发现返回的errorCode为-300。

找到-300在SWFUpload.UPLOAD_ERROR中的RESIZE,Ps:很奇怪,网上很少看到有-300的错误说明,倒是有ERROR_RESIZE这个变量

RESIZE_ERROR - 当调整图像大小时出现了某错误啊

看到这个提示一头雾水,图片本身是没问题的。用PHP 的GD库是可以裁剪的。

后来将message信息打印出来发现如下:Error generating resized image. Resizing: Error #2015

google 搜索发现这个是flash player的问题:

In AIR 1.5 and Flash Player 10, the maximum size for 
a BitmapData object is 8,191 pixels in width or height, 
and the total number of pixels cannot exceed 16,777,215 pixels. 
(So, if a BitmapData object is 8,191 pixels wide, 
it can only be 2,048 pixels high.) 

In Flash Player 9 and earlier and AIR 1.1 and earlier, 
the limitation is 2,880 pixels in height and 2,880 in width.
Starting with AIR 3 and Flash player 11, 
the size limits for a BitmapData object have been removed. 
The maximum size of a bitmap is now dependent on the operating system.

如上说明,图片的高宽不能超过8191px,然后总的像素值不能超过16777215px,总像素值计算为:height px * width px。

查看了下上传图片的px为:高度:5184px, 宽度:3456px。总像素值:5184*3456 = 17915904,这个值大于了flash player的限制了。

用ps打开图片修改下图片大小为:高度:4984px,宽度:3323px,总像素值:4984*3323 = 16561832,刚刚好小于flash player的限制,上传,ok,没问题了。果然是这个限制的问题!

PS:上面说flash player 11版本已经移除了这个限制,改为根据系统进行限制,但是不知道系统限制是如何计算的。反正我升级为flash player14上传也提示这个错误。

2014-11-17日更新

推荐一个由百度开源的上传插件webuploader,可以解决此问题。
官方地址: http://fex.baidu.com/webuploader/
其他有点可以查看官网介绍。

06 16

Centos下安装Ice php扩展

安装ICE的方式有两种,一种下载安装包自己编译,一种是通过yum命令进行安装。

因为Ice需要的包比较多,所以编译安装的话比较麻烦,这里我们就只介绍第二种方式,通过yum安装。以下是官方描述:

The Ice run times and developer kits for all supported language mappings (i386 and x86_64).

You can also install Ice using yum by downloading the repository description (zeroc-ice-amzn1.repo) and installing it in /etc/yum.repos.d. Once installed, you can view the available packages using the following command:

# yum list ice* db53* mcpp-devel

Refer to the EC2 documentation for more information.

yum 安装

首先需要添加一个yum源。

# vi /etc/yum.repos.d/zeroc-ice-amzn.repo

写入:

[zeroc-ice]name=Ice 5 for Amazon Linux $releasever - $basearch

baseurl=http://www.zeroc.com/download/Ice/5/el6/$basearchenabled=1gpgcheck=1gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

官网上说可以通过

# yum list ice* db53* mcpp-devel

查看安装包列表。真正的安装命令是

# yum install -y ice* db53* mcpp-devel

安装完成可以通过命令搜索文件所在路径:

# find / -name IcePHP.so
上一页 下一页