我在測試網站時,會查看 phpinfo 資訊,用以檢查問題在那裡

一般情況,會這樣子寫

<?php phpinfo();?>

但這如果要用於比對的話,會很辛苦

所以我只要幾個值就好 (如下)

<?php
print 'sendmail_from = ' . ini_get('sendmail_from') . "<br>\n";
print 'sendmail_path = ' . ini_get('sendmail_path') . "<br>\n";
print 'open_basedir = ' . ini_get('open_basedir') . "<br>\n";
print 'upload_tmp_dir = ' . ini_get('upload_tmp_dir') . "<br>\n";
print 'session.save_path = ' . ini_get('session.save_path') . "<br>\n";
print 'directory = ' .$_SERVER["DOCUMENT_ROOT"] . "<br>\n";
print 'safe_mode = ' . ini_get('safe_mode') . "<br>\n";
print 'disable_functions = ' . ini_get('disable_functions') . "<br>\n";
print 'allow_url_fopen = ' . ini_get('allow_url_fopen') . "<br>\n";
?>

顯示

sendmail_from = apache@ssorc.tw
sendmail_path = /usr/sbin/sendmail -t -i -f apache@ssorc.tw
open_basedir = /var/www/html/ssorc.tw:/tmp/ssorc.tw
upload_tmp_dir = /tmp/ssorc.tw
session.save_path = /tmp/ssorc.tw
safe_mode =
disable_functions = exec,passthru,proc_open,shell_exec,system,popen,dl
allow_url_fopen = 0
directory = /var/www/html/ssorc.tw

phpinfo 裡會有 local 與 master 兩種,local 就是有自已定義在網站裡的,可能是 php_admin_flag XXX 等等,而 master 就是 /etc/php.ini 裡所定義的,但以上方式就只能得到 local 欄位值

我想要有 master 欄位的值,就要搭配 ob_start(),才能把 phpinfo 輸出到變數裡

我在 PHP 官網手冊找到有人寫好的 範例

<?php
function phpinfo_array($return=false){
 /* Andale! Andale! Yee-Hah! */
 ob_start();
 phpinfo(-1);
 $pi = preg_replace(
 array('#^.*<body>(.*)</body>.*$#ms', '#<h2>PHP License</h2>.*$#ms',
 '#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#',
 "#[ \t]+#", '#&nbsp;#', '# +#', '# class=".*?"#', '%&#039;%',
 '#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>'
 .'<h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#',
 '#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#',
 '#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#',
 "# +#", '#<tr>#', '#</tr>#'),
 array('$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ',
 '<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$2</td></tr>'.
 "\n".'<tr><td>PHP Egg</td><td>$1</td></tr>',
 '<tr><td>PHP Credits Egg</td><td>$1</td></tr>',
 '<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" .
 '<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'),
 ob_get_clean());
 $sections = explode('<h2>', strip_tags($pi, '<h2><th><td>'));
 unset($sections[0]);
 $pi = array();
 foreach($sections as $section){
 $n = substr($section, 0, strpos($section, '</h2>'));
 preg_match_all(
 '#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#',
 $section, $askapache, PREG_SET_ORDER);
 foreach($askapache as $m)
 $pi[$n][$m[1]]=(!isset($m[3])||$m[2]==$m[3])?$m[2]:array_slice($m,2);
 }
 #return ($return === false) ? echo "<pre>",print_r($pi),"</pre>" : $pi;
 echo "<pre>",print_r($pi),"</pre>"; # 我改了這裡,秀出來比較好看
}
phpinfo_array(); # 我加了這個
?>

以上就可以秀出陣列了,我再從中挑出我要的

顯示

Array
(
 [apache2handler] => Array
 (
 [Apache Version] => Apache
 [Apache API Version] => 20051115
 [Server Administrator] => root@ssorc.tw
 [Hostname:Port] => ssorc.tw:80
 [User/Group] => apache(48)/48
 [Max Requests] => Per Child: 4000 - Keep Alive: off - Max Per Connection: 100
 [Timeouts] => Connection: 60 - Keep-Alive: 15
(省略)

我修改了符合我要的 (如下)

<?php
function phpinfo_array($return=false)
{
 ob_start();
 phpinfo(-1);
 $pi = preg_replace(
 array('#^.*<body>(.*)</body>.*$#ms', '#<h2>PHP License</h2>.*$#ms',
 '#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#',
 "#[ \t]+#", '#&nbsp;#', '# +#', '# class=".*?"#', '%&#039;%',
 '#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>'
 .'<h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#',
 '#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#',
 '#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#',
 "# +#", '#<tr>#', '#</tr>#'),
 array('$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ',
 '<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$2</td></tr>'.
 "\n".'<tr><td>PHP Egg</td><td>$1</td></tr>',
 '<tr><td>PHP Credits Egg</td><td>$1</td></tr>',
 '<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" .
 '<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'),
 ob_get_clean());
 $sections = explode('<h2>', strip_tags($pi, '<h2><th><td>'));
 unset($sections[0]);
 $pi = array();
 foreach($sections as $section)
 {
 $n = substr($section, 0, strpos($section, '</h2>'));
 preg_match_all('#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#',$section, $askapache, PREG_SET_ORDER);
 foreach($askapache as $m) $pi[$n][$m[1]]=(!isset($m[3])||$m[2]==$m[3])?$m[2]:array_slice($m,2);
 }
 if ($_SERVER["QUERY_STRING"] == "v=1") {
    echo "<pre>",print_r($pi),"</pre>";
 }
 return $pi;
}
echo <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
 <TITLE>PHPINFO</TITLE>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<style type="text/css">
#d1 { align:center; background-color:lightblue; color:#000000; font-size:12pt; }
#s1 { width:20%; display:inline-block;}
#s2 { width:30%; display:inline-block; color:blue}
#s3 { width:30%; display:inline-block; color:green}
</style>
</HEAD>
<body>
EOF;
foreach (phpinfo_array() as $key => $val) {
 #echo "$key<br>";
 if (preg_match("/^Core/",$key)) {
 foreach ($val as $directive => $value) {
 if (preg_match("/^(sendmail_from|sendmail_path|open_basedir|upload_tmp_dir|session.save_path|safe_mode|disable_functions|allow_url_fopen)$/", $directive)) {
 if (is_array($value)) {
 echo "<div id=\"d1\"><span id=\"s1\">$directive</span><span id=\"s2\">$value[0]</span><span id=\"s3\">$value[1]</span></div>\n";
 } else {
 echo "<div id=\"d1\"><span id=\"s1\">$directive</span><span id=\"s2\">$value</span><span id=\"s3\">$value</span></div>\n";
 }
 }
 }
 }
 if (preg_match("/^session/",$key)) {
 foreach ($val as $directive => $value) {
 if (preg_match("/^(session.save_path)$/", $directive)) {
 if (is_array($value)) {
 echo "<div id=\"d1\"><span id=\"s1\">$directive</span><span id=\"s2\">$value[0]</span><span id=\"s3\">$value[1]</span></div>\n";
 } else {
 echo "<div id=\"d1\"><span id=\"s1\">$directive</span><span id=\"s2\">$value</span><span id=\"s3\">$value</span></div>\n";
 }
 }
 }
 }
 if (preg_match("/^PHP Variables/",$key)) {
 foreach ($val as $directive => $value) {
 if (preg_match("/DOCUMENT_ROOT/", $directive)) {
 echo "<div id=\"d1\"><span id=\"s1\">$directive</span><span id=\"s2\">$value</span><span id=\"s3\"></span></div>\n";
 }
 }
 }
}
echo <<<EOF
</body>
</html>
EOF;
?>
顯示

phpinfo

參考
  1. PHP
  2. http://justcoding.iteye.com/blog/1991828
  3. http://yiyingloveart.blogspot.tw/2012/10/phpvardumparray.html
最後修改日期: 2014 年 02 月 14 日

作者

留言

滿實用的,推推

[Reply]

cross Reply:

3q la

[Reply]

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。