-
深入解析PHP内存管理之谁动了我的内存
本文为大家讲解的是深入解析PHP内存管理之谁动了我的内存,感兴趣的同学参考下。 首先让我们看一个问题: 如下代码的输出, var_dump(memory_get_usage()); $a = "laruence"; var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage()); 输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同): int(90440) int(90640) int(90472) 注意到 90472-90440=32, 于是就有了各种的结论, 有的人说PHP的unset并不真正释放内存, 有的说, PHP的unset只是在释放大变量(大量字符串, 大数组)的时候才会真正free内存, 更有人说, 在PHP层面讨论内存是没有意义的. 那么, 到底unset会不会释放内存? 这32个字节跑哪里去了? 要回答这个问题, 我将从俩个方面入手: 这32个字节去哪里了 首先我们要打破一个思维: PHP不像C语...
PHP 2014-12-23 07:12:03 -
深入理解PHP之数组(遍历顺序)
本文为大家讲解的是深入理解PHP之数组(遍历顺序) ,感兴趣的同学参考下. 经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢? 比如: <?php $arr['laruence'] = 'huixinchen'; $arr['yahoo'] = 2007; $arr['baidu'] = 2008; foreach ($arr as $key => $val) { //结果是什么? } 又比如: <?php $arr[2] = 'huixinchen'; $arr[1] = 2007; $arr[0] = 2008; foreach ($arr as $key => $val) { //现在结果又是什么? } 要完全了解清楚这个问题, 我想首先应该要大家了解PHP数组的内部实现结构……… PHP的数组 在PHP中...
PHP 2014-12-19 09:48:08 -
PHP设计模式之解释器模式的深入解析
本文以示例的形式向大家介绍了PHP设计模式之解释器模式的深入解析,感兴趣的同学参考下。 解释器(Interpreter)模式,它包括一个具有复合类分层结构的文法表现,规则是映射到类,跟随在文法后面的表达式可以被转换成一个抽象的语法树,除了复合模式的实例对象图外,没有别的内容...
PHP 2014-12-19 08:57:07 -
PHP中的Session和Cookie深入分析
本文为大家讲解的是PHP中的Session和Cookie深入分析,感兴趣的同学参考下。 在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值. 原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有接收到客户端发送过来的 cookie 变量的值,当刷新或到下一个页面时,客户端会在页面程序在服务器端运行之前,发送与该地址相对应的 cookie到服务器端,所以 $_COOKIE 可以得到的值! 说白了就是当每一个页面被访问时,如果客户端找到了与访问地址相对应的 cookie 时,会在程序在服务器端运行之前发送这个 cookie 到服务器端. (个人对此的看法) 本人表达能力不强,如有不明,还请抱歉! php中设置cookie数组的时候,不可以用像php中的那个添加数据的方法: <?php setcookie('my_cookie[]', 1); setcookie('my_cookie[]', ...
PHP 2014-12-19 02:36:04 -
深入理解PHP原理之Session Gc的一个小概率Notice
PHP Notice: session_start(): ps_files_cleanup_dir 如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) in /home/laruence/www/htdocs/index...
PHP 2014-12-16 08:54:05 -
深入解析PHP垃圾回收机制对内存泄露的处理
本文为大家深入解析了PHP垃圾回收机制对内存泄露的处理方法,感兴趣的同学参考下。 上次说到了refcount和is_ref,这里来说说内存泄露的情况 $a = array(1, 2, &$a); unset($a); 在老的PHP版本中,这里就会出现内存泄露,分析如下: 执行第一行,可以知道$a和$a[2]指向的zval refcount=2,is_ref=1 然后执行第二行,$a将会从符号表中被删除,同时指向的zval的refcount--,此时refcount=1,因为refcount!=0,故此zval不会被当做垃圾回收,但是此时我们却失去了$a[2]指向这个zval的入口,因此这个zval成了一块内存垃圾 同样的道理可以发生在类内部引用里,例如 $a = new Man(); $a->self = &$a; unset($a); 那么如何解决这种问题呢,新的GC机制采用了一个算法来解决这个问题 PHP有一个root buffer用来存储zval的节点信息,当root...
PHP 2014-12-15 13:21:08 -
深入PHP变量存储的详解
本文是对PHP变量的存储进行了详细的分析介绍,感兴趣的朋友参考下 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值,该结构如下所示: typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value; struct _zval_struct { /* Variable information */ zv...
PHP 2014-12-15 07:24:08 -
诺基亚Lumia920升级到Lumia930的深入感受
站长搜索(www.adminso.com):诺基亚Lumia920升级到Lumia930的深入感受 WP之家讯 目前Windows Phone还没有推出下一代具有明显色彩标志的旗舰智能手机,很多人也在迟疑是否需要将手中的Lumia920升级到Lumia930,还是继续等待Win10(WP10)旗舰。外媒编辑在2014年8月7日购买了一部Lumia930升级装备,虽然如此,但是之前Lumia930的姊妹Lumia Icon已经发布,Lumia930并非真正意义上的新旗舰...
业界动态 2014-12-09 10:12:08 -
亚马逊深入O2O服务:新推餐馆外卖订送
站长搜索讯 全球电子商务巨头亚马逊的触角,正在向一切可能的领域延伸。不久前,该公司刚刚推出了自有品牌的纸尿布等产品,据PCMAG等美国科技新闻网站报道,亚马逊日前又开始试验性推出本地餐馆外卖接单的服务...
电子商务 2014-12-08 22:21:14 -
深入理解PHP原理之异常机制
本文为大家讲解的是PHP中的异常处理机制分析说明,感兴趣的同学参考下。 PHP的异常机制的原理是什么? 在PHP每一个可独立执行的op array最后的ZEND_HANDLE_EXCEPTION是用来干什么呢? 让我们从一个问题说起, 上周的时候, blue5tar提了一个问题:”对于下面的代码, onError明明执行了, 但是onException却没有执行, 为什么?”. <?php function onError($errCode, $errMesg, $errFile, $errLine) { echo "Error Occurredn"; throw new Exception($errMesg); } function onException($e) { echo $e->getMessage(); } set_error_handler("onError"); set_exception_handler("onException")...
PHP 2014-12-07 12:09:26 -
深入理解PHP原理之错误抑制与内嵌HTML分析
本文为大家讲解的是深入理解PHP原理之错误抑制与内嵌HTML分析,感兴趣的同学下。 PHP支持内嵌HTML的, 那么对于PHP文件中, PHP标签外的HTML会怎么处理呢? 它和直接输出HTML有什么区别么? PHP提供了一个错误抑制符'@', 它是通过什么方式来阻止错误输出呢? 我又该在什么时候使用它呢? 这是这俩天一些网友提到的共同问题, 今天就索性整体回答下, 备后来人翻阅. PHP文件内嵌HTML的处理方式 在PHP中, 所有在标签外的字符, 在词法分析过程中, 都会翻译成T_INLINE_HTML token, 在语法分析的时候, 所有的T_INLIE_HTML都会被分配ZEND_ECHO输出. 也就是说: <?php while($con) { ?> laruence <?php } ?> 会生成一条OPLINE: T_ECHO, 而操作数是”laruence”; 就结果来说, 上面的代码, 其实和下面的结果一样: <?php while($c...
PHP 2014-12-07 04:33:03 -
深入理解PHP之require/include顺序
本文为大家讲解的是php中的require/include顺序说明,感兴趣的同学参考下。 在大型的Web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经常会让我们遇到一些因为没有找到正确的文件而导致的看似”诡异”的问题. 也就有了如下的疑问: include_path是怎么起作用的? 如果有多个include_path顺序是怎么样的? 什么情况下include_path不起作用? 今天, 我就全面的介绍下这个问题, 先从一个例子开始吧. 如下的目录结构: root ├ 1.php ├ 3.php └ subdir &nbs...
PHP 2014-12-07 01:27:04