1. Xhprof安装与使用

    前两天遇到一个PHP代码的bug,分析的结果是:因为要处理的数据量过大,内存分配超出了限制(php.ini中配置项memory_limit,默认是128M)。长期使用Python/PHP做Web开发,对于内存使用关注较少,这个事情让我重新关注起代码的内存占用问题,所以为工作中使用的测试开发环境配置Xhprof,进行性能数据收集分析(注:我们项目是用PHP开发的)。之所以选择Xhprof,是因为比较轻量,对性能影响较小,甚至可以一定方式用于生产环境,安装使用也方便。

    安装

    Xhprof是一个PHP扩展,安装方式与一般PHP扩展一致。

    1.从这里下载最新的源码包。假设解压缩后的文件夹为xhprof

    2.编译安装

    cd xhprof/extension
    /path/to/php/bin/phpize
    ./configure --with-php-config=/path/to/php/bin/php-config
    make
    make install ...
    Tagged as : PHP 笔记 Xhprof
  2. Yii源码阅读笔记 - 错误/异常处理

    概述

    PHP区分“错误”(Error)和“异常”(Exception)。“错误”通常是由PHP内部函数抛出,表示运行时问题,当然也可以通过函数trigger_erroruser_error抛出一个用户级别的error/warning/notice信息。但在引入面向对象之后,相比使用trigger_error抛出错误,使用throw抛出异常更常用。

    对于“错误”,PHP允许配置报告哪些级别/类型错误、是否(向用户)展示错误、是否对错误记录日志、错误日志记到哪,分别对应php.ini中的配置项:error_reportingdisplay_errorslog_errorserror_log。详细信息见这里

    对于应用程序内层调用抛出的“异常”,一般可以在外层中使用try...catch来捕获并自定义处理过程。但对于“错误”(PHP运行时抛出或者应用程序使用trigger_error抛出的)或者对于-无法使用try...catch来捕获可能的异常/为了做到即使忘记捕获的异常也能得到自定义处理-的情况,该怎么办 ...

    Tagged as : PHP Yii 笔记 总结
  3. 一行式并行方案(译)

    原文:Parallelism in one line

    译者:youngsterxyf

    在并行处理能力方面,Python的声名并不太好。不考虑关于线程和GIL(多数情况下是合理的)的标准论据,我认为Python中关于并行的真正问题并不是一个技术问题,而是教学问题。围绕Python线程和多进程的常见教程,一般都写得不错,但也令人乏味 - 激烈非凡,对日常真正有用的东西却很少涉及。

    沿袭的例子

    在DuckDuckGo(DDG)中搜索“Python多线程教程”,简单调查一下排在前面的结果,就会发现它们给出的都是同样基于Class + Queue的示例。

    介绍threading/multiprocessing、生产者/消费者的真实示例代码:

    # coding: utf-8
    # Example.py
    '''
    标准的多线程生产者/消费者模式
    '''
    
    import time 
    import threading 
    import Queue 
    
    class Consumer(threading.Thread): 
      def __init__(self ...
    Tagged as : PHP 翻译 并行
  4. 那些Python党踩过的PHP坑

    一看题目貌似本文要准备吐槽PHP,但遇到“坑”主要是因为个人经验不足。

    JSON反序列化 json_decode

    函数 json_decode 默认反序列化的结果是对象。Python党在做PHP开发用到这个方法时,很可能会跳进这个坑,认为结果应该是个数组,因为Python中json.loads返回的是一个字典。 json_decode 的第二个参数 $assoc 可用来指定反序列化的结果为数组。

    文档:http://php.net/manual/zh/function.json-decode.php


    数组序列化

    Python党初学PHP,可能类比于Python的列表和字典,认为PHP中明确区分索引数组和关联数组。但:

    PHP 实际并不区分索引数组和关联数组,都是一种有序映射。

    虽然很多时候索引数组和关联数组在表现上是不一样的,比如对以下两个数组进行序列化:

    <?php
    $arrA = array('a', 'b', 'c');
    echo json_encode($arrA) . "\n";
    
    $arrB = array('a ...
    Tagged as : PHP 笔记
  5. Yii源码阅读笔记 - 自定义类自动加载

    前两天突然发现:之前的阅读笔记对于Yii应用中如何自动加载自定义类的问题没有解释。这里的自定义类是指非Yii框架本身的类。

    关于组件类的配置加载已在 Yii源码阅读笔记 - 组件集成 一文中做了较为详细的说明, 所以这里不再涉及。

    本文主要解释以下两点:

    1. Yii框架是如何找到请求对应的自定义控制器类?
    2. 在自定义控制器类中使用其他类(如Model类、或其他任意目录下文件中定义的类)时,Yii框架是如何自动加载的?

    Yii源码阅读笔记 - 应用模块化 一文中介绍类 CWebApplication 中的方法 createController , 该方法根据目标路由找到对应的控制器类文件并加载,方法中有行代码:

    $basePath=$owner->getControllerPath();
    

    这里的 getControllerPath 会返回当前应用或模块下的控制器类的存放目录,对应应用级与模块级,其实现有两处,其一是在类 CWebApplication 中:

    /**
     * @return string the directory that contains the controller classes. Defaults to 'protected/controllers'.
     */
    public function ...
    Tagged as : PHP Yii 笔记 总结
  6. Slim源码阅读笔记

    以前读过 PHP - The Right Way 一文, 还翻译过其中的 The Baiscs 一节 (译文见 这里)。

    前两周读了 Modern PHP - New Features and Good Practices 一书 (读书笔记见这里), 甚是不错。

    这篇文档和这本书的作者都是Josh Lockhart, 他写了一个Web框架Slim,文档与书籍内容的精华都体现在这个框架中, 所以个人觉得这个框架值得一读。

    Slim的设计与实现都非常精简易懂,其对请求的主处理流程如下图所示:

    slim-process

    其中的核心概念包括:IoC容器、中间件、路由匹配等。

    IoC容器

    IoC,为Inversion of Control的缩写,中文翻译为“控制反转” - 是一种解决组件间依赖关系、配置和生命周期的设计模式,其最常见的实现方式为:依赖注入(DI)- 当系统 ...

    Tagged as : PHP slim 笔记 总结
  7. Yii源码阅读笔记 - 日志组件

    使用

    Yii框架为开发者提供两个静态方法进行日志记录:

    Yii::log($message, $level, $category);
    Yii::trace($message, $category);
    

    两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG:

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    

    Yii::log方法的调用需要指定message的level和category。category是格式为“xxx.yyy.zzz”的路径别名字符串,比如日志是在yii/framework/web/CController类中记录的,那么category为“system.web.CController”。level应为以下几种之一:

    • trace:Yii::trace方法即是使用的这个level。用于跟踪执行流
    • info:记录通用信息日志
    • profile:用于性能分析
    • warning:用于记录警告日志
    • error:用于记录重大错误日志

    要想日志真的输出到文件、邮件、web页面等地方 ...

    Tagged as : PHP Yii 笔记 总结

Page 1 / 3