php及扩展
文章平均质量分 83
jfcat
做有趣的事情,使自己更快乐!
展开
-
PHP变量类型底层设计实现
php变量类型设计实现基础知识每个类型的字节长度(x86-64体系)字节对齐联合PHP5的zval设计PHP5中_zval_struct(zval)结构使用zend内存池后zval结构的变化PHP7的Zval设计u1字段的含义u2中的字段信息PHP7的zval的内存占用情况基础知识每个类型的字节长度(x86-64体系)int 4字节char 1字节long 8字节pointer 8字节字节对齐struct test{ char a; int b; long c; void *d;原创 2021-08-22 11:39:26 · 207 阅读 · 0 评论 -
PHP单例模式使用clone
我们来看下PHP单例模式是否能够clone,先上一段代码。<?phpclass Singleton { private static $object; private $name; private function __construct(string $name) { $this->name= $name; } public static function getInstance(string $name) { i原创 2021-08-16 07:20:45 · 247 阅读 · 0 评论 -
PHP数组底层实现原理
需要实现的语义功能语义一: PHP数组是一个字典,存储着键值(keyvalue)对。通过键可以快速地找到对应的值,键可以是整型,也可以是字符串。语义二:PHP数组是有序的。这个有序指的是插入顺序,即遍历数组的时候,遍历元素的顺序应该和插入顺序一致,而不像普通字典一样是随机的PHP5的数组实现HashTableHashTable的结构定义:typedef struct _HashTable { uint nTableSize; uint nTableMask; uint nNumOfE原创 2021-08-15 16:30:16 · 1055 阅读 · 0 评论 -
Yii隐藏index.php
1.开启apache的mod_rewrite模块 去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号 确保中有“AllowOverride All”2.在项目中的/protected/config/main.php中添加代码: 'components'=>array(原创 2013-01-19 16:58:35 · 1318 阅读 · 0 评论 -
PHP中使用pcntl和libevent实现Timer功能
定时器在其他语言的实现中可能更方便或者已经自带了有,由于PHP在请求执行后马上回收资源,减少了由于编码造成的不安全因素,但是由于没有全局的应用环境(类似于.NET, JAVA, 甚至与python的应用),在处理异步执行的时候会有不少麻烦,也就是自己没法解决需要依赖于其他应用程序,前期测试只用libevent,但是必须阻塞才能执行,这样是不符合要求的,这里通过pcntl和libevent就方便了,原创 2013-03-21 11:56:34 · 5057 阅读 · 0 评论 -
php使用apc来实现mutex锁
最近的工作需要在cache层加一个lock的机制,google了一些资料发现apc没有实现(好像eAccelerator有,没用过),只有自己整一个,用apc实现也比较简单protected static function isMutex($key){ if (ApcCache::exists("MUTEX_" . $key)) return true; return false原创 2012-11-06 14:58:54 · 1547 阅读 · 0 评论 -
怎样在Ubuntu下开启PHP的pnctl进程管理扩展
Howto: Enable PCNTL in Ubuntu PHP installations怎样启用Ubuntu(deb包)安装PHP的PCNTLPCNTL in PHP allows for some handy advanced “trickery” using the OS process functions inherent in Linux (*nix?). I be翻译 2013-03-16 21:15:14 · 3634 阅读 · 0 评论 -
libmemcached的一致性hash实现源码分析
由于工作上对多语言之间数据缓存一致性的需要,个人分析了libmemcached的实现,对底层一致性的实现有了一些了解,这里分享一些分析的一些过程,也给自己做个笔记。我使用是php,从php的扩展开始分析应该来说是最方便的。这里从php扩展的Memcached::add方法入手去找到需要的内容。方法文件为php_memcached.cadd方法的php扩展代码如下(文件m原创 2013-03-29 21:57:15 · 2936 阅读 · 0 评论 -
在php中使用Semaphore的进程锁功能
在大多数的php开发中很少使用到锁机制,但是有些情况确实需要锁来处理,比如:缓存数据,如果数据丢失就会导致突发很多后端数据请求,可能后端就会挂掉,这时锁机制就有用出了,这里主要介绍基于Semaphore的内存锁,由于WIndows下没有扩展实现,需要在linux下测试。<?php $key = ftok('/tmp', 'a');$id = sem_get($key);if (s原创 2013-03-16 23:01:23 · 4700 阅读 · 0 评论 -
ZendFramework官方提供的性能优化没有实际意义
昨天把zf的官方性能优化都做了一遍,本来希望官方的性能优化方案能够真正起到优化效果,中间由于bug误以为有效果了,还发了一篇博文,可惜后来一查完全越优化越差了。下面简单吧ZF官方的性能优化说一下,还有最新的(ZF1版,第二版还没有怎么用)ZF1.12中添加的autoload_classmap的机制,设计cache的部分就不提了,那个减少了代码的执行逻辑,性能提升是肯定的(还需要对比缓存获取过程和减原创 2012-11-29 17:21:41 · 2103 阅读 · 0 评论 -
编译PHP的windows版本
下面是在看《Sams.Extending.and.Embedding.PHP》的第4章 编译PHP的一些实践记录,相应中文版 地址http://www.walu.cc/phpbook/4.1.md,书上关于windows部分的资料和命令是05年的,已经很老了下面找到PHP官方关于php在windows下编译的说明进行操作和记录。php官方windows编译说明:https://wiki.php.n原创 2013-05-16 21:32:40 · 8412 阅读 · 0 评论 -
用PHP解决万恶的BOM
<?php$path = dirname(__FILE__);scandDir($path);function bomtoutf8($filename){ $ef = 239; $bb = 187; $bf = 191; if (is_dir($filename)) return; $fd = fopen($filename, "rb"); if (!$fd) exit原创 2013-06-27 15:10:37 · 1107 阅读 · 0 评论 -
Yii使用ZF的分页方式
使用类似ZF的方式分页,需要单独写一个分页类,重载run方法,从CPagination得到需要的分页数据,然后使用控制器的renderPartial方法,不能使用render方法这个方法会在视图的控制器目录下找文件,这样指定的位置就不准确了。<?php/*** 解决使用rpc来的数据没有相应的数据提供者的问题* 这里不使用dataProvider,仅仅用分页器和模板来显示分页页面原创 2012-11-29 16:35:48 · 1186 阅读 · 0 评论 -
php5.2与5.3性能测试对比
源地址:http://www.cnblogs.com/silvester/archive/2011/04/01/2002114.html在递归测试、数值运算测试、字符串操作测试、 类和对象测试上5.3性能明显高于5.2,提升大约15%-40%,不过在内存消耗上5.3大于5.2, IO操作速度基本相同。老大伟志让我做的测试,测试方式也许不是绝对正确还希望大家多多指教,详细代码及测试结果如转载 2012-09-28 14:13:36 · 757 阅读 · 0 评论 -
php5.3在windows下使用PEAR
在看一个php框架性能比较的文章时,文章中有各框架UML类图,我想自己画也太费功夫了,有没有自动生成的方案,google下发现真还有http://blog.sina.com.cn/s/blog_698b48a60100lws9.html,通过pear的UML库就可以,由于是php5.3对pear进行了升级不是原来的工具和操作流程,折腾了下发现就用http://blog.pear.php.net原创 2012-09-29 12:09:20 · 1102 阅读 · 0 评论 -
ZendFramework资源加载过程分析
本篇文章主要是在分析ZendFramework1.11版对自定义的Resource的加载过程,也是个人在分析过程中遇到问题的整理1、为了了解这个过程我们先从网上已有的Resource的开发实例(正确的示例)配置产品在library目录下添加resource目录作为个人开发resource插件的路径;增加一个View插件,替换掉现有的bootstrap.php下面的initView方法原创 2012-10-15 12:34:43 · 1462 阅读 · 0 评论 -
ZF和yii性能对比
要开始一个新项目,考虑使用yii的框架,对比了现在使用的ZF框架搭建了一个基础的数据库程序,然后用yii也做了一个,对比后发现,没有实际上说的那么夸张,硬件环境:CPU:intel Xeon 3.6 4核memroy: 4g使用ab测试ab -c 100 -n 10000 http://www.example.com测试结果,yiiRequests per原创 2012-09-25 21:22:12 · 846 阅读 · 0 评论 -
设计无限级分类
产品分类,多级的树状结构的论坛,邮件列表等许多地方我们都会遇到这样的问题:如何存储多级结构的数据?在PHP的应用中,提供后台数据存储的通常是关系 型数据库,它能够保存大量的数据,提供高效的数据检索和更新服务。然而关系型数据的基本形式是纵横交错的表,是一个平面的结构,如果要将多级树状结构存储 在关系型数据库里就需要进行合理的翻译工作。接下来我会将自己的所见所闻和一些实用的经验和大家探讨一下:层级转载 2012-09-25 22:10:36 · 5394 阅读 · 2 评论 -
linux(centos)下编译安装php性能测试工具xhprof笔记
原文:http://www.phpwebgo.com/2012/04/29/243.html一、安装xhprof:wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar zxvf xhprof-0.9.2.tgz cd xhprof-0.9.2 mkdir /home/wwwroot/xhprof cp -r xh转载 2012-09-26 09:17:22 · 2526 阅读 · 0 评论 -
php优化
1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。2.echo 比 print 快。3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。5.注销那些不用的变量尤其是大数组,以便释放内存。6.尽量避免使用__get,__set,__autoload。7.r转载 2012-09-25 22:22:24 · 615 阅读 · 0 评论 -
php效率优化
最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很重要,这里就结合网上的一些资料,总结下php程序效率优化的一些策略:1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_conte转载 2012-09-25 22:26:22 · 974 阅读 · 0 评论 -
php5.3 使用namespace后性能比较及类、函数、静态方法的性能比较
这里不是为了做复杂测试,主要是工作需要,分析一些新设计有多少使用必要,及其影响。连带的就把类方法,类静态方法,函数等的使用性能差别及内存差异进行比较.测试环境WIN7 + Apache2.2 + PHP5.3.171、使用namespace后的性能差别,代码执行10000次字符串拼接:namespace performance;function getMsecTim原创 2012-09-28 15:17:06 · 2853 阅读 · 1 评论 -
对Shanty-Mongo使用过程的一些记录
由于工作上需要用到MongoDB,根据进度原因自己封装了一个简单的实现,当然可以完成现有的任务,在一次测试中发现异常,虽然自己通过封装其他扩展类的方法解决了问题,但是感觉到自己对MongoDB和MongoDB的php扩展了解不足,所以找了一个开源的产品Shanty-Mongo了解下其他实现方式。这个开源库是基于ZendFramework开发的,他对php本身和其他产品也有要求:PH原创 2012-10-24 20:38:27 · 1289 阅读 · 0 评论 -
php性能优化少被注意的部分
下面内容来源于网络和Pro PHP Application Performance1、使用require vs require_once参考:http://www.laruence.com/2012/09/12/2765.htmlrequire is faster than require_once due to the high number of operational原创 2012-09-28 16:20:23 · 710 阅读 · 0 评论