存档

2015年3月 的存档

find命令详解

2015年3月29日 没有评论

linux查找特定时间变动过的文件,查找与给定文件有时间关系的文件,对于排查问题特别重要,find命令的就是做这个事情的,查找linux下指定时间内做过改动的文件。

find查找今天修改的文件

#查找当前目录一天之前到此时之间修改的文件,也就是过去的24小时内修改的文件。
find ./ -mtime 0

#查找当前目录小于1天(1*24)之前的修改过的文件,也就是24小时内修改的文件,这个和上面的结果一样。
find ./ -mtime -1

#查找当前目录等于1天(1*24)之前的修改过的文件,也就是24小时之前(包括第24小时)修改的文件
find ./ -mtime 1

#查找当前目录大于1天(1*24)之前的修改过的文件,也就是至少2天之前修改的文件。mtime后的参数只能是整数,所以大于1的要从2开始,下面的命令等同于-mtime 2。
find ./ -mtime +1

时间是以 24 小时为一个单位,而不是以天的,从当日起始时开始而不是从24小时之前。
2015/03/29 12:00 时间开始找一天內的,会列出 2015/03/28 12:00 ~ 2015/03/29 12:00 时间內的文件

find与指定时间比较选项参数

-mtime n 文件修改时间,对文件数据的最近一次修改是在 n*24 小时之前

-mmin n 对文件数据的最近一次修改是在 n 分钟之前

-ctime n 文件状修改时间,对文件状态的最近一次修改是在 n*24 小时之前。

-cmin n 件状态修改,对文件状态的最近一次修改是在 n 分钟之前。

-atime n 访问时间,对文件的最近一次访问是在 n*24 小时之前。

-amin n 最后访问时间,对文件的最近一次访问是在 n 分钟之前。

-mtime : 指定时间曾被改动过的文件,意思是文件內容被更改过

-ctime : 指定时间曾被更改过的文件,意思是文件权限被更改过

-atime : 指定时间曾被存取过的文件,意思是文件被读取过

find与指定文件比较参数

-anewer file
对文件的最近一次访问比 file 修改时间要晚。如果命令行中 -follow 在 -anewer 之前,(也只有在这种情况下 -anewer会受 -follow 的影响)。

-cnewer file
对文件状态的最近一次修改比 file 修改时间要晚。如果命令行中 -follow 在 -cnewer 之前,(也只有在这种情况下-cnewer 会受 -follow 的影响)。

find实例
找出 3 天"以前"被改动过的文件 (前第三天以前 → 2015/03/26 12:00 以前的文件) (> 72 小时)
find ./ -mtime +3 -type f -print

找出 3 天內被改动过的文件 (2015/03/26 12:00 ~ 2015/03/29 12:00 內的文件) (0 ~ 72 小时內)
find ./ -mtime -3 -type f -print

找出前第 3 天被改动过的文件 (2015/03/25 12:00 ~ 2015/03/26 12:00 內的文件) (72 ~ 96 小时)
find ./ -mtime 3 -type f -print

找出第 3 天被改动过的文件 (也可以这样写)
find ./ -mtime +2 -mtime -4 -type f -print

分类: linux 标签: , ,

nginx与tomcat多实例搭建

2015年3月28日 没有评论

nginx和tomcat结合也是一个常用的组合,看到一个好的文章,介绍nginx做为方向代理,后端多个tomcat。
实现:一个nginx实例和多个tomcat实例,每个tomcat实例承载唯一的项目,tomcat实例在项目启动时自动启动
阅读全文...

分类: nginx 标签:

connect() failed (111: Connection refused) while connecting to upstream

2015年3月24日 没有评论

nginx是一个方向代理服务器,它负责把http请求转发给另一个服务进程处理(例如php-fpm).
nginx的111错误表示nginx收到了一个请求,但是不能转发给配置文件中配置的的要给转发的进程。

一般发生这种情况都是nginx启动了,但是没有启动服务进程php-fpm,这时候启动或者重启服务进程就可以了。

分类: nginx 标签:

走技术还是走管理

2015年3月16日 6 条评论

工作到了一定年限,特别是工作五年以上没换过工作的人。
大多数人都开始考虑自己的未来在哪里。
因为你会发现团队里基本上就你自己没换了,最多再有2-3个人没换,其它人都换了一波又一波。
无论你身处BAT、还是国企都一样,没有永远的饭碗,只有待遇好心情好前途好,不然就会走人。

那些曾经怎么也不可能换工作的人也换了,说明大家还是积极向上的人。
各种突如其来的变故都会让人没有办法防备,准备的再好也无济于事。
有人离开自然有人补位,补位上来既是机会也是陷阱。

从0到1是创新,从1到100那是苦力。
对于大多数人来说写代码是一个容易的事请,至少比带孩子轻松,一般情况下就是个体力活。
做管理会让人压力倍增,需要去巴结领导,争取好处,把好处分给别人,不断利益交换,不断向上爬。

究竟哪个是自己的菜,不试试永远也不知道。

当每个人都求安逸,人心散了队伍就不好带了。
也许跟球队一样需要推到重建了。

分类: 杂谈 标签:

Godaddy支付宝付款时There was a problem processing your transaction. Please verify your payment information or use an alternate form of payment错误

2015年3月9日 5 条评论

一个在godaddy的域名到期要续费,找了一圈发现基本都要80元一个,没有什么优惠码。
国外注册商只剩下安全不会随意处理账号的优点,正规做站的可以考虑迁回锅内了。

续费的过程中还出了一个错误,怎么弄都不对,编辑了个人信息也不好使,而且也有支付宝和银联的支付选项,就是不让付款。
处理Godaddy付款时的错误提示There was a problem processing your transaction. Please verify your payment information or use an alternate form of payment

搜索看到了这个
@aftwest Problem is not with Payoneer, but its with godaddy, its most of coupon are geo restricted. that’s you are seeing this message, try to use any other coupon i.e. 1.99 or 2.49, it will work easilly.

意思大概是说你使用的优惠码有地域限制,换一个优惠码就可以了,看来哪里都歧视大陆呀。
造成这个问题的原因可能是:
1、从网上找了非你国家地区的优惠码。
2、使用了代理,在登录前获得了新用户的优惠。

换了个godaddy发给中国区用户20%的优惠码可以支付了,81rmb一个域名。
有问题的可以试一下这个码:
fbfhpe20

分类: 网站 标签: ,

什么是psr-0,psr-1,psr-2标准

2015年3月7日 没有评论

FIG组织在制定跟PHP相关规范,简称PSR,PSR旨在通过讨论我们代码项目的共同点以找出一个协作编程的方法。

什么是psr0强调自动加载的方式
下文描述了若要使用一个通用的自动加载器(autoloader),你所需要遵守的规范:

规范

一个完全标准的命名空间(namespace)和类(class)的结构是这样的:\()*
每个命名空间(namespace)都必须有一个顶级的空间名(namespace)("组织名(Vendor Name)")。
每个命名空间(namespace)中可以根据需要使用任意数量的子命名空间(sub-namespace)。
从文件系统中加载源文件时,空间名(namespace)中的分隔符将被转换为 DIRECTORY_SEPARATOR。
类名(class name)中的每个下划线_都将被转换为一个DIRECTORY_SEPARATOR。下划线_在空间名(namespace)中没有什么特殊的意义。
完全标准的命名空间(namespace)和类(class)从文件系统加载源文件时将会加上.php后缀。
组织名(vendor name),空间名(namespace),类名(class name)都由大小写字母组合而成。
示例

空间名(namespace)和类名(class name)中的下划线

以上是我们为实现通用的自动加载而制定的最低标准。你可以利用能够自动加载PHP 5.3类的SplClassLoader来测试你的代码是否符合这些标准。

实例

下面是一个怎样利用上述标准来实现自动加载的示例函数。

SplClassLoader实现

下面的gist是一个按照上面建议的标准来自动加载类的SplClassLoader实例。这是依据这些标准来加载PHP 5.3类的推荐方案。

什么是psr1,定义基本代码规范
本节我们将会讨论一些基本的代码规范问题,以此作为将来讨论更高级别的代码分享和技术互用的基础。

RFC 2119中的必须(MUST),不可(MUST NOT),建议(SHOULD),不建议(SHOULD NOT),可以/可能(MAY)等关键词将在本节用来做一些解释性的描述。

1. 概述

源文件必须只使用 这两种标签。

源文件中php代码的编码格式必须只使用不带字节顺序标记(BOM)的UTF-8。

一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。

命名空间(namespace)和类(class) 必须遵守PSR-0标准。

类名(class name) 必须使用骆驼式(StudlyCaps)写法 (译者注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。

类(class)中的常量必须只由大写字母和下划线(_)组成。

方法名(method name) 必须使用驼峰式(cameCase)写法(译者注:后文将直接用camelCase表示)。

2. 文件

2.1. PHP标签

PHP代码必须只使用长标签()或者短输出式标签(<?= ?>);而不可使用其他标签。

2.2. 字符编码

PHP代码的编码格式必须只使用不带字节顺序标记(BOM)的UTF-8。

2.3. 副作用

一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。

短语副作用(side effects)的意思是 在包含文件时 所执行的逻辑与所声明的类(class),函数(function),常量(constant)等没有直接的关系。

副作用(side effects)包含但不局限于:产生输出,显式地使用require或include,连接外部服务,修改ini配置,触发错误或异常,修改全局或者静态变量,读取或修改文件等等

下面是一个既包含声明又有副作用的示例文件;即应避免的例子:

下面是一个仅包含声明的示例文件;即应提倡的例子:

3. 空间名(namespace)和类名(class name)

命名空间(namespace)和类(class)必须遵守 PSR-0.

这意味着一个源文件中只能有一个类(class),并且每个类(class)至少要有一级空间名(namespace):即一个顶级的组织名(vendor name)。

类名(class name) 必须使用StudlyCaps写法。

PHP5.3之后的代码必须使用正式的命名空间(namespace) 例子:

4. 类的常量、属性和方法

术语类(class)指所有的类(class),接口(interface)和特性(trait)

4.1. 常量

类常量必须只由大写字母和下划线(_)组成。 例子:

4.2. 属性

本指南中故意不对$StulyCaps,$camelCase或者$unser_score中的某一种风格作特别推荐,完全由读者依据个人喜好决定属性名的命名风格。

但是不管你如何定义属性名,建议在一个合理的范围内保持一致。这个范围可能是组织(vendor)级别的,包(package)级别的,类(class)级别的,或者方法(method)级别的。

4.3. 方法

方法名则必须使用camelCase()风格来声明。

什么是PSR2定义代码风格

代码风格指南
本手册是基础代码规范(PSR-1)的继承和扩展。

为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。

各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用的一组代码规范。 因此,本指南的益处不在于这些规则本身,而在于在所有项目中共用这些规则。

RFC 2119中的必须(MUST),不可(MUST NOT),建议(SHOULD),不建议(SHOULD NOT),可以/可能(MAY)等关键词将在本节用来做一些解释性的描述。

1. 概述

代码必须遵守 PSR-1。

代码必须使用4个空格来进行缩进,而不是用制表符。

一行代码的长度不建议有硬限制;软限制必须为120个字符,建议每行代码80个字符或者更少。

在命名空间(namespace)的声明下面必须有一行空行,并且在导入(use)的声明下面也必须有一行空行。

类(class)的左花括号必须放到其声明下面自成一行,右花括号则必须放到类主体下面自成一行。

方法(method)的左花括号必须放到其声明下面自成一行,右花括号则必须放到方法主体的下一行。

所有的属性(property)和方法(method) 必须有可见性声明;抽象(abstract)和终结(final)声明必须在可见性声明之前;而静态(static)声明必须在可见性声明之后。

在控制结构关键字的后面必须有一个空格;而方法(method)和函数(function)的关键字的后面不可有空格。

控制结构的左花括号必须跟其放在同一行,右花括号必须放在该控制结构代码主体的下一行。

控制结构的左括号之后不可有空格,右括号之前也不可有空格。

1.1. 示例

这个示例中简单展示了上文中提到的一些规则:

2. 通则

2.1 基础代码规范

代码必须遵守 PSR-1 中的所有规则。

2.2 源文件

所有的PHP源文件必须使用Unix LF(换行)作为行结束符。

所有PHP源文件必须以一个空行结束。

纯PHP代码源文件的关闭标签?> 必须省略。

2.3. 行

行长度不可有硬限制。

行长度的软限制必须是120个字符;对于软限制,代码风格检查器必须警告但不可报错。

一行代码的长度不建议超过80个字符;较长的行建议拆分成多个不超过80个字符的子行。

在非空行后面不可有空格。

空行可以用来增强可读性和区分相关代码块。

一行不可多于一个语句。

2.4. 缩进

代码必须使用4个空格,且不可使用制表符来作为缩进。

注意:代码中只使用空格,且不和制表符混合使用,将会对避免代码差异,补丁,历史和注解中的一些问题有帮助。空格的使用还可以使通过调整细微的缩进来改进行间对齐变得更加的简单。
2.5. 关键字和 True/False/Null

PHP关键字(keywords)必须使用小写字母。

PHP常量true, false和null 必须使用小写字母。

3. 命名空间(Namespace)和导入(Use)声明

命名空间(namespace)的声明后面必须有一行空行。

所有的导入(use)声明必须放在命名空间(namespace)声明的下面。

一句声明中,必须只有一个导入(use)关键字。

在导入(use)声明代码块后面必须有一行空行。

示例:

4. 类(class),属性(property)和方法(method)

术语“类”指所有的类(class),接口(interface)和特性(trait)。

4.1. 扩展(extend)和实现(implement)

一个类的扩展(extend)和实现(implement)关键词必须和类名(class name)在同一行。

类(class)的左花括号必须放在下面自成一行;右花括号必须放在类(class)主体的后面自成一行。

实现(implement)列表可以被拆分为多个缩进了一次的子行。如果要拆成多个子行,列表的第一项必须要放在下一行,并且每行必须只有一个接口(interface)。

4.2. 属性(property)

所有的属性(property)都必须声明其可见性。

变量(var)关键字不可用来声明一个属性(property)。

一条语句不可声明多个属性(property)。

属性名(property name) 不推荐用单个下划线作为前缀来表明其保护(protected)或私有(private)的可见性。

一个属性(property)声明看起来应该像下面这样。

4.3. 方法(method)

所有的方法(method)都必须声明其可见性。

方法名(method name) 不推荐用单个下划线作为前缀来表明其保护(protected)或私有(private)的可见性。

方法名(method name)在其声明后面不可有空格跟随。其左花括号必须放在下面自成一行,且右花括号必须放在方法主体的下面自成一行。左括号后面不可有空格,且右括号前面也不可有空格。

一个方法(method)声明看来应该像下面这样。 注意括号,逗号,空格和花括号的位置:

4.4. 方法(method)的参数

在参数列表中,逗号之前不可有空格,而逗号之后则必须要有一个空格。

方法(method)中有默认值的参数必须放在参数列表的最后面。

参数列表可以被拆分为多个缩进了一次的子行。如果要拆分成多个子行,参数列表的第一项必须放在下一行,并且每行必须只有一个参数。

当参数列表被拆分成多个子行,右括号和左花括号之间必须又一个空格并且自成一行。

4.5. 抽象(abstract),终结(final)和 静态(static)

当用到抽象(abstract)和终结(final)来做类声明时,它们必须放在可见性声明的前面。

而当用到静态(static)来做类声明时,则必须放在可见性声明的后面。

4.6. 调用方法和函数

调用一个方法或函数时,在方法名或者函数名和左括号之间不可有空格,左括号之后不可有空格,右括号之前也不可有空格。参数列表中,逗号之前不可有空格,逗号之后则必须有一个空格。

参数列表可以被拆分成多个缩进了一次的子行。如果拆分成子行,列表中的第一项必须放在下一行,并且每一行必须只能有一个参数。

5. 控制结构

下面是对于控制结构代码风格的概括:

控制结构的关键词之后必须有一个空格。
控制结构的左括号之后不可有空格。
控制结构的右括号之前不可有空格。
控制结构的右括号和左花括号之间必须有一个空格。
控制结构的代码主体必须进行一次缩进。
控制结构的右花括号必须主体的下一行。
每个控制结构的代码主体必须被括在花括号里。这样可是使代码看上去更加标准化,并且加入新代码的时候还可以因此而减少引入错误的可能性。

5.1. if,elseif,else

下面是一个if条件控制结构的示例,注意其中括号,空格和花括号的位置。同时注意else和elseif要和前一个条件控制结构的右花括号在同一行。

推荐用elseif来替代else if,以保持所有的条件控制关键字看起来像是一个单词。

5.2. switch,case

下面是一个switch条件控制结构的示例,注意其中括号,空格和花括号的位置。case语句必须要缩进一级,而break关键字(或其他中止关键字)必须和case结构的代码主体在同一个缩进层级。如果一个有主体代码的case结构故意的继续向下执行则必须要有一个类似于// no break的注释。

5.3. while,do while

下面是一个while循环控制结构的示例,注意其中括号,空格和花括号的位置。

下面是一个do while循环控制结构的示例,注意其中括号,空格和花括号的位置。

5.4. for

下面是一个for循环控制结构的示例,注意其中括号,空格和花括号的位置。

5.5. foreach

下面是一个foreach循环控制结构的示例,注意其中括号,空格和花括号的位置。

5.6. try, catch

下面是一个try catch异常处理控制结构的示例,注意其中括号,空格和花括号的位置。

6. 闭包

声明闭包时所用的function关键字之后必须要有一个空格,而use关键字的前后都要有一个空格。

闭包的左花括号必须跟其在同一行,而右花括号必须在闭包主体的下一行。

闭包的参数列表和变量列表的左括号后面不可有空格,右括号的前面也不可有空格。

闭包的参数列表和变量列表中逗号前面不可有空格,而逗号后面则必须有空格。

闭包的参数列表中带默认值的参数必须放在参数列表的结尾部分。

下面是一个闭包的示例。注意括号,空格和花括号的位置。

参数列表和变量列表可以被拆分成多个缩进了一级的子行。如果要拆分成多个子行,列表中的第一项必须放在下一行,并且每一行必须只放一个参数或变量。

当列表(不管是参数还是变量)最终被拆分成多个子行,右括号和左花括号之间必须要有一个空格并且自成一行。

下面是一个参数列表和变量列表被拆分成多个子行的示例。

把闭包作为一个参数在函数或者方法中调用时,依然要遵守上述规则。

7. 结论

本指南有意的省略了许多元素的代码风格。主要包括:

全局变量和全局常量的声明

函数声明

操作符和赋值

行间对齐

注释和文档块

类名的前缀和后缀

最佳实践

以后的代码规范中可能会修正或扩展本指南中规定的代码风格。

分类: php 标签:

php或js判断网站访问者来自手机或者pc端源码

2015年3月6日 没有评论

之前写过如何通过nginx来识别手机访问还是pc访问

很多时候也可以通过逻辑程序来进行判断,如PHP、JS是常用的两种识别访问设备类型的常用方法。

原理都是采用识别访问客户端的HTTP_USER_AGENT,然后进行关键字匹配进行确定设备类型,对于伪造HTTP头的就区分不出来了。

区分设备类型然后要做的就是能够针对不同设置显示出易于阅读的网页,具体可以研究响应式布局技术。

响应式布局

本文主要介绍如何通过php或js来识别终端类型。

php识别手机或者PC访问源码

方法二

js区分手机或PC访问源码

方法一

方法二

分类: php 标签:

spl_autoload_register替代__autoload()

2015年3月5日 1 条评论

PHP5.1.2起废弃了__autoload,那么为什么要用spl_autoload_register来取代__autoload()

最重要的原因是autoload只能定义一个自动加载函数,spl_autoload_register可注册多个自动加载函数到函数栈,实例话对象时会按顺序依次调用之前注册过的加载器来自动加载类定义文件。看起来没什么用,但当多个工程混合使用时有自己不懂同的自动加载类实现时,就能体现出优势了。

__autoload()是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。
printit.class.php

index.php

访问index.php会输出hello world。在index.php中,没有包含printit.class.php,在实例化PRINTIT时,自动调用__autoload函数,参数$class的值即为类名PRINTIT,此时printit.class.php就被包含到index.php中,避免到处都是include或require,程序更加简洁。

spl_autoload_register()

bool spl_autoload_register ([ callback $autoload_function ] )
将函数autoload_function注册到SPL提供的__autoload函数栈中。
如果该栈中的函数尚未激活,则激活它们。
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。
因为spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。

参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数spl_autoload()。

返回值
如果成功则返回 TRUE,失败则返回 FALSE。

注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

spl_autoload_register实例

修改index.php中的__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,需要使用spl_autoload_register()注册到自动加载函数栈中,然后PHP碰到没有定义的类实例化new时就执行loadprint(),参数时类名PRINTIT。

spl_autoload_register() 调用静态方法

分类: php 标签: