PHPnow(國產經典 PHP 一鍵安裝包)內建一款功能完整的 PHP 探針,可檢測伺服器資訊、PHP 組件支援、MySQL 連線測試、外網 IP 獲取等。本文提供完整原始碼解析、部署方式與常見問題解答。
?act=phpinfo 直接呼叫(若未被 disable_functions 禁用)。probe.php 放入網站根目錄(如 htdocs/)。https://your-domain/probe.php 即可看到檢測頁面。$username/$password 變數。<?php
// probe.php - PHPnow 風格精簡探針
header('Content-Type: text/html; charset=utf-8');
function checkExt($name, $func = null) {
$loaded = extension_loaded($name);
$ver = $loaded && $func && function_exists($func) ? $func() : ($loaded ? phpversion($name) : '');
return [$loaded, $ver];
}
$info = [
'PHP 版本' => PHP_VERSION,
'SAPI' => PHP_SAPI,
'php.ini' => php_ini_loaded_file() ?: '未知',
'執行時間限制' => ini_get('max_execution_time') . 's',
'記憶體限制' => ini_get('memory_limit'),
'上傳上限' => ini_get('upload_max_filesize'),
'POST 上限' => ini_get('post_max_size'),
'時區' => date_default_timezone_get(),
'Zend Optimizer' => checkExt('Zend Optimizer'),
'MySQL (mysqli)' => checkExt('mysqli', 'mysqli_get_client_info'),
'PDO MySQL' => checkExt('pdo_mysql'),
'GD Library' => checkExt('gd', fn() => gd_info()['GD Version'] ?? ''),
'cURL' => checkExt('curl', fn() => curl_version()['version'] ?? ''),
'OpenSSL' => checkExt('openssl'),
'mbstring' => checkExt('mbstring'),
'JSON' => checkExt('json'),
'OPcache' => checkExt('Zend OPcache', fn() => ini_get('opcache.enable') ? 'Enabled' : 'Disabled'),
];
// MySQL 連線測試
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['mysql_test'])) {
$h = $_POST['host'] ?? 'localhost';
$u = $_POST['user'] ?? 'root';
$p = $_POST['pass'] ?? '';
$db = $_POST['db'] ?? 'test';
$mysqli = @new mysqli($h, $u, $p, $db);
$mysqlResult = $mysqli->connect_errno ? "失敗: {$mysqli->connect_error}" : "成功 (版本: {$mysqli->server_info})";
$mysqli->close();
}
?>
<!DOCTYPE html>
<html><head><title>PHP 環境探針</title>
<style>body{font:14px/1.6 system-ui;padding:20px}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ddd;padding:8px}th{background:#f5f5f5}.ok{color:green}.fail{color:red}</style></head><body>
<h1>PHP 環境探針</h1>
<table><tr><th>項目</th><th>狀態</th><th>版本/詳情</th></tr>
<?php foreach ($info as $k => $v):
$isArr = is_array($v);
$ok = $isArr ? $v[0] : true;
$detail = $isArr ? ($v[1] ?: '已載入') : $v;
?>
<tr><td><?=$k?></td><td class="<?=$ok?'ok':'fail'?>"><?=$ok?'✓ 支援':'✗ 不支援'?></td><td><?=$detail?></td></tr>
<?php endforeach;?>
</table>
<h2>MySQL 連線測試</h2>
<form method="post">
<input name="host" placeholder="Host" value="localhost">
<input name="user" placeholder="User" value="root">
<input name="pass" type="password" placeholder="Password">
<input name="db" placeholder="Database" value="test">
<button name="mysql_test">測試連線</button>
</form>
<?php if (isset($mysqlResult)): ?><p><strong>結果:</strong> <?=$mysqlResult?></p><?php endif;?>
<p><a href="?act=phpinfo">查看 phpinfo()</a> | <a href="https://phpnow.org">PHPnow 官網</a></p>
</body></html>
127.0.0.1/phpmyadmin 進不去?A: 確認 phpMyAdmin 目錄存在於 htdocs/ 下;若被刪除,至官網下載最新版解壓至該目錄。帳號 root,密碼為安裝 PHPnow 時設定的 MySQL 密碼。
A: htdocs/ 為網站根目錄。預設會讀取 index.html 或 index.php。建議刪除預設 index.html,將專案 index.php 放入。子目錄如 htdocs/blog/ 訪問 localhost/blog/。
A: 檢查 extension_dir 路徑正確、DLL 檔存在、Apache 已重啟。部分組件(如 eAccelerator)需額外編譯或下載對應版本 DLL。
A: 務必刪除或改名(如 probe_abc123.php),或加入 IP 白名單/HTTP Basic Auth。探針洩露伺服器詳細資訊,屬高風險資產。
總結: PHPnow 探針功能豐富,適合開發環境快速驗證。生產環境請換用專業監控(如 Zabbix、Prometheus+Grafana、Datadog)並移除探針檔案。