【脚本】提取phpstudy网站对应的PHP版本
需求背景
项目本地开发是时一直用的是 PHPStudy,不能像宝塔一样能直接查看每个项目的 PHP 版本。经过研究用 PHP 写了一个脚本,用来读取网站对应的PHP版本。


原理分析
-
PHP 版本与 FastCGI 端口的映射关系保存在 D:\phpstudy\COM\xp.ini
-
项目的配置文件保存在 D:\phpstudy\Extensions\Nginx1.15.11\conf\vhosts
-
项目的配置文件中记录有使用的 fastcgi 端口,结合映射关系即可获取项目所用 PHP 版本
关键文件
D:\phpstudy\COM\xp.ini 文件内容

D:\phpstudy\Extensions\Nginx1.15.11\conf\vhosts 中某个项目的配置文件

代码脚本
创建文件 phpstduy.php,保存以下代码:
<?php
$xpIni = 'D:/phpstudy/COM/xp.ini';
$vhostDir= 'D:/phpstudy/Extensions/Nginx1.15.11/conf/vhosts';/* 1. 端口=>版本映射 */
$portVer = [];
foreach (file($xpIni, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $l) {if (preg_match('/xp\.cn_cgi(\d{4})=.*php([\d\.]+)nts/', $l, $m)) {$portVer[$m[1]] = $m[2];}
}
/* 2. 遍历 conf */
foreach (glob("$vhostDir/*.conf") as $file) {$content = file_get_contents($file);if (preg_match('/fastcgi_pass\s+127\.0\.0\.1:(\d{4})/', $content, $m) && preg_match('/^\s*server_name\s+([^;]+);/m', $content, $m2)) {$port = $m[1];$ver = $portVer[$port] ?? '未知';$serverName = trim($m2[1] ?? '');echo $serverName . "\t" . $ver . "\n";}
}
?>
运行结果
命令行中执行:php phpstduy.php ,即可查看每个项目对应的PHP版本

优化建议
- 把运行结果存入数组,结合html页面,部署为站点,美化查看效果。
- vhosts 目录下的配置文件里可能出现多个 server_name 注意特殊处理
