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-zipLinux环境下PHP7.0的安装方法 如果配置错误,需要安装需要的模块,直接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

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

配置文件

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()Linux环境下PHP7.0的安装方法Linux环境下PHP7.0的安装方法 php7和php5性能分析比较

<?php //time /usr/local/php5/bin/php search_by_key.php $a = array(); for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $i) { array_key_exists($i, $a); } ?>

生成一个 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

Linux环境下PHP7.0的安装方法Linux环境下PHP7.0的安装方法 Opcache 状态测试代码(https://gist.github.com/ck-on/4959032)进行演示:

<?php
/*
OCP-OpcacheControlPanel(akaZendOptimizer+ControlPanelforPHP)
Author:_ck_(withcontributionsbyGK,stasilok)
Version:0.1.6
Freeforanykindofuseormodification,Iamnotresponsibleforanything,pleaseshareyourimprovements

*revisionhistory
0.1.62013-04-12movedmetatofootersographscanbehigherandreduceclutter
0.1.52013-04-12addedgraphstovisualizecachestate,pleasereportanybrowser/stylebugs
0.1.42013-04-09added"recheck"toupdatefileswhenusinglargerevalidate_freq(orvalidate_timestamps=Off)
0.1.32013-03-30showhostandphpversion,canbookmarkwithhashtagie.#statistics-needsnewlayoutasap
0.1.22013-03-25showoptimizationlevels,numberformatting,supportforstart_timein7.0.2
0.1.12013-03-18todayZendcompletelyrenamedOptimizer+toOPcache,adjustedOCPtokeepworking
0.1.02013-03-17addedgroup/sortindicators,replaced"accelerator_"functionswith"opcache_"
0.0.62013-03-16transitionsupportasZendrenamesproductandfunctionsforPHP5.5(stasilok)
0.0.52013-03-10addedrefreshbutton(GK)
0.0.42013-02-18addedfilegroupingandsorting(clickonheaders)-codeneedscleanupbutgetsthejobdone
0.0.22013-02-14firstpublicrelease

*knownproblems/limitations:
UnlikeAPC,theZendOPcacheAPI
-cannotdeterminewhenafilewasputintothecache
-cannotchangesettingsonthefly
-cannotprotectopcachefunctionsbyrestrictingexecutiontoonlyspecificscripts/paths

*todo:
Extractvariablesforpreferedorderingandbetterlayoutinsteadofjustdumpingintotables
Filelistfilter

*/

//ini_set('display_errors',1);error_reporting(-1);
if(count(get_included_files())>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;
}



?><!DOCTYPEhtml>
OCP - Opcache Control Panel
<body>
<pclass="center">

<h2><ahref="?">OpcacheControlPanel</a></h2>

<pclass="buttons">
<ahref="?ALL=1">Details</a>
<ahref="?FILES=1&GROUP=2&SORT=3">Files</a>
<ahref="?RESET=1""returnconfirm('RESETcache?')">Reset</a>
<?phpif(function_exists(CACHEPREFIX.'invalidate')){?>
<ahref="?RECHECK=1""returnconfirm('Recheckallfilesinthecache?')">Recheck</a>
<?php}?>
<ahref="?""window.location.reload(true);returnfalse">Refresh</a>
</p>

<?php

if(!function_exists(CACHEPREFIX.'get_status')){echo'<h3>Opcachenotdetected?</h3>';die;}

if(!empty($_GET['FILES'])){echo'<h3>filescached</h3>';files_display();echo'</p></body></html>';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\>).+?(\<table[^>]*\>.+?\<\/table\>)/s',$phpinfo,$opcache)){}//todo

if(function_exists(CACHEPREFIX.'get_configuration')){echo'<h3>general</h3>';$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('/\<tr\>\<tdclass\="e"\>[^>]+\<\/td\>\<tdclass\="v"\>[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'<h3id="memory">memory</h3>';
print_table($status['memory_usage']);
unset($status[CACHEPREFIX.'statistics']['start_time'],$status[CACHEPREFIX.'statistics']['last_restart_time']);
echo'<h3id="statistics">statistics</h3>';
print_table($status[CACHEPREFIX.'statistics']);
}

if(empty($_GET['ALL'])){meta_display();exit;}
if(!empty($configuration['blacklist'])){echo'<h3id="blacklist">blacklist</h3>';print_table($configuration['blacklist']);}

if(!empty($opcache[3])){echo'<h3id="runtime">runtime</h3>';echo$opcache[3];}

$name='zendopcache';$functions=get_extension_funcs($name);
if(!$functions){$name='zendoptimizer+';$functions=get_extension_funcs($name);}
if($functions){echo'<h3id="functions">functions</h3>';print_table($functions);}else{$name='';}

$level=trim(CACHEPREFIX,'_').'.optimization_level';
if(isset($configuration['directives'][$level])){
echo'<h3id="optimization">optimizationlevels</h3>';	
$levelset=strrev(base_convert($configuration['directives'][$level],10,2));
$levels=array(
1=>'<ahref="http://wikipedia.org/wiki/Common_subexpression_elimination">Constantssubexpressionselimination</a>(CSE)true,false,null,etc.<br/>OptimizeseriesofADD_STRING/ADD_CHAR<br/>ConvertCAST(IS_BOOL,x)intoBOOL(x)<br/>Convert<ahref="http://www.php.net/manual/internals2.opcodes.init-fcall-by-name.php">INIT_FCALL_BY_NAME</a>+<ahref="http://www.php.net/manual/internals2.opcodes.do-fcall-by-name.php">DO_FCALL_BY_NAME</a>into<ahref="http://www.php.net/manual/internals2.opcodes.do-fcall.php">DO_FCALL</a>',
2=>'Convertconstantoperandstoexpectedtypes<br/>Convertconditional<ahref="http://php.net/manual/internals2.opcodes.jmp.php">JMP</a>withconstantoperands<br/>Optimizestatic<ahref="http://php.net/manual/internals2.opcodes.brk.php">BRK</a>and<ahref="<ahref="http://php.net/manual/internals2.opcodes.cont.php">CONT</a>',
3=>'Convert$a=$a+exprinto$a+=expr<br/>Convert$a++into++$a<br/>Optimizeseriesof<ahref="http://php.net/manual/internals2.opcodes.jmp.php">JMP</a>',
4=>'PRINTandECHOoptimization(<ahref="https://github.com/zend-dev/ZendOptimizerPlus/issues/73">defunct</a>)',
5=>'BlockOptimization-mostexpensivepass<br/>Performsmanydifferentoptimizationpatternsbasedon<ahref="http://wikipedia.org/wiki/Control_flow_graph">controlflowgraph</a>(CFG)',
9=>'Optimize<ahref="http://wikipedia.org/wiki/Register_allocation">registerallocation</a>(allowsre-usageoftemporaryvariables)',
10=>'RemoveNOPs'
);
echo'<tablewidth="600"border="0"cellpadding="3"><tbody><trclass="h"><th>Pass</th><th>Description</th></tr>';
foreach($levelsas$pass=>$description){
$disabled=substr($levelset,$pass-1,1)!=='1'||$pass==4?'white':'';
echo'<tr><tdclass="vcentermiddle'.$disabled.'">'.$pass.'</td><tdclass="v'.$disabled.'">'.$description.'</td></tr>';
}
echo'</table>';
}

if(isset($_GET['DUMP'])){
if($name){echo'<h3id="ini">ini</h3>';print_table(ini_get_all($name,true));}
foreach($configurationas$key=>$value){echo'<h3>',$key,'</h3>';print_table($configuration[$key]);}
exit;
}

meta_display();

echo'</p></body></html>';

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'<tableborder="0"cellpadding="3"width="600">';
if(!empty($headers)){
if(!is_array($headers)){$headers=array_keys(reset($array));}
echo'<trclass="h">';
foreach($headersas$value){echo'<th>',$value,'</th>';}
echo'</tr>';
}
foreach($arrayas$key=>$value){
echo'<tr>';
if(!is_numeric($key)){
$key=ucwords(str_replace('_','',$key));
echo'<tdclass="e">',$key,'</td>';
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'<tdclass="v">',$column,'</td>';
}
echo'</tr>';
}
else{echo'<tdclass="v">',$value,'</td></tr>';}
}
echo'</table>';
}

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'<pclass="meta">
<a',$groupset[0],'href="',$nogroup,'">ungroup</a>|
<a',$groupset[1],'href="',$nogroup,'&GROUP=1">1</a>|
<a',$groupset[2],'href="',$nogroup,'&GROUP=2">2</a>|
<a',$groupset[3],'href="',$nogroup,'&GROUP=3">3</a>|
<a',$groupset[4],'href="',$nogroup,'&GROUP=4">4</a>|
<a',$groupset[5],'href="',$nogroup,'&GROUP=5">5</a>
</p>';
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'<tableborder="0"cellpadding="3"width="960"id="files">
<trclass="h">';
foreach($titlesas$column=>$title){
if($title)echo'<th><ahref="',$nosort,'&SORT=',$sortflip[$column],'">',$title,$arrow[$column],'</a></th>';
}
echo'</tr>';
foreach($filesas$data){
echo'<tr>
<tdclass="v"nowrap><atitle="recheck"href="?RECHECK=',rawurlencode($data['full_path']),'">x</a>',$data['full_path'],'</td>',
($group?'<tdclass="vr">'.number_format($data['files']).'</td>':''),
'<tdclass="vr">',number_format(round($data['memory_consumption']/1024)),'K</td>',
'<tdclass="vr">',number_format($data['hits']),'</td>',
'<tdclass="vr">',time_since($time,$data['last_used_timestamp']),'</td>',
'<tdclass="vr">',empty($data['timestamp'])?'':time_since($time,$data['timestamp']),'</td>
</tr>';
}
echo'</table>';
}

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'<pclass="graph"><pclass="h">',$caption,'</p><tableborder="0"cellpadding="0"cellspacing="0">';	
foreach($graphas$label=>$value){
if($label=='total'){$key=0;$total=$value;$totaldisplay='<tdrowspan="3"class="total"><span>'.($total>999999?round($total/1024/1024).'M':($total>9999?round($total/1024).'K':$total)).'</span><p></p></td>';continue;}
$percent=$total?floor($value*100/$total):'';$percent=!$percent||$percent>99?'':$percent.'%';
echo'<tr>',$totaldisplay,'<tdclass="actual">',($value>999999?round($value/1024/1024).'M':($value>9999?round($value/1024).'K':$value)),'</td><tdclass="bar',$colors[$key],'"height="',$percent,'">',$percent,'</td><td>',$label,'</td></tr>';
$key++;$totaldisplay='';
}
echo'</table></p>',"\n";
}
}

functionmeta_display(){
?>
<pclass="meta">
<ahref="http://files.zend.com/help/Zend-Server-6/content/zendoptimizerplus.html">directivesguide</a>|
<ahref="http://files.zend.com/help/Zend-Server-6/content/zend_optimizer+_-_php_api.htm">functionsguide</a>|
<ahref="https://wiki.php.net/rfc/optimizerplus">wiki.php.net</a>|
<ahref="http://pecl.php.net/package/ZendOpcache">pecl</a>|
<ahref="https://github.com/zend-dev/ZendOptimizerPlus/">Zendsource</a>|
<ahref="https://gist.github.com/ck-on/4959032/?ocp.php">OCPlatest</a>
</p>
<?php
}

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

发布于 2021-03-13 15:39:38
收藏
分享
海报
0 条评论
163
上一篇:nodejs中net模块有什么用 下一篇:php如何删除两个数组中相同的数据
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码