首页 » 标签存档: php

Tag Archives: php

PHP7扩展开发之创建变量

 

前言 在这篇博文中我们将演示如何在PHP扩展中创建一个变量。示例代码如下: <?php class demo {} $lng = 2; $str = "abc"; $arr = array(1,'a' => 'b'); $obj = new demo(); var_dump($str); var_dump($arr); var_dump($obj); ?> 中间的三行我们将用PHP扩展来实现。 代码 基础代码 这个扩展, ...

PHP7扩展开发之hello word

 

本文是以PHP7作为基础,讲解如何从零开始创建一个PHP扩展。本文主要讲解创建一个扩展的基本步骤都有哪些。示例中,我们将实现如下功能: <?php echo say(); ?> 输出内容: $ php ./test.php $ hello word 在扩展中实现一个say方法,调用say方法后,输出 hello word。 第一步:生成代码 PHP为我们提供了生成基 ...

当cpu飙升时,找出php中可能有问题的代码行

 

当你发现一个平时占用cpu比较少的进程突然间占用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段。然后,再仔细分析有问题的代码段,从而找出原因。 如果你的程序使用的是c、c++编写,那么你可以很容易的找到正在执行的代码行。但是,程序是php编 ...

php内核探索之zend_execute的具体执行过程

 

解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个execute定义在{PHPSRC}/Zend/zend_vm_execute.h: ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) { zend_execute_data *execute_data; zend_bool nest ...

php中如何设置mysql查询读取数据的超时时间

 

现象: php能通过代理正常连接到mysql。但是,执行query后,一直等待,没有任何数据返回。 结果导致php-fpm进程全部阻塞在读取数据的地方。不能处理其他正常请求。 解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题。 第一种设置mysql查询超时时间的方法是使用mysqlnd。 关于msyqlnd的介绍,大家可以看下这篇 ...

PHP MysqlND 简介

 

简介: mysql native driver 作为php的扩展,取代了libmysqlclient ,为php在 mysql ,mysqli pdomysql 上 提供mysql 的支持。 安装: ./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd ./configure —enable-mysqlnd 优点: 1、mysqlnd更容易编译; 因为它是php源码树的一个组成部分 2 ...

小心,apc可能导致php-fpm罢工!

 

最近访问网站,发现出现了502错误。一般出现502错误,都是php-fpm 进程处理请求时出现异常导致的。 首先,查看了php-fpm 的进程数。发现php-fpm的进程数已经到达了php-fpm.conf中设置的最大值。最近流量没有大的变动,这么多php-fpm进程,肯定有问题。 ​然后,用pstack命令查看这些php-fpm进程都在干啥。 ​[hailong.x ...

善用php-fpm的慢执行日志slow log,分析php性能问题

 

众所周知,mysql有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题。作为mysql的好搭档,php也有这样的功能。如果你使用php-fpm来管理php的话,你可以通过如下选项开启。 PHP 5.3.3 之前设置如下: <value name="request_slowlog_timeout">5s</value> <value name="slowlog">log ...

注意!PHP memcached扩展默认配置下无法自动failover

 

最近项目中用到PHP连接Memcache的场景。这个场景对于PHP开发者很常见。但就是这么常见的一个场景,带来了意想不到的一个问题。 我这边的php memcached扩展版本是: memcached MEMCACHED SUPPORT ENABLED Version 2.1.0 libmemcached version 1.0.8 Session support yes igbinary support ...

一个echo引起的进程崩溃

 

最近在编写后台程序时遇到一个问题。发现后台程序总是莫名其妙的die掉。经排查,发现罪魁祸首是一个echo。 案情重现: 1.ssh登陆服务器 2.新建一个php文件test.php,代码如下: <?php sleep(50); echo "aaa\n"; file_put_contents("/tmp/test.txt",time()); ?> 3.用以下命令执行test.php程 ...

php中assert方法的安全问题

 

php中assert本来是用于调试的,如果assert方法内的代码不为true,则给个Warning提醒。如下面的代码。 <?php assert('1==2'); ?> 执行后会有如下输出: Warning: assert(): Assertion "1==2" failed in D:\green\APMServ5.2.6\www\htdocs\phpinfo.php on line 2 有个assert_option方法可以对assert进行一些控制 ...