Linux环境下PHP7.0的安装方法

这篇文章将为大家详细讲解有关Linux环境下PHP7.0的安装方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

PHP7和HHVM比较 PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM。HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂了, 并且它不会自动重启。另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为糟糕。并且多线程模型调试困难, 这对于追求稳定来说的Web服务来说, 是非常不适合的。

Nginx以及PHP7.0之前的版本可以参考此文:Linux环境Nginx安装与调试以及PHP安装

PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布。

linux版本:64位CentOS 6.6

Nginx版本:nginx1.8.0

php版本:php-7.0.2

下载

wget http://php.net/get/php-7.0.2.tar.gz/from/a/mirror

建议安装之前先看看安装帮助文件INSTALL

解压安装

tar zxvf php-7.0.2.tar.gz

cd php-7.0.2

首先查看安装帮助

./configure --help

./configure --prefix=/usr/local/php \

–with-curl –with-freetype-dir –with-gd –with-gettext –with-iconv-dir –with-kerberos –with-libdir=lib64 –with-libxml-dir –with-mysqli –with-openssl –with-pcre-regex –with-pdo-mysql –with-pdo-sqlite –with-pear –with-png-dir –with-xmlrpc –with-xsl –with-zlib –enable-fpm –enable-bcmath –enable-libxml –enable-inline-optimization –enable-gd-native-ttf –enable-mbregex –enable-mbstring –enable-opcache –enable-pcntl –enable-shmop –enable-soap –enable-sockets –enable-sysvsem –enable-xml –enable-zip 如果配置错误,需要安装需要的模块,直接yum一并安装依赖库

yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql pcre-devel

注意:安装php7beta3的时候有几处配置不过去,需要yum一下,现在php-7.0.2已经不用这样了。

yum -y install curl-devel

yum -y install libxslt-devel

编译安装

make && make install

配置文件

cp php.ini-development /usr/local/php/lib/php.ini

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

cp -R ./sapi/fpm/php-fpm /etc/init.d/php-fpm

需要注意的是php7中www.conf这个配置文件配置phpfpm的端口号等信息,如果你修改默认的9000端口号需在这里改,再改nginx的配置 启动

/etc/init.d/php-fpm

查看phpinfo()php7和php5性能分析比较

生成一个 60 万元素的数组,通过查找key 的方式,来确定key是否存在。

PHP 5.4.44 版 [root@localhost www5.4.44]# time /usr/local/php5.4.44/bin/php search_by_key.php

real 0m0.351s user 0m0.300s sys 0m0.050s

PHP 5.5.28 版 [root@localhost www]# time /usr/local/php/bin/php search_by_key.php real 0m0.361s user 0m0.304s sys 0m0.057s

PHP 7.0.0 版 [root@localhost www7]# time /usr/local/php7/bin/php search_by_key.php real 0m0.114s user 0m0.097s sys 0m0.017s

很明显php7的性能是php5的3倍!

配置opcache 官网地址:http://php.net/opcache 使用下列推荐设置来获得较好的 性能:

opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1 你也可以禁用 opcache.save_comments 并且启用 opcache.enable_file_override。 需要提醒的是,在生产环境中使用上述配置之前,必须经过严格测试。 因为上述配置存在一个已知问题,它会引发一些框架和应用的异常, 尤其是在存在文档使用了备注注解的时候。

vim /usr/local/php7/etc/php.ini

加入

zend_extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20141001/opcache.so

重启

killall php-fpm

/etc/init.d/php-fpm

Opcache 状态测试代码(https://gist.github.com/ck-on/4959032)进行演示:

1||php_sapi_name()=='cli'||empty($_SERVER['REMOTE_ADDR'])){die;}//weakblockagainstindirectaccess

$time=time();
define('CACHEPREFIX',function_exists('opcache_reset')?'opcache_':(function_exists('accelerator_reset')?'accelerator_':''));

if(!empty($_GET['RESET'])){	
if(function_exists(CACHEPREFIX.'reset')){call_user_func(CACHEPREFIX.'reset');}
header('Location:'.str_replace('?'.$_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']));
exit;
}

if(!empty($_GET['RECHECK'])){
if(function_exists(CACHEPREFIX.'invalidate')){
$recheck=trim($_GET['RECHECK']);$files=call_user_func(CACHEPREFIX.'get_status');
if(!empty($files['scripts'])){
foreach($files['scripts']as$file=>$value){
if($recheck==='1'||strpos($file,$recheck)===0)call_user_func(CACHEPREFIX.'invalidate',$file);
}
}
header('Location:'.str_replace('?'.$_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']));
}else{echo'Sorry,thisfeaturerequiresZendOpcachenewerthanApril8th2013';}
exit;
}



?>
OCP - Opcache Control Panel


OpcacheControlPanel

Details Files Reset Recheck Refresh

Opcachenotdetected?';die;} if(!empty($_GET['FILES'])){echo'

filescached

';files_display();echo'

';exit;} if(!(isset($_REQUEST['GRAPHS'])&&!$_REQUEST['GRAPHS'])&&CACHEPREFIX=='opcache_'){graphs_display();if(!empty($_REQUEST['GRAPHS'])){exit;}} ob_start();phpinfo(8);$phpinfo=ob_get_contents();ob_end_clean();//someinfoisonlyavailableviaphpinfo?sadlybufferingcapturehastobeused if(!preg_match('/module\_Zend(Optimizer\+|OPcache).+?(\]*\>.+?\<\/table\>).+?(\]*\>.+?\<\/table\>)/s',$phpinfo,$opcache)){}//todo if(function_exists(CACHEPREFIX.'get_configuration')){echo'

general

';$configuration=call_user_func(CACHEPREFIX.'get_configuration');} $host=function_exists('gethostname')?@gethostname():@php_uname('n');if(empty($host)){$host=empty($_SERVER['SERVER_NAME'])?$_SERVER['HOST_NAME']:$_SERVER['SERVER_NAME'];} $version=array('Host'=>$host); $version['PHPVersion']='PHP'.(defined('PHP_VERSION')?PHP_VERSION:'???').''.(defined('PHP_SAPI')?PHP_SAPI:'').''.(defined('PHP_OS')?''.PHP_OS:''); $version['OpcacheVersion']=empty($configuration['version']['version'])?'???':$configuration['version'][CACHEPREFIX.'product_name'].''.$configuration['version']['version']; print_table($version); if(!empty($opcache[2])){echopreg_replace('/\\[^>]+\<\/td\>\[0-9\,\.]+\<\/td\>\<\/tr\>/','',$opcache[2]);} if(function_exists(CACHEPREFIX.'get_status')&&$status=call_user_func(CACHEPREFIX.'get_status')){ $uptime=array(); if(!empty($status[CACHEPREFIX.'statistics']['start_time'])){ $uptime['uptime']=time_since($time,$status[CACHEPREFIX.'statistics']['start_time'],1,''); } if(!empty($status[CACHEPREFIX.'statistics']['last_restart_time'])){ $uptime['last_restart']=time_since($time,$status[CACHEPREFIX.'statistics']['last_restart_time']); } if(!empty($uptime)){print_table($uptime);} if(!empty($status['cache_full'])){$status['memory_usage']['cache_full']=$status['cache_full'];} echo'memory'; print_table($status['memory_usage']); unset($status[CACHEPREFIX.'statistics']['start_time'],$status[CACHEPREFIX.'statistics']['last_restart_time']); echo'statistics'; print_table($status[CACHEPREFIX.'statistics']); } if(empty($_GET['ALL'])){meta_display();exit;} if(!empty($configuration['blacklist'])){echo'blacklist';print_table($configuration['blacklist']);} if(!empty($opcache[3])){echo'runtime';echo$opcache[3];} $name='zendopcache';$functions=get_extension_funcs($name); if(!$functions){$name='zendoptimizer+';$functions=get_extension_funcs($name);} if($functions){echo'functions';print_table($functions);}else{$name='';} $level=trim(CACHEPREFIX,'_').'.optimization_level'; if(isset($configuration['directives'][$level])){ echo'optimizationlevels'; $levelset=strrev(base_convert($configuration['directives'][$level],10,2)); $levels=array( 1=>'Constantssubexpressionselimination(CSE)true,false,null,etc.
OptimizeseriesofADD_STRING/ADD_CHAR
ConvertCAST(IS_BOOL,x)intoBOOL(x)
ConvertINIT_FCALL_BY_NAME+DO_FCALL_BY_NAMEintoDO_FCALL', 2=>'Convertconstantoperandstoexpectedtypes
ConvertconditionalJMPwithconstantoperands
OptimizestaticBRKandCONT', 3=>'Convert$a=$a+exprinto$a+=expr
Convert$a++into++$a
OptimizeseriesofJMP', 4=>'PRINTandECHOoptimization(defunct)', 5=>'BlockOptimization-mostexpensivepass
Performsmanydifferentoptimizationpatternsbasedoncontrolflowgraph(CFG)', 9=>'Optimizeregisterallocation(allowsre-usageoftemporaryvariables)', 10=>'RemoveNOPs' ); echo'PassDescription'; foreach($levelsas$pass=>$description){ $disabled=substr($levelset,$pass-1,1)!=='1'||$pass==4?'white':''; echo''.$pass.''.$description.''; } echo''; } if(isset($_GET['DUMP'])){ if($name){echo'ini';print_table(ini_get_all($name,true));} foreach($configurationas$key=>$value){echo'

',$key,'

';print_table($configuration[$key]);} exit; } meta_display(); echo'

'; exit; functiontime_since($time,$original,$extended=0,$text='ago'){ $time=$time-$original; $day=$extended?floor($time/86400):round($time/86400,0); $amount=0;$unit=''; if($time<86400){ if($time<60) {$amount=$time;$unit='second';} elseif($time<3600){$amount=floor($time/60);$unit='minute';} else {$amount=floor($time/3600);$unit='hour';} } elseif($day<14){$amount=$day;$unit='day';} elseif($day<56){$amount=floor($day/7);$unit='week';} elseif($day<672){$amount=floor($day/30);$unit='month';} else{ $amount=intval(2*($day/365))/2;$unit='year';} if($amount!=1){$unit.='s';} if($extended&&$time>60){$text='and'.time_since($time,$time<86400?($time<3600?$amount*60:$amount*3600):$day*86400,0,'').$text;} return$amount.''.$unit.''.$text; } functionprint_table($array,$headers=false){ if(empty($array)||!is_array($array)){return;} echo''; if(!empty($headers)){ if(!is_array($headers)){$headers=array_keys(reset($array));} echo''; foreach($headersas$value){echo'',$value,'';} echo''; } foreach($arrayas$key=>$value){ echo''; if(!is_numeric($key)){ $key=ucwords(str_replace('_','',$key)); echo'',$key,''; if(is_numeric($value)){ if($value>1048576){$value=round($value/1048576,1).'M';} elseif(is_float($value)){$value=round($value,1);} } } if(is_array($value)){ foreach($valueas$column){ echo'',$column,''; } echo''; } else{echo'',$value,'';} } echo''; } functionfiles_display(){ $status=call_user_func(CACHEPREFIX.'get_status'); if(empty($status['scripts'])){return;} if(isset($_GET['DUMP'])){print_table($status['scripts']);exit;} $time=time();$sort=0; $nogroup=preg_replace('/\&?GROUP\=[\-0-9]+/','',$_SERVER['REQUEST_URI']); $nosort=preg_replace('/\&?SORT\=[\-0-9]+/','',$_SERVER['REQUEST_URI']); $group=empty($_GET['GROUP'])?0:intval($_GET['GROUP']);if($group<0||$group>9){$group=1;} $groupset=array_fill(0,9,'');$groupset[$group]='class="b"'; echo' ungroup| 1| 2| 3| 4| 5

'; if(!$group){$files=&$status['scripts'];} else{ $files=array(); foreach($status['scripts']as$data){ if(preg_match('@^[/]([^/]+[/]){'.$group.'}@',$data['full_path'],$path)){ if(empty($files[$path[0]])){$files[$path[0]]=array('full_path'=>'','files'=>0,'hits'=>0,'memory_consumption'=>0,'last_used_timestamp'=>'','timestamp'=>'');} $files[$path[0]]['full_path']=$path[0]; $files[$path[0]]['files']++; $files[$path[0]]['memory_consumption']+=$data['memory_consumption']; $files[$path[0]]['hits']+=$data['hits']; if($data['last_used_timestamp']>$files[$path[0]]['last_used_timestamp']){$files[$path[0]]['last_used_timestamp']=$data['last_used_timestamp'];} if($data['timestamp']>$files[$path[0]]['timestamp']){$files[$path[0]]['timestamp']=$data['timestamp'];} } } } if(!empty($_GET['SORT'])){ $keys=array( 'full_path'=>SORT_STRING, 'files'=>SORT_NUMERIC, 'memory_consumption'=>SORT_NUMERIC, 'hits'=>SORT_NUMERIC, 'last_used_timestamp'=>SORT_NUMERIC, 'timestamp'=>SORT_NUMERIC ); $titles=array('','path',$group?'files':'','size','hits','lastused','created'); $offsets=array_keys($keys); $key=intval($_GET['SORT']); $direction=$key>0?1:-1; $key=abs($key)-1; $key=isset($offsets[$key])&&!($key==1&&empty($group))?$offsets[$key]:reset($offsets); $sort=array_search($key,$offsets)+1; $sortflip=range(0,7);$sortflip[$sort]=-$direction*$sort; if($keys[$key]==SORT_STRING){$direction=-$direction;} $arrow=array_fill(0,7,'');$arrow[$sort]=$direction>0?'▼':'▲'; $direction=$direction>0?SORT_DESC:SORT_ASC; $column=array();foreach($filesas$data){$column[]=$data[$key];} array_multisort($column,$keys[$key],$direction,$files); } echo' '; foreach($titlesas$column=>$title){ if($title)echo'',$title,$arrow[$column],''; } echo''; foreach($filesas$data){ echo' x',$data['full_path'],'', ($group?''.number_format($data['files']).'':''), '',number_format(round($data['memory_consumption']/1024)),'K', '',number_format($data['hits']),'', '',time_since($time,$data['last_used_timestamp']),'', '',empty($data['timestamp'])?'':time_since($time,$data['timestamp']),' '; } echo''; } functiongraphs_display(){ $graphs=array(); $colors=array('green','brown','red'); $primes=array(223,463,983,1979,3907,7963,16229,32531,65407,130987); $configuration=call_user_func(CACHEPREFIX.'get_configuration'); $status=call_user_func(CACHEPREFIX.'get_status'); $graphs['memory']['total']=$configuration['directives']['opcache.memory_consumption']; $graphs['memory']['free']=$status['memory_usage']['free_memory']; $graphs['memory']['used']=$status['memory_usage']['used_memory']; $graphs['memory']['wasted']=$status['memory_usage']['wasted_memory']; $graphs['keys']['total']=$status[CACHEPREFIX.'statistics']['max_cached_keys']; foreach($primesas$prime){if($prime>=$graphs['keys']['total']){$graphs['keys']['total']=$prime;break;}} $graphs['keys']['free']=$graphs['keys']['total']-$status[CACHEPREFIX.'statistics']['num_cached_keys']; $graphs['keys']['scripts']=$status[CACHEPREFIX.'statistics']['num_cached_scripts']; $graphs['keys']['wasted']=$status[CACHEPREFIX.'statistics']['num_cached_keys']-$status[CACHEPREFIX.'statistics']['num_cached_scripts']; $graphs['hits']['total']=0; $graphs['hits']['hits']=$status[CACHEPREFIX.'statistics']['hits']; $graphs['hits']['misses']=$status[CACHEPREFIX.'statistics']['misses']; $graphs['hits']['blacklist']=$status[CACHEPREFIX.'statistics']['blacklist_misses']; $graphs['hits']['total']=array_sum($graphs['hits']); $graphs['restarts']['total']=0; $graphs['restarts']['manual']=$status[CACHEPREFIX.'statistics']['manual_restarts']; $graphs['restarts']['keys']=$status[CACHEPREFIX.'statistics']['hash_restarts']; $graphs['restarts']['memory']=$status[CACHEPREFIX.'statistics']['oom_restarts']; $graphs['restarts']['total']=array_sum($graphs['restarts']); foreach($graphsas$caption=>$graph){ echo'',$caption,'

'; foreach($graphas$label=>$value){ if($label=='total'){$key=0;$total=$value;$totaldisplay=''.($total>999999?round($total/1024/1024).'M':($total>9999?round($total/1024).'K':$total)).'

';continue;} $percent=$total?floor($value*100/$total):'';$percent=!$percent||$percent>99?'':$percent.'%'; echo'',$totaldisplay,'',($value>999999?round($value/1024/1024).'M':($value>9999?round($value/1024).'K':$value)),'',$percent,'',$label,''; $key++;$totaldisplay=''; } echo'

',"\n"; } } functionmeta_display(){ ?> directivesguide| functionsguide| wiki.php.net| pecl| Zendsource| OCPlatest

关于“Linux环境下PHP7.0的安装方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2021-03-13 15:39:38
分享
海报
164
上一篇:nodejs中net模块有什么用 下一篇:php如何删除两个数组中相同的数据
目录
  • OpcacheControlPanel
  • Opcachenotdetected?';die;} if(!empty($_GET['FILES'])){echo'filescached
  • general
  • memory'; print_table($status['memory_usage']); unset($status[CACHEPREFIX.'statistics']['start_time'],$status[CACHEPREFIX.'statistics']['last_restart_time']); echo'statistics'; print_table($status[CACHEPREFIX.'statistics']); } if(empty($_GET['ALL'])){meta_display();exit;} if(!empty($configuration['blacklist'])){echo'blacklist';print_table($configuration['blacklist']);} if(!empty($opcache[3])){echo'runtime';echo$opcache[3];} $name='zendopcache';$functions=get_extension_funcs($name); if(!$functions){$name='zendoptimizer+';$functions=get_extension_funcs($name);} if($functions){echo'functions';print_table($functions);}else{$name='';} $level=trim(CACHEPREFIX,'_').'.optimization_level'; if(isset($configuration['directives'][$level])){ echo'optimizationlevels'; $levelset=strrev(base_convert($configuration['directives'][$level],10,2)); $levels=array( 1=>'Constantssubexpressionselimination(CSE)true,false,null,etc.
    OptimizeseriesofADD_STRING/ADD_CHAR
    ConvertCAST(IS_BOOL,x)intoBOOL(x)
    ConvertINIT_FCALL_BY_NAME+DO_FCALL_BY_NAMEintoDO_FCALL', 2=>'Convertconstantoperandstoexpectedtypes
    ConvertconditionalJMPwithconstantoperands
    OptimizestaticBRKandCONT', 3=>'Convert$a=$a+exprinto$a+=expr
    Convert$a++into++$a
    OptimizeseriesofJMP', 4=>'PRINTandECHOoptimization(defunct)', 5=>'BlockOptimization-mostexpensivepass
    Performsmanydifferentoptimizationpatternsbasedoncontrolflowgraph(CFG)', 9=>'Optimizeregisterallocation(allowsre-usageoftemporaryvariables)', 10=>'RemoveNOPs' ); echo'PassDescription'; foreach($levelsas$pass=>$description){ $disabled=substr($levelset,$pass-1,1)!=='1'||$pass==4?'white':''; echo''.$pass.''.$description.''; } echo''; } if(isset($_GET['DUMP'])){ if($name){echo'ini';print_table(ini_get_all($name,true));} foreach($configurationas$key=>$value){echo'',$key,'

推荐阅读

忘记密码?

图形验证码