[译] PHP5.6的新特性

    原文链接:http://www.sitepoint.com/new-features-php-5-6/

    前面两段是作者吐槽PHP核心开发者的。。我们看重点。。此处省略500字。。。

    CLI服务器中得MIME类型

    MIME类型在php中用于输出其他非PHP类型的内容,也就是说你可以输出一个不是text/html类型的内容。当你执行一个PHP页面,默认输出的是text/html,但是你能用headers去设置他。例如PDF和生成PDF,因为通常的服务器都是HHVM,nginx,apache等,所以当服务器知道是一个不同的MIME类型,服务器知道怎样去根据文件的后缀去给他一个默认类型。而不必跑到PHP中去确认。从PHP5.4的命令行服务器只有几个MIME至今,这个版本将要扩充到几十个。可以肯定的说,所有的MIME类型都将内置在PHP服务器当中了。

    内建运算符重载

    这个功能对于用PHP来做web开发的开发者来说应该接触不到,因为是“内部”的。内部的意思是:非用户空间中得,用户空间是PHP开发者们使用的区域。只有内部类使用他,以使开发更加简洁和可读性更好。在这里有更详细的解释。

    现在可以上传超过2G的文件    

    知道5.6,之前所有的PHP版本上传文件都不可以超过2G,这已经是过去式了。新版的changelog表明,现在已经支持上传任意大小的文件了。

    POST数据的内存使用量下降

    POST数据的内存使用量已经下降了2-3倍,并且取消了这两个设置:always_populate_raw_post_data 在 php.ini 里面的设置,以及 $HTTP_RAW_POST_DATA 这个超全局变量。这意味着你不能再用原来的方式访问post数据。需要依赖于另一种解决方案:

$postdata = file_get_contents("php://input");

 当这个表单被分成多个部分时,是无法用 ://input 获得POST的数据的(换句话说,如果这个表单中有一个文件域的话,就不行)

Continue reading

师夷长技 | wwpeng | | (0) |

[译] 战前准备,Nginx优化指南

    原文地址:http://blog.zachorr.com/nginx-setup/

    ———————————————————————-

    大多数Nginx的安装指南告诉你基础信息 —— apt-get 一个包,这里那里的修改几行,这样 你就得到了一个web 服务器!并且,在大多数的情况下,这样傻瓜式安装的Nginx 可以很好的为你的站点工作。但是,如果你真的想压榨出Nginx的性能,你将不得不一步一步慢慢来。在这个指南中,我将说明如何对Nginx的参数进行微调能更好的应付较大的访问量。仅仅是一个说明,这不是一个全面的微调综合指南。它是对调整一些设置能提交的性能的一些说明。你的水平可能不同(读者水平参差不齐)。

基础(优化)配置

    你只需要修改你的Nginx配置文件 nginx.conf,这里有全部的nginx的不同模块的设置项。你应该能够你的服务器的 /etc/nginx 目录下找到nginx.conf。首先,我将告诉你一些全局设置,然后在讨论各个模块的设置,谈论哪些设置能为大的访问量提供最佳性能,和为什么他们能有更好的性能,在文章的末尾你可以找到一个完整的配置文件。

顶级配置

    Nginx的nginx.conf配置文件中有少数几个配置选项,在其他模块配置之上。

user www-data;

pid /var/run/nginx.pid;

worker_processes auto;

worker_rlimit_nofile 100000;

    userpid 都应该使用默认设置。我们不用修改,他不会为我们的性能用户做什么。

    worker_processes 定义的是nginx为你的站点提供服务时可以启用的worker进程的数量。这个配置的最优值取决与很多的因素,包括(但不仅限于)CPU的核心数量,数据硬盘的数量以及负载模式。当你不确定的时候,将它设置为CPU的核心数是一个不错的开始(如果这个值是“auto”nginx将尝试自动检测)。

    worker_rlimit_nofile 更改这个限制,可以更改worder进程最大的文件打开数。如果没有设置,将使用操作系统的限制值。设置后你的系统和nginx能处理比 “ulimit -n” 更多的文件。所以我们要将这个值设置的高一些,这样nginx就再也不会出现 “too many open files” 的issue了。确保你的操作系统也更新了这些值。

Continue reading

[译]鲜为人知的PHP OO模型 “功能(Features)”

原文地址:http://www.sitepoint.com/lesser-known-features-of-phps-oo-model/

(刚开始翻译,其中诸多地方翻译的不是很好,不幸被大神看到请使劲拍~~)

如今大多数的PHP应用都使用面向对象模式开发,而且PHP的开发者对OOP概念都有不错的理解。本文将拓展你的认知,并告诉你一些技巧和潜在的误区。

接口的继承以及 Traits

让我们从熟悉的领域“继承”开始。PHP接口允许我们定义一个约束,任何实现这个接口的对象必须在他自身实现这个接口(中的抽象方法)。但是你知道接口可以继承其他接口并且父或子接口都能被类实现吗?

考虑下面这段代码,定义一个接口,另一个接口继承他,并且用一个类实现这个子接口:

<?php
interface Reversible
{
    function reverse($target);
}
 
interface Recursible extends Reversible
{
    function recurse($target);
}
 
class Tricks implements Recursible
{
    public function recurse($target) {
        // something cool happens here
    }
 
    public function reverse($target) {
        // something backward happens here
    }
}

Continue reading

师夷长技 | wwpeng | | (1) |

[译]修复PHP HashTable碰撞DOS 引入新的远程访问漏洞

原文:http://thexploit.com/sec/critical-php-remote-vulnerability-introduced-in-fix-for-php-hashtable-collision-dos/

(初步练习翻译,各种不当求大神指出~)

Stefan Esser (@i0n1c)

一个安全修复引入另外的漏洞

今天, Stefan Esser (@i0n1c) 提交了一个 PHP 5.3.9 (updateassigned CVE-2012-0830) 版本下重要的远程利用漏洞。有趣的是,这个漏洞是为了修复十二月提交的哈希碰撞导致拒绝服务 DOS (CVE-2011-4885) 的漏洞而引入的。

关于漏洞的修复

为了防止哈希碰撞这个修复在 php.ini 配置文件中引入了一个新的参数:
max_input_vars

这个配置参数限制了请求提交的变量的数量(e.g. http://request.com/foo.php?a=1&b=2&c=3)。默认值是1000。

这个修改在文件 php_variables.c 的方法 php_register_variable_ex 中。

通过这个方法,PHP会“注册”所有提交过来的变量。

if (sapi_module.input_filter(PARSE_POST, var, &val, val_len, &new_val_len TSRMLS_CC)) {
    php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
}

Continue reading

师夷长技 | wwpeng | | (0) |