首頁 後端開發 PHP7 Linux環境如何安裝PHP7.0

Linux環境如何安裝PHP7.0

May 20, 2021 am 09:27 AM
php7

這篇文章跟大家介紹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效能分析比較

<?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##real##PHP ##sys     0m0.057s##real##.P ##sys#.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
登入後複製

# 加入

重啟

# killall php-fpm
#  /etc/init.d/php-fpm
登入後複製

#如果上圖不太明白,可以使用文末Opcache 狀態測試程式碼(https:/ /gist.github.com/ck-on/4959032) 進行示範:



Opcache 狀態測試程式碼(https://gist.github.com /ck-on/4959032) 進行示範:

<?php
/*
OCP - Opcache Control Panel (aka Zend Optimizer+ Control Panel for PHP)
Author: _ck_ (with contributions by GK, stasilok)
Version: 0.1.6
Free for any kind of use or modification, I am not responsible for anything, please share your improvements
 
* revision history
0.1.6 2013-04-12 moved meta to footer so graphs can be higher and reduce clutter
0.1.5 2013-04-12 added graphs to visualize cache state, please report any browser/style bugs
0.1.4 2013-04-09 added "recheck" to update files when using large revalidate_freq (or validate_timestamps=Off)
0.1.3 2013-03-30 show host and php version, can bookmark with hashtag ie. #statistics - needs new layout asap
0.1.2 2013-03-25 show optimization levels, number formatting, support for start_time in 7.0.2
0.1.1 2013-03-18 today Zend completely renamed Optimizer+ to OPcache, adjusted OCP to keep working
0.1.0 2013-03-17 added group/sort indicators, replaced "accelerator_" functions with "opcache_"
0.0.6 2013-03-16 transition support as Zend renames product and functions for PHP 5.5 (stasilok)
0.0.5 2013-03-10 added refresh button (GK)
0.0.4 2013-02-18 added file grouping and sorting (click on headers) - code needs cleanup but gets the job done
0.0.2 2013-02-14 first public release
 
* known problems/limitations:
Unlike APC, the Zend OPcache API
- cannot determine when a file was put into the cache
- cannot change settings on the fly
- cannot protect opcache functions by restricting execution to only specific scripts/paths
 
* todo:
Extract variables for prefered ordering and better layout instead of just dumping into tables
File list filter
 
*/
 
// ini_set(&#39;display_errors&#39;,1); error_reporting(-1);
if ( count(get_included_files())>1 || php_sapi_name()==&#39;cli&#39; || empty($_SERVER[&#39;REMOTE_ADDR&#39;]) ) { die; } // weak block against indirect access
 
$time=time();
define(&#39;CACHEPREFIX&#39;,function_exists(&#39;opcache_reset&#39;)?&#39;opcache_&#39;:(function_exists(&#39;accelerator_reset&#39;)?&#39;accelerator_&#39;:&#39;&#39;));
 
if ( !empty($_GET[&#39;RESET&#39;]) ) {	
if ( function_exists(CACHEPREFIX.&#39;reset&#39;) ) { call_user_func(CACHEPREFIX.&#39;reset&#39;); }
header( &#39;Location: &#39;.str_replace(&#39;?&#39;.$_SERVER[&#39;QUERY_STRING&#39;],&#39;&#39;,$_SERVER[&#39;REQUEST_URI&#39;]) );
exit;
}
 
if ( !empty($_GET[&#39;RECHECK&#39;]) ) {
if ( function_exists(CACHEPREFIX.&#39;invalidate&#39;) ) {
$recheck=trim($_GET[&#39;RECHECK&#39;]); $files=call_user_func(CACHEPREFIX.&#39;get_status&#39;);
if (!empty($files[&#39;scripts&#39;])) {
foreach ($files[&#39;scripts&#39;] as $file=>$value) {
if ( $recheck===&#39;1&#39; || strpos($file,$recheck)===0 ) call_user_func(CACHEPREFIX.&#39;invalidate&#39;,$file);
}
}
header( &#39;Location: &#39;.str_replace(&#39;?&#39;.$_SERVER[&#39;QUERY_STRING&#39;],&#39;&#39;,$_SERVER[&#39;REQUEST_URI&#39;]) );
} else { echo &#39;Sorry, this feature requires Zend Opcache newer than April 8th 2013&#39;; }
exit;
}
 
?><!DOCTYPE html>
<html>
<head>
<title>OCP - Opcache Control Panel</title>
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" />
 
<style type="text/css">
body {background-color: #fff; color: #000;}
body, td, th, h1, h2 {font-family: sans-serif;}
pre {margin: 0px; font-family: monospace;}
a:link,a:visited {color: #000099; text-decoration: none;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse; width: 600px; }
.center {text-align: center;}
.center table { margin-left: auto; margin-right: auto; text-align: left;}
.center th { text-align: center !important; }
.middle {vertical-align:middle;}
td, th { border: 1px solid #000; font-size: 75%; vertical-align: baseline; padding: 3px; }
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccccff; font-weight: bold; color: #000; width:50%; white-space:nowrap;}
.h {background-color: #9999cc; font-weight: bold; color: #000;}
.v {background-color: #cccccc; color: #000;}
.vr {background-color: #cccccc; text-align: right; color: #000; white-space: nowrap;}
.b {font-weight:bold;}
.white, .white a {color:#fff;}
img {float: right; border: 0px;}
hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000;}
.meta, .small {font-size: 75%; }
.meta {margin: 2em 0;}
.meta a, th a {padding: 10px; white-space:nowrap; }
.buttons {margin:0 0 1em;}
.buttons a {margin:0 15px; background-color: #9999cc; color:#fff; text-decoration:none; padding:1px; border:1px solid #000; display:inline-block; width:5em; text-align:center;}
#files td.v a {font-weight:bold; color:#9999cc; margin:0 10px 0 5px; text-decoration:none; font-size:120%;}
#files td.v a:hover {font-weight:bold; color:#ee0000;}
.graph {display:inline-block; width:145px; margin:1em 0 1em 1px; border:0; vertical-align:top;}
.graph table {width:100%; height:150px; border:0; padding:0; margin:5px 0 0 0; position:relative;}
.graph td {vertical-align:middle; border:0; padding:0 0 0 5px;}
.graph .bar {width:25px; text-align:right; padding:0 2px; color:#fff;}
.graph .total {width:34px; text-align:center; padding:0 5px 0 0;}
.graph .total p {border:1px dashed #888; border-right:0; height:99%; width:12px; position:absolute; bottom:0; left:17px; z-index:-1;}
.graph .total span {background:#fff; font-weight:bold;}
.graph .actual {text-align:right; font-weight:bold; padding:0 5px 0 0;}
.graph .red {background:#ee0000;}
.graph .green {background:#00cc00;}
.graph .brown {background:#8B4513;}
</style>
<!--[if lt IE 9]><script type="text/javascript" defer="defer">
window.οnlοad=function(){var i,t=document.getElementsByTagName(&#39;table&#39;);for(i=0;i<t.length;i++){if(t[i].parentNode.className==&#39;graph&#39;)t[i].style.height=150-(t[i].clientHeight-150)+&#39;px&#39;;}}
</script><![endif]-->
</head>
 
<body>
<p class="center">
 
<h1><a href="?">Opcache Control Panel</a></h1>
 
<p class="buttons">
<a href="?ALL=1">Details</a>
<a href="?FILES=1&GROUP=2&SORT=3">Files</a>
<a href="?RESET=1" οnclick="return confirm(&#39;RESET cache ?&#39;)">Reset</a>
<?php if ( function_exists(CACHEPREFIX.&#39;invalidate&#39;) ) { ?>
<a href="?RECHECK=1" οnclick="return confirm(&#39;Recheck all files in the cache ?&#39;)">Recheck</a>
<?php } ?>
<a href="?" οnclick="window.location.reload(true); return false">Refresh</a>
</p>
 
<?php
 
if ( !function_exists(CACHEPREFIX.&#39;get_status&#39;) ) { echo &#39;<h2>Opcache not detected?</h2>&#39;; die; }
 
if ( !empty($_GET[&#39;FILES&#39;]) ) { echo &#39;<h2>files cached</h2>&#39;; files_display(); echo &#39;</p></body></html>&#39;; exit; }
 
if ( !(isset($_REQUEST[&#39;GRAPHS&#39;]) && !$_REQUEST[&#39;GRAPHS&#39;]) && CACHEPREFIX==&#39;opcache_&#39;) { graphs_display(); if ( !empty($_REQUEST[&#39;GRAPHS&#39;]) ) { exit; } }
 
ob_start(); phpinfo(8); $phpinfo = ob_get_contents(); ob_end_clean(); // some info is only available via phpinfo? sadly buffering capture has to be used
if ( !preg_match( &#39;/module\_Zend (Optimizer\+|OPcache).+?(\<table[^>]*\>.+?\<\/table\>).+?(\<table[^>]*\>.+?\<\/table\>)/s&#39;, $phpinfo, $opcache) ) { } // todo
 
if ( function_exists(CACHEPREFIX.&#39;get_configuration&#39;) ) { echo &#39;<h2>general</h2>&#39;; $configuration=call_user_func(CACHEPREFIX.&#39;get_configuration&#39;); }
 
$host=function_exists(&#39;gethostname&#39;)?@gethostname():@php_uname(&#39;n&#39;); if (empty($host)) { $host=empty($_SERVER[&#39;SERVER_NAME&#39;])?$_SERVER[&#39;HOST_NAME&#39;]:$_SERVER[&#39;SERVER_NAME&#39;]; }
$version=array(&#39;Host&#39;=>$host);
$version[&#39;PHP Version&#39;]=&#39;PHP &#39;.(defined(&#39;PHP_VERSION&#39;)?PHP_VERSION:&#39;???&#39;).&#39; &#39;.(defined(&#39;PHP_SAPI&#39;)?PHP_SAPI:&#39;&#39;).&#39; &#39;.(defined(&#39;PHP_OS&#39;)?&#39; &#39;.PHP_OS:&#39;&#39;);
$version[&#39;Opcache Version&#39;]=empty($configuration[&#39;version&#39;][&#39;version&#39;])?&#39;???&#39;:$configuration[&#39;version&#39;][CACHEPREFIX.&#39;product_name&#39;].&#39; &#39;.$configuration[&#39;version&#39;][&#39;version&#39;];
print_table($version);
 
if ( !empty($opcache[2]) ) { echo preg_replace(&#39;/\<tr\>\<td class\="e"\>[^>]+\<\/td\>\<td class\="v"\>[0-9\,\. ]+\<\/td\>\<\/tr\>/&#39;,&#39;&#39;,$opcache[2]); }
 
if ( function_exists(CACHEPREFIX.&#39;get_status&#39;) && $status=call_user_func(CACHEPREFIX.&#39;get_status&#39;) ) {
$uptime=array();
if ( !empty($status[CACHEPREFIX.&#39;statistics&#39;][&#39;start_time&#39;]) ) {
$uptime[&#39;uptime&#39;]=time_since($time,$status[CACHEPREFIX.&#39;statistics&#39;][&#39;start_time&#39;],1,&#39;&#39;);
}
if ( !empty($status[CACHEPREFIX.&#39;statistics&#39;][&#39;last_restart_time&#39;]) ) {
$uptime[&#39;last_restart&#39;]=time_since($time,$status[CACHEPREFIX.&#39;statistics&#39;][&#39;last_restart_time&#39;]);
}
if (!empty($uptime)) {print_table($uptime);}
if ( !empty($status[&#39;cache_full&#39;]) ) { $status[&#39;memory_usage&#39;][&#39;cache_full&#39;]=$status[&#39;cache_full&#39;]; }
echo &#39;<h2 id="memory">memory</h2>&#39;;
print_table($status[&#39;memory_usage&#39;]);
unset($status[CACHEPREFIX.&#39;statistics&#39;][&#39;start_time&#39;],$status[CACHEPREFIX.&#39;statistics&#39;][&#39;last_restart_time&#39;]);
echo &#39;<h2 id="statistics">statistics</h2>&#39;;
print_table($status[CACHEPREFIX.&#39;statistics&#39;]);
}
 
if ( empty($_GET[&#39;ALL&#39;]) ) { meta_display(); exit; }
if ( !empty($configuration[&#39;blacklist&#39;]) ) { echo &#39;<h2 id="blacklist">blacklist</h2>&#39;; print_table($configuration[&#39;blacklist&#39;]); }
 
if ( !empty($opcache[3]) ) { echo &#39;<h2 id="runtime">runtime</h2>&#39;; echo $opcache[3]; }
 
$name=&#39;zend opcache&#39;; $functions=get_extension_funcs($name);
if (!$functions) { $name=&#39;zend optimizer+&#39;; $functions=get_extension_funcs($name); }
if ($functions) { echo &#39;<h2 id="functions">functions</h2>&#39;; print_table($functions); } else { $name=&#39;&#39;; }
 
$level=trim(CACHEPREFIX,&#39;_&#39;).&#39;.optimization_level&#39;;
if (isset($configuration[&#39;directives&#39;][$level])) {
echo &#39;<h2 id="optimization">optimization levels</h2>&#39;;	
$levelset=strrev(base_convert($configuration[&#39;directives&#39;][$level], 10, 2));
$levels=array(
1=>&#39;<a href="http://wikipedia.org/wiki/Common_subexpression_elimination">Constants subexpressions elimination</a> (CSE) true, false, null, etc.<br />Optimize series of ADD_STRING / ADD_CHAR<br />Convert CAST(IS_BOOL,x) into BOOL(x)<br />Convert <a href="http://www.php.net/manual/internals2.opcodes.init-fcall-by-name.php">INIT_FCALL_BY_NAME</a> + <a href="http://www.php.net/manual/internals2.opcodes.do-fcall-by-name.php">DO_FCALL_BY_NAME</a> into <a href="http://www.php.net/manual/internals2.opcodes.do-fcall.php">DO_FCALL</a>&#39;,
2=>&#39;Convert constant operands to expected types<br />Convert conditional <a href="http://php.net/manual/internals2.opcodes.jmp.php">JMP</a> with constant operands<br />Optimize static <a href="http://php.net/manual/internals2.opcodes.brk.php">BRK</a> and <a href="<a href="http://php.net/manual/internals2.opcodes.cont.php">CONT</a>&#39;,
3=>&#39;Convert $a = $a + expr into $a += expr<br />Convert $a++ into ++$a<br />Optimize series of <a href="http://php.net/manual/internals2.opcodes.jmp.php">JMP</a>&#39;,
4=>&#39;PRINT and ECHO optimization (<a href="https://github.com/zend-dev/ZendOptimizerPlus/issues/73">defunct</a>)&#39;,
5=>&#39;Block Optimization - most expensive pass<br />Performs many different optimization patterns based on <a href="http://wikipedia.org/wiki/Control_flow_graph">control flow graph</a> (CFG)&#39;,
9=>&#39;Optimize <a href="http://wikipedia.org/wiki/Register_allocation">register allocation</a> (allows re-usage of temporary variables)&#39;,
10=>&#39;Remove NOPs&#39;
);
echo &#39;<table width="600" border="0" cellpadding="3"><tbody><tr class="h"><th>Pass</th><th>Description</th></tr>&#39;;
foreach ($levels as $pass=>$description) {
$disabled=substr($levelset,$pass-1,1)!==&#39;1&#39; || $pass==4 ? &#39; white&#39;:&#39;&#39;;
echo &#39;<tr><td class="v center middle&#39;.$disabled.&#39;">&#39;.$pass.&#39;</td><td class="v&#39;.$disabled.&#39;">&#39;.$description.&#39;</td></tr>&#39;;
}
echo &#39;</table>&#39;;
}
 
if ( isset($_GET[&#39;DUMP&#39;]) ) {
if ($name) { echo &#39;<h2 id="ini">ini</h2>&#39;; print_table(ini_get_all($name,true)); }
foreach ($configuration as $key=>$value) { echo &#39;<h2>&#39;,$key,&#39;</h2>&#39;; print_table($configuration[$key]); }
exit;
}
 
meta_display();
 
echo &#39;</p></body></html>&#39;;
 
exit;
 
function time_since($time,$original,$extended=0,$text=&#39;ago&#39;) {	
$time = $time - $original;
$day = $extended? floor($time/86400) : round($time/86400,0);
$amount=0; $unit=&#39;&#39;;
if ( $time < 86400) {
if ( $time < 60)	{ $amount=$time; $unit=&#39;second&#39;; }
elseif ( $time < 3600) { $amount=floor($time/60); $unit=&#39;minute&#39;; }
else	{ $amount=floor($time/3600); $unit=&#39;hour&#39;; }	
}
elseif ( $day < 14) { $amount=$day; $unit=&#39;day&#39;; }
elseif ( $day < 56) { $amount=floor($day/7); $unit=&#39;week&#39;; }
elseif ( $day < 672) { $amount=floor($day/30); $unit=&#39;month&#39;; }
else {	$amount=intval(2*($day/365))/2; $unit=&#39;year&#39;; }
if ( $amount!=1) {$unit.=&#39;s&#39;;}	
if ($extended && $time>60) { $text=&#39; and &#39;.time_since($time,$time<86400?($time<3600?$amount*60:$amount*3600):$day*86400,0,&#39;&#39;).$text; }
return $amount.&#39; &#39;.$unit.&#39; &#39;.$text;
}
 
function print_table($array,$headers=false) {
if ( empty($array) || !is_array($array) ) {return;}
echo &#39;<table border="0" cellpadding="3" width="600">&#39;;
if (!empty($headers)) {
if (!is_array($headers)) {$headers=array_keys(reset($array));}
echo &#39;<tr class="h">&#39;;
foreach ($headers as $value) { echo &#39;<th>&#39;,$value,&#39;</th>&#39;; }
echo &#39;</tr>&#39;;
}
foreach ($array as $key=>$value) {
echo &#39;<tr>&#39;;
if ( !is_numeric($key) ) {
$key=ucwords(str_replace(&#39;_&#39;,&#39; &#39;,$key));
echo &#39;<td class="e">&#39;,$key,&#39;</td>&#39;;
if ( is_numeric($value) ) {
if ( $value>1048576) { $value=round($value/1048576,1).&#39;M&#39;; }
elseif ( is_float($value) ) { $value=round($value,1); }
}
}
if ( is_array($value) ) {
foreach ($value as $column) {
echo &#39;<td class="v">&#39;,$column,&#39;</td>&#39;;
}
echo &#39;</tr>&#39;;
}
else { echo &#39;<td class="v">&#39;,$value,&#39;</td></tr>&#39;; }
}
echo &#39;</table>&#39;;
}
 
function files_display() {	
$status=call_user_func(CACHEPREFIX.&#39;get_status&#39;);
if ( empty($status[&#39;scripts&#39;]) ) {return;}
if ( isset($_GET[&#39;DUMP&#39;]) ) { print_table($status[&#39;scripts&#39;]); exit;}
$time=time(); $sort=0;
$nogroup=preg_replace(&#39;/\&?GROUP\=[\-0-9]+/&#39;,&#39;&#39;,$_SERVER[&#39;REQUEST_URI&#39;]);
$nosort=preg_replace(&#39;/\&?SORT\=[\-0-9]+/&#39;,&#39;&#39;,$_SERVER[&#39;REQUEST_URI&#39;]);
$group=empty($_GET[&#39;GROUP&#39;])?0:intval($_GET[&#39;GROUP&#39;]); if ( $group<0 || $group>9) { $group=1;}
$groupset=array_fill(0,9,&#39;&#39;); $groupset[$group]=&#39; class="b" &#39;;
echo &#39;<p class="meta">
<a &#39;,$groupset[0],&#39;href="&#39;,$nogroup,&#39;">ungroup</a> |
<a &#39;,$groupset[1],&#39;href="&#39;,$nogroup,&#39;&GROUP=1">1</a> |
<a &#39;,$groupset[2],&#39;href="&#39;,$nogroup,&#39;&GROUP=2">2</a> |
<a &#39;,$groupset[3],&#39;href="&#39;,$nogroup,&#39;&GROUP=3">3</a> |
<a &#39;,$groupset[4],&#39;href="&#39;,$nogroup,&#39;&GROUP=4">4</a> |
<a &#39;,$groupset[5],&#39;href="&#39;,$nogroup,&#39;&GROUP=5">5</a>
</p>&#39;;
if ( !$group ) { $files =& $status[&#39;scripts&#39;]; }
else {	
$files=array();
foreach ($status[&#39;scripts&#39;] as $data) {
if ( preg_match(&#39;@^[/]([^/]+[/]){&#39;.$group.&#39;}@&#39;,$data[&#39;full_path&#39;],$path) ) {
if ( empty($files[$path[0]])) { $files[$path[0]]=array(&#39;full_path&#39;=>&#39;&#39;,&#39;files&#39;=>0,&#39;hits&#39;=>0,&#39;memory_consumption&#39;=>0,&#39;last_used_timestamp&#39;=>&#39;&#39;,&#39;timestamp&#39;=>&#39;&#39;); }
$files[$path[0]][&#39;full_path&#39;]=$path[0];
$files[$path[0]][&#39;files&#39;]++;
$files[$path[0]][&#39;memory_consumption&#39;]+=$data[&#39;memory_consumption&#39;];	
$files[$path[0]][&#39;hits&#39;]+=$data[&#39;hits&#39;];
if ( $data[&#39;last_used_timestamp&#39;]>$files[$path[0]][&#39;last_used_timestamp&#39;]) {$files[$path[0]][&#39;last_used_timestamp&#39;]=$data[&#39;last_used_timestamp&#39;];}
if ( $data[&#39;timestamp&#39;]>$files[$path[0]][&#39;timestamp&#39;]) {$files[$path[0]][&#39;timestamp&#39;]=$data[&#39;timestamp&#39;];}	
}	
}
}
if ( !empty($_GET[&#39;SORT&#39;]) ) {
$keys=array(
&#39;full_path&#39;=>SORT_STRING,
&#39;files&#39;=>SORT_NUMERIC,
&#39;memory_consumption&#39;=>SORT_NUMERIC,
&#39;hits&#39;=>SORT_NUMERIC,
&#39;last_used_timestamp&#39;=>SORT_NUMERIC,
&#39;timestamp&#39;=>SORT_NUMERIC
);
$titles=array(&#39;&#39;,&#39;path&#39;,$group?&#39;files&#39;:&#39;&#39;,&#39;size&#39;,&#39;hits&#39;,&#39;last used&#39;,&#39;created&#39;);
$offsets=array_keys($keys);
$key=intval($_GET[&#39;SORT&#39;]);
$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,&#39;&#39;); $arrow[$sort]=$direction>0?&#39; ▼&#39;:&#39; ▲&#39;;
$direction=$direction>0?SORT_DESC:SORT_ASC;
$column=array(); foreach ($files as $data) { $column[]=$data[$key]; }
array_multisort($column, $keys[$key], $direction, $files);
}
 
echo &#39;<table border="0" cellpadding="3" width="960" id="files">
<tr class="h">&#39;;
foreach ($titles as $column=>$title) {
if ($title) echo &#39;<th><a href="&#39;,$nosort,&#39;&SORT=&#39;,$sortflip[$column],&#39;">&#39;,$title,$arrow[$column],&#39;</a></th>&#39;;
}
echo &#39; </tr>&#39;;
foreach ($files as $data) {
echo &#39;<tr>
<td class="v" nowrap><a title="recheck" href="?RECHECK=&#39;,rawurlencode($data[&#39;full_path&#39;]),&#39;">x</a>&#39;,$data[&#39;full_path&#39;],&#39;</td>&#39;,
($group?&#39;<td class="vr">&#39;.number_format($data[&#39;files&#39;]).&#39;</td>&#39;:&#39;&#39;),
&#39;<td class="vr">&#39;,number_format(round($data[&#39;memory_consumption&#39;]/1024)),&#39;K</td>&#39;,
&#39;<td class="vr">&#39;,number_format($data[&#39;hits&#39;]),&#39;</td>&#39;,
&#39;<td class="vr">&#39;,time_since($time,$data[&#39;last_used_timestamp&#39;]),&#39;</td>&#39;,
&#39;<td class="vr">&#39;,empty($data[&#39;timestamp&#39;])?&#39;&#39;:time_since($time,$data[&#39;timestamp&#39;]),&#39;</td>
</tr>&#39;;
}
echo &#39;</table>&#39;;
}
 
function graphs_display() {
$graphs=array();
$colors=array(&#39;green&#39;,&#39;brown&#39;,&#39;red&#39;);
$primes=array(223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987);
$configuration=call_user_func(CACHEPREFIX.&#39;get_configuration&#39;);
$status=call_user_func(CACHEPREFIX.&#39;get_status&#39;);
 
$graphs[&#39;memory&#39;][&#39;total&#39;]=$configuration[&#39;directives&#39;][&#39;opcache.memory_consumption&#39;];
$graphs[&#39;memory&#39;][&#39;free&#39;]=$status[&#39;memory_usage&#39;][&#39;free_memory&#39;];
$graphs[&#39;memory&#39;][&#39;used&#39;]=$status[&#39;memory_usage&#39;][&#39;used_memory&#39;];
$graphs[&#39;memory&#39;][&#39;wasted&#39;]=$status[&#39;memory_usage&#39;][&#39;wasted_memory&#39;];
 
$graphs[&#39;keys&#39;][&#39;total&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;max_cached_keys&#39;];	
foreach ($primes as $prime) { if ($prime>=$graphs[&#39;keys&#39;][&#39;total&#39;]) { $graphs[&#39;keys&#39;][&#39;total&#39;]=$prime; break;} }
$graphs[&#39;keys&#39;][&#39;free&#39;]=$graphs[&#39;keys&#39;][&#39;total&#39;]-$status[CACHEPREFIX.&#39;statistics&#39;][&#39;num_cached_keys&#39;];
$graphs[&#39;keys&#39;][&#39;scripts&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;num_cached_scripts&#39;];
$graphs[&#39;keys&#39;][&#39;wasted&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;num_cached_keys&#39;]-$status[CACHEPREFIX.&#39;statistics&#39;][&#39;num_cached_scripts&#39;];
 
$graphs[&#39;hits&#39;][&#39;total&#39;]=0;
$graphs[&#39;hits&#39;][&#39;hits&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;hits&#39;];
$graphs[&#39;hits&#39;][&#39;misses&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;misses&#39;];
$graphs[&#39;hits&#39;][&#39;blacklist&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;blacklist_misses&#39;];
$graphs[&#39;hits&#39;][&#39;total&#39;]=array_sum($graphs[&#39;hits&#39;]);
 
$graphs[&#39;restarts&#39;][&#39;total&#39;]=0;
$graphs[&#39;restarts&#39;][&#39;manual&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;manual_restarts&#39;];
$graphs[&#39;restarts&#39;][&#39;keys&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;hash_restarts&#39;];
$graphs[&#39;restarts&#39;][&#39;memory&#39;]=$status[CACHEPREFIX.&#39;statistics&#39;][&#39;oom_restarts&#39;];
$graphs[&#39;restarts&#39;][&#39;total&#39;]=array_sum($graphs[&#39;restarts&#39;]);
 
foreach ( $graphs as $caption=>$graph) {
echo &#39;<p class="graph"><p class="h">&#39;,$caption,&#39;</p><table border="0" cellpadding="0" cellspacing="0">&#39;;	
foreach ($graph as $label=>$value) {
if ($label==&#39;total&#39;) { $key=0; $total=$value; $totaldisplay=&#39;<td rowspan="3" class="total"><span>&#39;.($total>999999?round($total/1024/1024).&#39;M&#39;:($total>9999?round($total/1024).&#39;K&#39;:$total)).&#39;</span><p></p></td>&#39;; continue;}
$percent=$total?floor($value*100/$total):&#39;&#39;; $percent=!$percent||$percent>99?&#39;&#39;:$percent.&#39;%&#39;;
echo &#39;<tr>&#39;,$totaldisplay,&#39;<td class="actual">&#39;, ($value>999999?round($value/1024/1024).&#39;M&#39;:($value>9999?round($value/1024).&#39;K&#39;:$value)),&#39;</td><td class="bar &#39;,$colors[$key],&#39;" height="&#39;,$percent,&#39;">&#39;,$percent,&#39;</td><td>&#39;,$label,&#39;</td></tr>&#39;;
$key++; $totaldisplay=&#39;&#39;;
}
echo &#39;</table></p>&#39;,"\n";
}
}
 
function meta_display() {
?>
<p class="meta">
<a href="http://files.zend.com/help/Zend-Server-6/content/zendoptimizerplus.html">directives guide</a> |
<a href="http://files.zend.com/help/Zend-Server-6/content/zend_optimizer+_-_php_api.htm">functions guide</a> |
<a href="https://wiki.php.net/rfc/optimizerplus">wiki.php.net</a> |
<a href="http://pecl.php.net/package/ZendOpcache">pecl</a> |
<a href="https://github.com/zend-dev/ZendOptimizerPlus/">Zend source</a> |
<a href="https://gist.github.com/ck-on/4959032/?ocp.php">OCP latest</a>
</p>
<?php
}
登入後複製

推薦學習:
php影片教學

以上是Linux環境如何安裝PHP7.0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php7.0安裝了插件還是顯示未安裝怎麼辦 php7.0安裝了插件還是顯示未安裝怎麼辦 Apr 02, 2024 pm 07:39 PM

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

php7.0怎麼安裝mongo擴展 php7.0怎麼安裝mongo擴展 Nov 21, 2022 am 10:25 AM

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

php7檢測tcp埠不好用怎麼解決 php7檢測tcp埠不好用怎麼解決 Mar 22, 2023 am 09:30 AM

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

PHP 伺服器環境常見問題指南:快速解決常見難題 PHP 伺服器環境常見問題指南:快速解決常見難題 Apr 09, 2024 pm 01:33 PM

PHP伺服器環境常見的解決方法包括:確保已安裝正確的PHP版本和已複製相關檔案到模組目錄。暫時或永久停用SELinux。檢查並配置PHP.ini,確保已新增必要的擴充功能和進行正確設定。啟動或重新啟動PHP-FPM服務。檢查DNS設定是否有解析問題。

php7.0怎麼安裝部署 php7.0怎麼安裝部署 Nov 30, 2022 am 09:56 AM

php7.0安裝部署的方法:1、到PHP官網下載與本機系統對應的安裝版本;2、將下載的zip檔案解壓縮到指定目錄;3、開啟命令列窗口,在「E:\php7」目錄下運行“php -v”命令即可。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? 在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? Apr 01, 2025 pm 03:06 PM

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

記錄一次用strace診斷php佔用系統資源過高的問題 記錄一次用strace診斷php佔用系統資源過高的問題 May 03, 2024 pm 04:31 PM

本機環境:redhat6.7系統。 nginx1.12.1,php7.1.0,程式碼使用yii2框架問題:本地的web站需要用到elasticsearch服務。當php使用本機伺服器搭建的elasticsearch時,本地的負載都是正常。當我使用aws的elasticsearchservice服務時,本地伺服器出現負載經常過高的情況。查看nginx和php日誌,發現沒有異常。系統的並發連線數也不高。這時候想到我們老闆跟我講的一個strace診斷工具。偵錯過程:找一個php的子程序idstrace-

See all articles