PHP
文章平均质量分 57
loophome
这个作者很懒,什么都没留下…
展开
-
perf性能分析工具命令简单实用
perf性能分析工具命令简单实用参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/原创 2020-04-01 17:39:49 · 1227 阅读 · 0 评论 -
PHP性能监控 - 开启xhprof(一)
xhprof是PHP性能分析的扩展,项目地址:https://github.com/phacility/xhprof,最新维护是在2013年的9月份。安装:安装php扩展的方式安装。文档:http://php.net/xhprof使用xhprof之前,首先进行配置,xhprof的配置非常简单,仅仅有一个配置项xhprof.output_dir strin原创 2017-08-24 23:06:37 · 1838 阅读 · 0 评论 -
PHP性能监控 - 怎么看xhprof报告(二)
xhprof报告包含两部分:一)调用堆栈表格名称含义FunctionName调用的函数名Calls/Calls %函数的调用次数,以及百分比。可以检查调用次数高的函数是否有必要。Incl. Wall Time (microsec)函数运行时间(包括子函数)Excl原创 2017-08-24 23:23:38 · 2494 阅读 · 0 评论 -
PHP索引数组unset的坑-array_values解决方案
PHP索引数组unset的坑-array_values解决方案当我们使用PHP的索引数组(key是0,1,2,3,......),同时对数组进行unset操作的时候,PHP会将数组转化为关联数组。当我们使用json_encode的时候,会导致数据结构不一致。我们可以使用array_values函数解决这个问题。array array_values ( array $array )a原创 2017-09-01 11:36:12 · 7211 阅读 · 1 评论 -
Composer笔记(二):建立自己的PHP类库
一、在建立类库之前,你必须有一个github的账号,作为代码托管,github是非常好的一个选择>github主页:https://github.com二、在windows下载并安装git管理器(分布式代码管理工具)>下载地址:https://desktop.github.com/ 安装完成后的界面:三、提交代码到github,点击右原创 2016-12-24 17:19:25 · 1694 阅读 · 0 评论 -
php_crond:一个基于多进程的定时任务系统-支持秒粒度的任务配置
php_crond基于多进程的定时任务管理器,支持秒级别的定时任务特性通过配置文件管理所有定时任务 支持秒级的定时任务粒度 使用symfony/process进行进程管理 使用React/event-loop执行事件循环 提供http服务,远程查看和操作php_crond(参见:API文档)执行启动crondphp bin/crond.php在后台启动crond...原创 2017-06-02 18:45:37 · 3573 阅读 · 0 评论 -
PHP大数组过滤元素、修改元素性能分析
在PHP开发过程中,数组是非常重要的数据结构,往往有一个操作就是对数组进行过滤,修改,以下是对数组元素进行过滤的几个方法进行分析。数据源是长度为4592的数组,占用内存8.9MB,方法重复执行5000次。 结论:无论是对数组进行过滤,修改,使用引用的方式是最优的,主要原因在于内存操作次数少。array_filter和array_walk需要调用一次函数,所耗的时间会更长 过滤数...原创 2017-11-14 23:04:10 · 3133 阅读 · 0 评论 -
PHP大数组循环-避免产生Notice或者是Warning
之前写了一篇关于大数组过滤,修改元素的文章(PHP大数组过滤元素、修改元素性能分析)这里做一次补充,就是在大数组循环中要避免产生Notice或者是Warning,否则会导致性能的急速下降。$arr = ['a' => 1];for ($i = 1; $i <= 1000; $i++) { isset($arr['b']) && $arr['b'] == 1;}在不确认元素原创 2017-11-16 16:44:22 · 1092 阅读 · 0 评论 -
php-fpm超时时间设置request_terminate_timeout分析
今天发现了一个很神奇的事情,php日志中有一条超时的日志,但是我request_terminate_timeout中设置的是0,理论上应该没有超时时间才对。PHP Fatal error: Maximum execution time of 30 seconds exceeded in ...OK,先列出现在的配置:php-fpm:request_原创 2017-11-22 16:17:59 · 41570 阅读 · 0 评论 -
laravel 5.3用户认证--默认的用户表数据迁移
laravel使用默认的auth时,执行命令:php artisan migrate生成Auth必须的2张用户表,其表结构如下:CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,原创 2017-04-28 18:20:35 · 1602 阅读 · 0 评论 -
问题:swoole-http服务器发送POST请求服务器端超时(100-continue问题)
在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为2步:1. 发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据2. 接收到Server返回的100-continue应答以后, 才把数据POST给Server具体的RFC相关描述: htt原创 2017-04-19 16:14:02 · 5655 阅读 · 0 评论 -
PHP类数组式访问(ArrayAccess接口)
通过ArrayAccess接口,我们可以用数组形式访问对象。这种场景适用于数组操作,同时也需要定义数据的某些方法(例如保存数据)。实现这个类,必须实现ArrayAccess的4个接口:ArrayAccess {/* 方法 */abstract public boolean offsetExists ( mixed $offset )abstract public mixed offs原创 2017-04-05 14:51:20 · 843 阅读 · 0 评论 -
PHP使用3DES算法加密解密字符串
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。项目原创 2016-07-21 20:06:22 · 22160 阅读 · 1 评论 -
Composer笔记(三):composer.json文件配置
官方参考链接:https://packagist.org/about一、为你的PHP库建立一个名字首先,为你的PHP库起一个名字是非常重要的,必须为一个库建立一个唯一的名称,并且之后是不能更改的。名字应该由一个供应商名+一个项目名组成。例如:monolog/monolog [供应商名]/[项目名]参考:// Monolog is a library,原创 2016-12-26 22:02:39 · 10718 阅读 · 0 评论 -
PHP XSS攻击防范--如何过滤用户输入
一、什么是XSS攻击XSS攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。来看一个简单的例子:<?php$slogan_type = isset($_GET['slogan_type']) ? $_GET['slogan_type'] : 'default';?>原创 2016-12-27 15:40:11 · 4940 阅读 · 0 评论 -
PHP5.6.x编译报错:Don't know how to define struct flock on this system, set --enable-opcache=no
系统版本:Centos 7解决方案:vim /etc/ld.so.conf.d/local.conf # 编辑库文件/usr/local/lib # 添加该行:wq # 保存退出ldconfig # 使之生效!!记得编译完后不能移除这行,会导致php无法启动!!原创 2017-02-06 20:15:15 · 4190 阅读 · 0 评论 -
php curl_multi批量发送http请求
引子:在Android4.0开发中,发送Http请求已经不允许在主进程中执行了,必须在线程中执行。原因在于Http接口响应时间有可能阻塞主进程事件监听(对于.Net开发,其实也是如此)。但是,由于PHP并没有多线程的概念,那么,如何高效率在PHP中执行多次http请求呢?答案是使用curl_multi_init,由此,我做了一个实验。以下是模拟请求的http接口,代码很简单,通过get传入的参原创 2015-10-03 16:50:03 · 5116 阅读 · 2 评论 -
Composer笔记(一)补充:在linux下安装PHP Composer(完全安装)
一、下载composer installerhttps://getcomposer.org/doc/00-intro.md#installation-linux-unix-osxcurl -sS https://getcomposer.org/installer | php二、全局安装通过软链接进行全局安装ln -s /usr/local/php原创 2017-02-20 17:23:08 · 4491 阅读 · 0 评论 -
smarty报错:lexing failed because a rule matched an empty string解决方案
smarty报错:PHP Fatal error: Uncaught exception 'Exception' with message 'Error: lexing failed because a rule matched an empty string. Input "解决方案:检查left_delimiter 和right_delimiter 的设置是否正确!原创 2017-01-24 20:33:22 · 775 阅读 · 0 评论 -
PHP5.4 pfsocketopen函数判断sock是否存活的bug(由memcached引起)
之前遇到的一个业务代码非常奇葩的bug,代码中使用pfsocketopen作为http请求,偶尔会不能读取返回结果。经过排查,发现PHP5.4版本下判断socket是否存活存在一个bug。解决方案:1)在这个情况下,可以不使用长链接,改为使用短连接2)由于PHP5.4已经不再维护了,可以升级PHP版本到5.6去除业务逻辑后,代码如下:<?php$num = 1;whil原创 2017-02-15 14:49:52 · 701 阅读 · 0 评论 -
MYSQL:int类型升级到bigint,对PHP开发语言影响
因为业务增长,原有的unsigned int已经不够使用,需要升级到unsigned bigintMYSQL整数支持的范围:https://dev.mysql.com/doc/refman/5.7/en/integer-types.htmlTypeStorageMinimum ValueMaximum Value原创 2018-01-26 21:30:59 · 8667 阅读 · 0 评论 -
Java与PHPweb开发比较
一直很想写一篇这样的文章。Java和PHP作为web开发的2个主流语言,他们之间有什么不同呢?在项目开发时,我们应该怎么去做选择。1.运行方式1.1 PHP的运行方式客户端发送http请求到nginx,nginx通过fastcgi与php-fpm进程通信。php-fpm执行完成后把结果返回给nginx,最终输出到客户端浏览器。参考fastcgi:https://baike.baid...原创 2018-11-01 18:05:38 · 8918 阅读 · 0 评论 -
php-laravel框架用户验证(Auth)模块解析(四)忘记密码
一、忘记密码模块路由路由名称 请求方式 方法实现 /password/reset GET 忘记密码页面 /password/email POST 发送邮件 /password/reset/{token} GET 重置密码页面 /password/reset POST 重置密码动作 二、控制器解析跟注册、登录的控...原创 2018-11-16 18:12:49 · 1100 阅读 · 0 评论 -
php laravel请求处理管道(装饰者模式)
laravel的中间件使用了装饰者模式。比如,验证维护模式,cookie加密,开启会话等等。这些处理有些在响应前,有些在响应之后,使用装饰者模式动态减少或增加功能,使得框架可扩展性大大增强。接下来简单举个例子,使用装饰者模式实现维护Session实现。没有使用装饰者模式,需要对模块(WelcomeController::index方法)进行修改。class WelcomeContro...原创 2018-11-27 11:22:36 · 455 阅读 · 0 评论 -
PHP兼容性检查,PHP升级语法检查(PHPCompatibility+PHP_CodeSniffer)
当我们进行PHP版本升级的时候,比如从5.x升级到7.x会遇到项目代码不兼容的情况。如果通过人工检查,工作量比较大,我们可以使用PHPCompatibility+PHP_CodeSniffer进行兼容性检查。1)先安装PHP_CodeSniffer,建议使用composer安装composer global require "squizlabs/php_codesniffer=*"2...原创 2018-12-13 16:30:44 · 3404 阅读 · 0 评论 -
php7中使用php_memcache扩展
目前http://pecl.php.net/中php_memcache版本的扩展不支持php7,建议改用php_memcached扩展在编译的过程中会提示以下错误:fatal error: ext/standard/php_smart_str.h: No such file or directory #include "ext/standard/php_smart_str.hfata...原创 2018-12-11 17:03:10 · 1003 阅读 · 0 评论 -
php7,从phpExcel升级到PhpSpreadsheet
phpExcel的github上已经说明了,phpExcel最后的版本是1.8.1,已经不再维护了,新的项目是PhpSpreadsheet。PhpSpreadsheet是PHPExcel的下一个版本,它提高了兼容性,极大地提高了代码基础质量(命名空间、PSR遵从性、使用最新的PHP语言特性等)。phpExcel:https://github.com/PHPOffice/PHPExcelPh...原创 2018-12-25 14:59:45 · 5335 阅读 · 0 评论 -
PHP:PDOStatement::bindValue参数类型php5和php7问题
在php5升级到php7中发现一个PDOStatement::bindValue参数类型的问题。问题代码:$statement->bindValue(2, 'NH', PDO::PARAM_INT);该代码在php5中竟然能正确执行,在php7中,value被转化成0,导致查询失败。解决:类型可以不传,使用默认的字符串类型。 查看PDOStatement::bindV...原创 2019-01-29 21:56:41 · 557 阅读 · 0 评论 -
php:$_ENV 和 getenv区别
在开发过程中,发现某环境变量无法获取,后来发现是使用了$_ENV,而另一个配置使用的是getenv。那么他们两者之间有什么区别呢。 用途 $_ENV 通过环境方式传递给当前脚本的变量的数组。 这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,...原创 2019-01-09 15:45:42 · 1950 阅读 · 0 评论 -
laravel-admin实现二级联动表单
参考文档:https://laravel-admin.org/docs/zh/model-form-fields#select-%E8%81%94%E5%8A%A8一、配置联动select表单$form->select('category_parent', '产品一级分类') ->options(Category::getCategoryMap(4)) -...原创 2019-02-28 21:56:53 · 4958 阅读 · 0 评论 -
php laravel实现依赖注入原理(反射机制)
在使用laravel的时候,可以看到大量地使用了依赖注入。比如控制器中的HttpRequest对象,各种Model的实现类等等。这种实现方式的好处在于不需要再方法中频繁地new某些实例,实现模块的解耦。依赖注入使用PHP反射API实现反射机制被多种语言使用,用来获取类、实例对象、方法等语言构件信息,通过反射API函数可以动态进行操作。以下编写了简单的例子来说明。我们需要调用App::run...原创 2018-11-12 16:09:50 · 5001 阅读 · 0 评论 -
php-laravel框架用户验证(Auth)模块解析(三)登录模块
一、登录模块路由路由名称 请求方式 方法实现 /login GET 登录页面 /login POST 实现登录功能 /logout POST 实现登出功能 二、控制器解析跟注册的控制器一样,大部分的逻辑使用trait引入。$redirectTo配置,如果在登录状态,重定向的页面protected $redirectT...原创 2018-11-15 17:47:31 · 3917 阅读 · 0 评论 -
lumen开发问题:Call to undefined method Illuminate\Validation\Validator::make()
在做表单验证的时候报这个错误提示,原因是Validator类引用错了。错误的:use Illuminate\Validation\Validator;正确的:use Illuminate\Support\Facades\Validator;切换完引用类之后,可能还会报这个错误 A facade root has not been set.要使用facade,必须手动开启,在bootstrap/ap...原创 2018-04-23 16:09:33 · 7320 阅读 · 0 评论 -
php curl请求微信发红包接口出现错误:Peer's Certificate issuer is not recognized.
PHP版本:5.6.29openssl版本:OpenSSL 1.0.1e-fips 11 Feb 2013请求微信发红包接口,curl错误提示:Peer's Certificate issuer is not recognized.1)以前一直运行好好的,代码也没有变动2)用户尝试多次提现,偶尔可行CURL参数说明CURLOPT_SSLCERTset SSL client certificateC...原创 2018-06-18 10:47:05 · 13837 阅读 · 0 评论 -
laravel框架自定义软删除
软删除的性能比直接delete要好,而且更容易恢复误删除的数据,在开发上一般采用软删除。laravel框架自带的model是直接执行delete操作,但是可以通过简单的代码把它设置为软删除,需要做到以下2点:1)设置查询作用域参考文档:https://docs.golaravel.com/docs/5.6/eloquent/#query-scopes2)删除动作设置为更新(使用is...原创 2018-08-23 11:39:56 · 2775 阅读 · 0 评论 -
PHP:cURL error 60: SSL certificate unable to get local issuer certificate
导致该问题的原因在于没有配置curl.cainfo,该配置位于php.ini中。解决方案:1)下载cacert.pemhttps://curl.haxx.se/ca/cacert.pem2)配置php.ini[curl]; A default value for the CURLOPT_CAINFO option. This is required to be an; ab...原创 2018-10-17 16:23:13 · 24716 阅读 · 5 评论 -
php CI框架单个file表单多文件上传例子
这里使用的是CI2的版本,我们可以在一个file表单里选择多个文件上传。先看看表单怎么写:要注意的是name需要使用数组的形式,否则$_FILES变量仅仅获取1个文件的信息。<form action="/index.php" method="post" enctype="multipart/form-data"> <input type="file" name=...原创 2018-11-06 14:00:05 · 922 阅读 · 0 评论 -
PHP中Closure::bindTo的用法分析
最近使用laravel-admin开发一个后台,过程中发现了这么一个调用:在display方法的闭包函数中,使用了$this去获取值($this是laravel中的Model,这里取的是数据库中返回值)// 不存在的`full_name`字段$grid->column('full_name')->display(function () { return $this-...原创 2018-11-09 20:20:04 · 2210 阅读 · 0 评论 -
php-laravel框架用户验证(Auth)模块解析(一)
一、初始化使用php artisan命令进行初始化:php artisan make:auth 和 php artisan migrate(该命令会生成users表、password_resets表)php artisan make:auth 会修改/生成多个文件:1)routes/web.php 和 app/Http/Controllers/HomeController.php...原创 2018-11-15 16:53:43 · 1177 阅读 · 0 评论 -
php-laravel框架用户验证(Auth)模块解析(二)注册模块
一、注册模块路由路由名称 请求方式 方法实现 /register GET 注册页面 /register POST 实现注册功能 二、控制器解析控制器仅仅实现配置的功能,大部分的逻辑使用trait引入。因此,如果需要定制功能的话,需要重写trait。对于简单的网站来说,默认的功能已经足够了。$redirectTo配置,如果在登录状态,重定向...原创 2018-11-15 17:23:34 · 939 阅读 · 0 评论