使用GDB调试PHP代码,解决PHP代码死循环

最近在帮同事解决Swoole Server问题时,发现有1个worker进程一直处于R的状态,而且CPU耗时非常高。初步断定是PHP代码中发生死循环。下面通过一段代码展示如何解决PHP死循环问题。[code lang="php"#dead_loop.ph$array = array();for($i = 0; $i < 10000; $i$array[] = $i;include __DIR__."/include#include.phwhile(1usleep(10);$keys = array_flip($array);$index = array_search(rand(1500, 9999), $array);$str = str_repeat('A', $index);$strb = test($index, $str);function test($index, $str... Read More

PHP函数篇十进制、二进制、八进制和十六进制转换函数说明

一,十进制(decimal system)转换函数说明1,十进制转二进制 decbin() 函数,如下实例echo decbin(12); //输出 110echo decbin(26); //输出 1101decbi(PHP 3, PHP 4, PHP 5decbin -- 十进制转换为二进制说明string decbin ( int number 返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。2,十进制转八进制 decoct() 函数echo decoct(15); //输出 1echo decoct(264); //输出 41decoc(PHP 3, PHP 4, PHP 5decoct -- 十进制转换为八进制说明string decoct ( int number ... Read More

在Linux下通过strace与lsof命令排查PHP异常进程

在有些时候,会遇到PHP进程异常卡死的情况。面对这种情况,首先考虑到的就是分析代码进行优化改进,或者重启进程。但是,这种方式来排查不一定能找到根本原因。因为有些时候异常PHP进程卡死的原因可能是非常奇葩的问题,比如外部资源异常如DB、Redis与第三方API等。上一次关于超级话题签到提醒定时任务PHP进程异常的处理,问题竟然出现在外部的DB的链接上。由于网络原因导致读取DB没有响应卡死。这一次情况比较严重,超级话题积分系统的计算有一部分是通过Trigger(类似队列)接受全站数据进行积分计算与入库。由于用户反馈问题,来到队列机查看进程情况。如下$ ps -ef | grep Trigger | grep Commenwww 10693 1 7 16:06 ? 00:04:09 /usr/local/bin/php /path/cli.php request_uri=/Cli/Trigg... Read More

自从有了她,再也不怕断签了:超级话题签到提醒

前言在解决了上一次关于超级话题积分bug后,又接到超级话题签到提醒的产品需求。这是一篇偏于技术实现的文章,讲述的比较笼统,业务围绕超级话题的签到提醒进行展开。如果,您对超级话题签到提醒的技术背景与实现感兴趣,那么这篇文章希望对你有帮助。当然,如果你是某个超级话题的超级粉丝,比如鹿晗,张艺兴,但是发现断签了。那么我非常替你感到“痛心”,因为目前超级话题没有补签功能。当然,如果你觉得是因为系统问题导致没有连续签到,那么你可以通过超级话题的官方反馈方式进行反馈来解决问题。当然,我劝你这么做之前一定要三思。因为,通过我排查的经验而言,基本山是由于你们(用户)把时间搞错了,而导致没有续签。而且,目前的签到提醒功能会在每天晚上提醒你签到的哦产品最近,在忙活超级话题的签到提醒产品的开发。首先,这是第一次比较热切的关注用户反应的产品。虽然说,对于产品的参与和认知并没有多么深入的理解,但是愈发的觉得这件事... Read More

几个想抽自己的PHP错误

每隔一段时间,总有那么几天想抽自己。不知道到底为什么,睡眠不足么还是鸭梨大?当然,我没有什么自虐症也没有什么抑郁。可是,心情如词鸭梨 鸭梨大 鸭梨大鸭梨 鸭梨 鸭梨大 鸭梨大 鸭梨大我真的鸭梨大鸭梨 鸭梨大 鸭梨大鸭梨 鸭梨 鸭梨大 鸭梨大 鸭梨大就快受不了了。。。无奈之间,只好安慰自己:“善骑者坠于马、善水者溺于水、善饮者醉于酒,善战者殁于杀”。可这样自欺欺人好么 :<真相[code lang="php"tryself::$_messages[] = array('uid' => $uid, 'text' => $content);if(count(self::$_messages) >= 5) $result = Apilib_Emessage::sendMulti(self::$_messages, self::SENDER_UID);self::$_messages[] = array();... Read More

PHP的Traits:到底是祸害还是好得飞起?

在2012年3月初,PHP团队宣布了5.4版本的发布。程序员们对这次的发布已期待许久,因为这一次的升级带来了很多特性的加入。其中,最受追捧的是Traits。为了构建这次发布的版本,Shammer C特意为此撰写了一篇文档:如何使用PHP的Traits,我强烈的建议您在读这篇文章之前拜读一下,因为这篇文章需要读者能够对Traits有一定的基础了解。Traits已经被PHP社区广泛的接受,最为关键的是因为它包含了其他Java、C++和Python编程语言的特性。除此之外,Traits也被广大的网友们神化了。那些程序员狂砍这种特性将给他们的项目带来多么大的益处,尤其指出它是能够替代面向对象(OOP)继承的特性。然而,Traits真的有那么神奇么?难道真的能对PHP开发有所促进么?还是败絮其中呢?PHP的Traits是个祸害从表面上来看,由于它可以降低整个应用中代码的复用成本而受到了非常强烈的支持... Read More

awesome-php中英文资源整理(同步更新)

中文版收集整理一些常用的PHP类库, 资源以及技巧. 以便在工作中迅速的查找所需...这个列表中的内容有来自 awesome-php 的翻译, 有来自开发者周刊以及个人的积累等.一个前端组件的列表 awesome-frontend 推荐学习资源PHP相关的有参考价值的社区,博客,网站,文章,书籍,视频等资源PHP网站(PHP WebsitesPHP The Right Way - 一个PHP实践的快速参考指导PHP Best Practices - 一个PHP最佳实践PHP Weekly News - 一个PHP 周刊Securing PHP - 有关PHP安全相关PHP FIG - PHP框架交互小组PSR 中文翻译PHP School - 一个开源的PHP学习资源PHPTrends - 一些快速发展的PHP类库检索PHP 开发者实践其他网站(Other WebsitesThe Op... Read More

PHP-CPP官方文档中文版 – 输出(output)与错误(error)

输出与错误你可以使用C++中常规的流类库,比如一些常规的操作符 << 和特殊的功能 std::endl。然而,并不推荐使用'std::out'和'std::err'。当PHP以Web服务模块运行的时候,使用'std::out'的输出信息会直接输出到当初启动PHP的进程的终端中。在生产环境中,这种终端不是活跃状态的,所以任何以'std::out'发送出去的信息都会被丢掉。因此,在以Web模块方式运行的扩展中,使用'std::out'是无法进行的(no-go)。但是,尽管PHP将以命令行脚本(Cli script)的方式('std::out'可以正常使用),仍然不建议你直接使用'std::out'。使用'std::out'会被所有的已经在PHP用户脚本中定义的输出机制忽略(output handler)。可以利用PHP-CPP库中提供的'Php::out' stream包来取而代之。这个'Php... Read More

PHP-CPP官方文档中文版 – PHP如何加载扩展

也许你知道,在类unix系统中,原生的PHP扩展需要编译成.so文件,而在Windows系统中,会编译成.dll文件,编译之后,全局php.ini文件会包含着系统中可用的扩展列表。也就是说,创建一个扩展并让PHP加载的话,需要生成一个.so或者.dll文件,然后更新PHP配置文件。启动函数get_module(在讲述如何创建你自己的扩展之前,我们先来看看PHP是如何加载扩展的。当PHP启动时,它会从配置目录下加载*.ini配置文件,并且读取配置文件中类似"extension=name.so"的每一行,相应地打开每一个库调用其中的"get_module()"方法。因此,每一个扩展(你的扩展也不例外)库都需要定义且实现”get_module()"函数。这个函数会在PHP加载扩展库后调用(and thus way before pageviews are handled),然后需要返回一个内存... Read More

PHP-CPP官方文档中文版 – 你的第一个扩展

当你创建自己的PHP-CPP扩展时,同样你不得不编译和部署它。一个正常的PHP脚本仅仅需要拷贝到Web服务上即可部署,但是部署一个扩展需要花费一些精力:你需要一个Makefile文件,一个用于扩展的php.ini文件,当然还有一个实现扩展业务的*.cpp文件。为了让你清楚这些步骤,我们已经创建了一个几乎为空的扩展,但包含了所有这些必须的文件。它包含了一个Makefile文件,配置文件和一个已经实现get_module()调用的主函数文件main.cpp。这些会帮助你快速的开始扩展开发。[code lang="cpp"EmptyExtension.ziEmptyExtension.tar.g[/codeMakefil上述的EmptyExtension文件中包含了一个详尽描述编译器的Makefile文件。为了满足你的扩展,你需要(简单地)修改下Makefile文件。其中最重要的修改地... Read More

PHP-CPP官方文档中文版 – 如何安装PHP-CPP

在使用PHP-CPP来构建自己飞快的、原生的PHP扩展时,首先你不得不在系统上安装PHP-CPP库。幸运的是,对于我们来说(那些使用Linux或者Apple环境的人),这就是小菜一碟。然而,如果你使用的是其他系统,那么你只能靠自己了(you are left on your own)。因为我们(指的是PHP-CPP的开发者),仅使用Linux系统。所以,这也没有任何理由来说明为什么这些库不应该运行在其他平台的言论,仅仅是因为它是由纯C++代码写的。因此,如果你在使用其他的系统,同时一直在设法编译它,那么请告知我们。我们来更新这些安装文档,并包含一些其他平台。下载安装的第一件事是下载源码。你既可以从我们的下载页面下载最新的发布版本,也可以从GitHub中下载最新的开发者版本(work-in-progress)。为了获取最新的GitHub版本,运行如下行的命令$ git clone http... Read More

PHP底层的运行机制与原理

PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实现包含大量组件的软件框架。更狭义点看,可以把它认为是一个强大的UI框架。了解PHP底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理、框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能。1. PHP的设计理念及特点多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。弱类型语言:和C/C++、Java、C#等语言不同,PHP是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效,具体会在后面PHP变量中详述。引擎(Zend)+组件(ext)的模式降低内部耦合。... Read More

基于libgit2 C语言库的php-git扩展fix bug辛酸史

前言这是一篇极其没有节(nei)操(rong)的文章。除非你真的无聊,请不要阅读,否则后果自负正文最近,在忙活微博话题组的日构建工具。工具主要的功能并不算复杂。。。写着写着,外面雨过天晴,居然还放起爆竹了,什么鬼。构建工具的主要功能正如介绍中所述的那样,提取产品、测试等基本信息、提取版本库(git)信息、检查(编译)源文件、自动部署项目与发送邮件等。在提取git库信息时,相对于之前利用shell_exec PHP原生函数提取svn信息的方式,打算利用扩展来提取信息。一来更规范、更有效率(微乎其微),二来专业。缺点是相对而言部署环境麻烦,因为需要安装git扩展到当前php运行环境中来。但是,万万没想到官方推荐的php-git扩展库开发版本已有3年没有维护了。索性用吧,又能怎样。。。安装还算顺利,由于公司开发机没有cmake,yum源也不可用,懒得配置,直接download一套源码。cd /root/down/php-gi... Read More

PHP扩展开发利器之PHP-CPP库官方中文文档

如果对PHP-CPP感兴趣并期望看到中文版,拜托给Github的PHP-CPP-Document库点个赞,你的star我的动力。这段时间对PHP扩展开发比较热衷,起初先趟了一遍(半遍吧)用Zend引擎来开发扩展的方式(http://www.walu.cc/phpbook/preface.md),可是问题来了。正如PHP官方所说的那样,”Zend的好处就是定义了很多宏,可惜坏处是宏真是太多了”。未知的东西是可怕的,也是困难的。所以相对比较起来,这个用纯C++的库来说(PHP-CPP),对于C++开发者真是轻车熟路。翻译内容目前托管到了GitHub上,后续会陆续更新到本博,对PHP-CPP扩展感兴趣或者对于翻译感兴趣的朋友,请多指正目录注:本博的内容旧于下文给出的Github内容,有兴趣的读者建议到Github总阅读。PHP-CPP库有着丰富的文档。下面左侧的菜单中说明了如何在你的服务器中安... Read More