Jul6

【原创】php.ini配置中memory_limit的配置坑

Author: leeon  Click: 100   Comments: 0 Category: php  Tag: php.ini,memory_limit

当你设置了memory_limit但是还是报内存不足错误的时候,请检查两个地方。

1 memory_limit如果你设置的是兆,那么请用M单位,而不是MB单位。

例如:

memory_limt = 128M 是对的 

memory_limit= 128MB 是错误的。

2. php-fpm配置文件中的php_admin_value[memory_limit] 参数优先级高于php.ini中的memory_limit,请确认这里的参数是否设置合理

Jul2

【原创】Laravel5.5及以上版本多环境.env配置

Author: leeon  Click: 123   Comments: 0 Category: php  Tag: laravel,.env

laravel 默认工程一个.env文件,如果在多个运行环境下如何自动区分读取不同的.env文件呢?其实laravel本身就已经实现了多环境读取.env,网上那些教程都是要加代码来识别或者讲的不清不楚的,laravel在5.5版本的框架底层中实现了读取不同的.env逻辑。请看截图:

那么我们该如何使用这个特性呢?其实很简单,加入我们有4个环境(dev环境,test环境,beta环境,production环境)。

我们只需要在工程根目录下创建四个文件,可以注意到不同环境是不同的环境关键字,分别为:

1.  .env.dev 开发环境

2.  .env.test 测试环境

3.  .env.beta beta预发布环境

4.  .env.producton 生产环境

创建后,在里面配置不同环境下的相关配置数据。

重点来了,这也是最重要的异步,如何告诉laravel要去读取指定环境的.env配置文件呢。其实只需要两步骤,在你指定运行环境下的nginx配置中PHP配置参数段中加上一行:

fastcgi_param APP_ENV test;   // 根据环境不同填写对应的环境关键字。

配置后,重启nginx即可。这时候系统会区分环境读取.env文件了。

May31

【原创】msgpack无法识别定位错误的小技巧

Author: leeon  Click: 159   Comments: 0 Category: php  Tag: php,msgpack

php下的msgpack扩展定义的反序列化方法没有捕获反序列化失败时候的状态情况。如果反序列化失败,magpack只会抛出warning错误,我们没办法直接通过magpack提供的方法获取执行结果状态。其实我们可以使用php的原生方法来识别warning错误,从而判断反序列化是否成功。如下代码就可以解决我们的问题:

[code="php"]
error_clear_last();
$ret = msgpack_unpack($recv);
if (error_get_last()) {
// 反序列化失败
} else {
// 序列化成功
}
[/code]

Feb15

【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)

Author: leeon  Click: 3437   Comments: 2 Category: php  Tag: php,yaf,phalcon,laravel,thinkphp,yii

     最近面试了不少人,绝大部分使用的是thinkphp和laravel这两个框架,真正高性能的框架yaf和phalcon反而没有人使用。我认为使用框架主要基于这几点因素:

1. 工程结构规范化

2. 代码格式规范化

3. 功能抽象化

4. 逻辑封装化

5. 底层核心透明化

     tp,laravel,yii的简单实用的上手难度不高,但是复杂封装又各有特点需要深入学习,虽然可以快速通过其丰富的组件功能来构建一个基本的网站,但是后期的学习曲线也比较高。不管是用哪种框架,都是基于MVC模式来设计。本质上都是通过统一的路由管理器来派发不同的控制器任务。本文我将通过直接的性能测评来选出PHP7版本下认为在性能和工程化上最优的PHP框架。

 框架 版本  说明 
 yaf 3.0.4   通过yaf自带的yaf_cg来初始化一个基本工程
 thinkphp 5.0.6   composer创建一个基本工程,关闭debug
 phalcon  3.0.3  通过phalcon-devtools工具创建一个基本工程
 laravel  5.4  composer创建一个基本工程,关闭debug
 yii  2.0.11  yii手工下载basic版本工程,关闭debug

      我们通过将5个工程分别部署成5个网站,并修改里面的首页控制器,均改为输出到页面“hello”字段来评测裸框架下的基准性能。基础测试环境采用负载稳定的树莓派3来运行,并通过另外一台树莓派2来进行ab压力测试。fpm进程设定为static模式,并设定fpm进程数为5个,opcache设为开启状态。

ab运行命令类似如下,并连续采样10次来分析持续压力下的框架稳定性。

ab -k  -c 20 -n500 -q http://127.0.0.1/

压力测试结果如下:

laravel phalcon 原生php yaf thinkphp yii

87.9 670.66 1258.67 1061.76 545.93 61.65

100.4 924.2 1331.67 1126.23 618.78 65.88

81.19 921.87 1352.38 1129.91 608.41 77.84

111.39 930.88 1355.48 1159.62 601.55 79.05

53.89 929.71 1367.68 1165.19 607.24 72.21

94.67 918.72 1482.87 1107 607.24 82

62.21 932.51 1374.17 1130.23 610.72 76.42

85.63 925.01 1674.64 1124.18 609.11 69.82

67.05 913.12 1828.11 1128.22 608.72 75.67

89.21 879.26 1809.36 1159.38 601.18 77.93

     我们可以看到原生的PHP依然是相当强悍的,yaf的性能比phalcon高,这是因为yaf框架只 包含最基本的路由配置加载,并未有任何高级封装,相比phalcon框架丰富的组件,yaf在内存加载启动上必然比phalcon要轻量化。我们可以看到PHP实现的thinkphp性能表现不俗,但lavarel和yii的性能确实有点差强人意了。

    yaf属于超轻量级的c级别裸框架,只集成了基本的视图和路由控制,如果要完成一个中等以上规模的网站的话,还需要集成非常多的第三方类库,如果在线上运营环境中使用,会因为php加载大量的第三方类库而影响到性能。

    phalcon基于c的实现几乎完整的实现了yii,laravel,thinkphp具备的功能特点,同时在性能上完胜了这三个框架,在性能和功能上做了一个比较好的平衡。对于一个可扩展架构的高性能PHP框架而言,phalcon具备了比PHP实现的框架更好的稳定性和开发效率。phalcon虽然在入门门槛上偏高,但是我们只要熟悉了他的框架结构,我们可以很快速的去实现任何web服务业务模型。phalcon具体的介绍将在下一章节中进行介绍。

分类

标签

归档

最新评论

默一在09:04:53评论了
Berkeley DB 由浅入深【转自架构师杨建】
Memory在14:09:22评论了
【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
leo在17:57:04评论了
shell中使用while循环ssh的注意事项
呵呵哒啦在15:06:33评论了
【原创】最佳PHP框架选择(phalcon,yaf,laravel,thinkphp,yii)
jayden在23:39:32评论了
shell中使用while循环ssh的注意事项

我看过的书

链接

其他

访问本站种子 本站平均热度:6650 c° 本站链接数:27 个 本站标签数:452 个 本站被评论次数:92 次