标签存档: PHP

1 查看

HHVM简介

本文是一篇翻译的文章,因为觉得HHVM是以后的趋势,所以兴奋之余就翻译了此文,全当普及。 该文来源:http://coderoncode.com/2013/07/24/introduction-hhvm.html HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。 历史 早在2008年Facebook就开始使用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。   之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。   使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop有不少确定,具体如下:   HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。但老实说,不支持后一个函数我不觉得是件坏事。 Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。 最后,HPHPc部署步骤繁杂,这点很让PHP开发者头疼。. 在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。 其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。   HHVM是在HPHPc的基础上构建,它会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。   下面是一些关于字节码、机器码和即时(JIT)编译器的概念,快速的浏览以下概念,可以清楚这些概念在HHVM所处的角色。 字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。 机器码:是一系列供CPU执行的指令。用过汇编的都应该清楚机器码,估计没人喜欢用汇编编程。通过编译器就可以把汇编转成机器码,然后供CPU处理。 JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。   通过以上技术,HipHop和HHVM获得了性能的提升。   最近,HHVM几乎已经完全支持PHP 5.4了,但还是有不少bug,所以不是所有应用程序都可以运行。因此,Facebook准备让最流行的20个开源PHP项目能够运行在HHVM上。第一个已经支持的项目就是Wordpress。 接下来该怎么做 更好的理解HHVM的功能和优势。在之后的文章中我会讲解如何安装HHVM专用的Vhost,并在HHVM上运行Magento。

9,848 查看

使用Apache Zookeeper分布式部署PHP应用程序

原文:Distributed application in PHP with Apache Zookeeper 地址:http://systemsarchitect.net/distributed-application-in-php-with-apache-zookeeper/ 这篇文章实在不错,实在忍不住翻译下来,希望对大家有用。 Apache Zookeeper是我最近遇到的最酷的技术,我是在研究Solr Cloud功能的时候发现的。Solr的分布式计算让我印象深刻。你只要开启一个新的实例就能自动在Solr Cloud中找到。它会将自己分派到某个分片中,并确定出自己是一个Leader(源)还是一个副本。不一会儿,你就可以在你的那些服务器上查询到了。即便某些服务器宕机了也可以继续工作。非常动态、聪明、酷。 将运行多个应用程序作为一个逻辑程序并不是什么新玩意。事实上,我在几年前就已写过类似的软件。这种架构比较让人迷惑,使用起来也费劲。为此Apache Zookeeper提供了一套工具用于管理这种软件。 为什么叫Zoo?“因为要协调的分布式系统是一个动物园”。 在本篇文章中,我将说明如何使用PHP安装和集成Apache ZooKeeper。我们将通过service来协调各个独立的PHP脚本,并让它们同意某个成为Leader(所以称作Leader选举)。当Leader退出(或崩溃)时,worker可检测到并再选出新的leader。 ZooKeeper是一个中性化的Service,用于管理配置信息、命名、提供分布式同步,还能组合Service。所有这些种类的Service都会在分布式应用程序中使用到。每次编写这些Service都会涉及大量的修bug和竞争情况。正因为这种编写这些Service有一定难度,所以通常都会忽视它们,这就使得在应用程序有变化时变得难以管理应用程序。即使处理得当,实现这些服务的不同方法也会使得部署应用程序变得难以管理。 虽然ZooKeeper是一个Java应用程序,但C也可以使用。这里就有个PHP的扩展,由Andrei Zmievski在2009创建并维护。你可以从PECL中下载,或从GitHub中直接获取PHP-ZooKeeper。 要使用该扩展你首先要安装ZooKeeper。可以从官方网站下载。 $ tar zxfv zookeeper-3.4.5.tar.gz $ cd zookeeper-3.4.5/src/c $ ./configure –prefix=/usr/ $ make $ sudo make install 这样就会安装ZooKeeper的库和头文件。现在准备编译PHP扩展。 $ …

继续阅读 »

3,445 查看

PHP中的源代码签名(PHP源码学习快速方法)

在阅读了一篇文章后,觉得有必要写一个源码签名收集器,所以就自己动手扩展了个, 下面是实现的主要细节。另外,附我读的那篇文章的翻译。详见文章最后部分。 使用方法: 假设对应的php脚本文件,名为SourceCodeIteration.php 此时,我们在需要遍历的源码包的根目录处,新建一个脚本,名为runGetSourceCode.php,代码如下: <?php include("SourceCodeIteration.php");//引入库 $si = new SourceIteration();//初始化源码遍历对象 $si->GetInfo();//获取签名,并打印在页面上 效果图如下: 接下来,直接贴我改造后的代码,具体的原理详解可以点击参看,翻译部分 <?php class SourceIteration { var $baseDir; var $type; //.php;.aspx; you can use ; to split different type var $displayWay; var $seperator; var $RoleArray; var $initIndent; var …

继续阅读 »

1,041 查看

PHP中的输出控制总结

Output Control(输出控制) 简介                                                                                                                                                                             当通过脚本发送输出时,可以使用输出控制函数进行控制。在一些不同的场合很有用,在你的脚本已开始输出数据后,如果你需要发送headers到浏览器,这时会更加有用。输出控制函数不会影响通过header()或setcookie()发送的headers,只会影响像echo(),还有在PHP代码块之间的数据。 正常来说,如果不适用输出缓存,当出现HTML标签,echo时,都是即时向客户端发送的。这样在使用header(),setcookie()等函数时,就容易出现问题。但是,你可以通过使用输出缓存去解决这个问题。因为当启用输出缓存后,你所有发送给浏览器的输出都会在服务器进行缓存直到你通过调用函数去发送这些输出。你可以通过在你的脚本中调用ob_start()和ob_end_flush(),或在php.ini中设置output_buffering配置来实现。 这样就意味着,你可以通过命令来安排优先级进行信息的发送。例子: <?php ob_start(); echo "data in outputBuffer"; ?> <html> <head> <?php header("Location:www.baidu.com"); ?> </head> <body> test body </body> </html> <?php ob_end_flush(); ?> 这样是不会出错的,否则如果没有ob_start()和ob_end_flush()的话,就会出现错误,就是header()前不能有输出的错误。 运行时配置                                                                                                                                                                   php.ini中的一些相关配置信息,均会影响输出控制函数的行为。 输出控制配置项 Name Default Changeable Changelog output_buffering "0" PHP_INI_PERDIR   output_handler NULL …

继续阅读 »

1,202 查看

PHP中的并行处理(简)

针对多核的cpu泛滥的今天,如何使用好这些CPU资源成了重要的话题。于是异步和并行便开始了大行其道。在PHP中也有异步或并行编程的概念。接下来让我们看具体的例子。 并行处理                                                                               现在我们需要跑两个任务,分别为job1.php和job2.php job1.php的代码如下: $jobname = 'job1'; set_time_limit(0); $secs = 30; while ($secs) { echo 'current job is'.$jobname,'::',$secs,"\n"; flush(); @ob_flush(); ## make sure that all output is sent in real-time $secs -= 1; $t = time(); sleep(1); // pause } …

继续阅读 »

607 查看

如何分析和提供PHP的并行问题

概述: 对于分析并行问题最有效的方法就是递归式地将问题分隔成2个或多个相同类型的子问题,直到这些问题简单(和快速)到可以直接解决。 然后将这些子问题的解决方案组合成为原问题的解决方案。 实例: 为了更好的解释,我们举个实例。在数据库中现在有几百万条的财政支付数据记录,现在你希望使用PHP并行地处理: 1、首先将你的数据按逻辑块分组,将需要在同一个事物中处理的分成一组。如果你要为很多个账号处理支付信息的话,就根据账号进行分组。 2、确定并行处理的个数。例如,如果我们的服务器是1U的双核CPU,那么我们就运行2个并发的子处理。 3、将所有的记录进行分割,具体按照什么分割根据实际情况,比如中位数、因为中位数可以很好的在数量上均分记录。 4、按照我们之前说的情况,我们将第一条记录到中位数对应的记录交给一个子处理,第二个子处理就处理余下的记录。 以上只是说明了个很简单的情况,我们这里的分割时根据中位数的,在很多实际情况中,我们并不会这样分,更可能是根据不同性质的数据交由不同的服务进行处理。但是大致的思想就是如此。

880 查看

MySQL开放远程访问权限

创建MySQL权限 您需要在被监控的MySQL服务器上创建一个专用的用于远程访问的MySQL用户,这样做的好处是: 与您的其它MySQL用户进行有效隔离,独立管理。 对该用户进行受限管理,不需要给予任何MySQL权限。 指定特定的访问IP地址,阻止其它非法访问。 操作非常简单,在MySQL中操作如下: CREATE USER "username"@"xxx.xxx.xxx.xxx" IDENTIFIED BY "your_password"; 在以上操作中,我们创建的MySQL用户名为“username”,密码为“your_password”,建议您对其进行修改。 同时,目前指定的授权IP地址为:xxx.xxx.xxx.xxx。 此时该MySQL用户是没有足够权限读写的。 如果我们需要对该MySQL账户授予特定权限。 使用grant命令对数据库权限进行分配     格式:grant 权限 on 数据库名.表名 to 用户名@登录主机 identified by "用户密码"; example:grant select,update,insert,delete on *.* to root@192.168.1.12 identified by "password";                 grant all privileges  on *.* to …

继续阅读 »

无觅相关文章插件,快速提升流量