本文目录导读:

- PHP-GTK(最传统但已过时)
- PHP-UI(现代方案)
- 使用 WebView 混合方案(最实用)
- 使用 Desktop 原生工具
- 使用 Electron 的 PHP 包装(混合方案)
- TSF(第三方库)
- 推荐方案对比
- 最佳实践建议
在 PHP 中做 GUI 开发有一些选项,但都不像其他语言那么成熟,这里给你介绍几种主要方案:
PHP-GTK(最传统但已过时)
最经典的 PHP GUI 方案,但现在基本不维护了。
<?php
// 简单示例
$window = new GtkWindow();
$window->set_title('Hello World');
$window->set_default_size(300, 200);
$label = new GtkLabel('Hello, GUI!');
$window->add($label);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$window->show_all();
Gtk::main();
?>
安装:
# 注意:PHP-GTK 仅支持 PHP 8.0-8.2,且需编译安装 # 不太推荐,已经过时
PHP-UI(现代方案)
使用 PHP 扩展包装了跨平台的 UI 库(libui)。
<?php
$application = new UI\Window('我的应用', 800, 600, true);
$button = new UI\Controls\Button('点击我');
$button->onClick(function() {
echo "按钮被点击了!\n";
});
$application->add($button);
$application->show();
UI\run();
?>
安装:
# Linux/Ubuntu sudo apt install php-dev libgtk-3-dev pecl install ui echo "extension=ui.so" >> /etc/php/8.2/cli/php.ini
使用 WebView 混合方案(最实用)
利用 PHP 内置服务器 + HTML/JS 做界面,这是目前比较实用的方案。
<?php
// server.php
$html = <<<HTML
<!DOCTYPE html>
<html>
<head>PHP GUI</title>
</head>
<body>
<h1>我的 PHP 应用</h1>
<button onclick="callPHP()">调用PHP</button>
<div id="result"></div>
<script>
function callPHP() {
fetch('/api/hello')
.then(r => r.json())
.then(data => {
document.getElementById('result').innerText = data.message;
});
}
</script>
</body>
</html>
HTML;
if ($_SERVER['REQUEST_URI'] === '/' || $_SERVER['REQUEST_URI'] === '/index.php') {
echo $html;
} elseif ($_SERVER['REQUEST_URI'] === '/api/hello') {
header('Content-Type: application/json');
echo json_encode(['message' => 'Hello from PHP! ' . date('Y-m-d H:i:s')]);
}
?>
运行:
php -S localhost:8080 server.php # 然后用浏览器打开 http://localhost:8080
使用 Desktop 原生工具
一些 PHP 框架可以帮助生成桌面应用:
PHP Desktop(最推荐)
使用 PHP 内置 web 服务器 + Chromium/WebView:
# 下载 PHP Desktop git clone https://github.com/cztomczak/phpdesktop.git cd phpdesktop # 修改 www 目录下的 index.php
<?php
// www/index.php
require_once 'phpdesktop-server.php';
$server = new PHPDektopServer('127.0.0.1', 8080);
$server->serve();
?>
使用 Electron 的 PHP 包装(混合方案)
// main.js
const { app, BrowserWindow } = require('electron');
const { exec } = require('child_process');
const path = require('path');
app.whenReady().then(() => {
// 启动 PHP 服务器
exec('php -S 127.0.0.1:8080', { cwd: './php' });
// 创建窗口
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
win.loadURL('http://127.0.0.1:8080');
});
TSF(第三方库)
一个比较新的 PHP GUI 库:
use TSF\Window;
use TSF\Controls\Button;
$window = new Window(['title' => '测试', 'width' => 400, 'height' => 300]);
$button = new Button('点击');
$button->on_click(function() {
echo "Clicked!\n";
});
$window->add($button);
$window->show();
推荐方案对比
| 方案 | 难度 | 成熟度 | 跨平台 | 推荐度 |
|---|---|---|---|---|
| PHP-GTK | 难 | 过时 | 有限 | |
| PHP-UI | 中 | 一般 | 好 | |
| WebView混合 | 易 | 稳定 | 好 | |
| PHP Desktop | 易 | 稳定 | 好 | |
| Electron | 中 | 稳定 | 好 |
最佳实践建议
如果只是快速开发简单界面:
<?php
// 使用 PHP Desktop 方式最简单
// 创建 index.php
echo file_get_contents('webapp/index.html');
?>
如果是商业项目: 建议使用 PHP Desktop 或 Electron + PHP 混合方案,因为它们结合了:
- PHP 后端的易用性
- Web 前端的现代能力
- 跨平台支持
完整示例(PHP Desktop):
-
下载 PHP Desktop
-
修改
www/index.php:<?php session_start(); if (!$_SESSION['logged_in']) { echo '<script>location.href="login.php"</script>'; exit; } echo '<h1>欢迎,正在运行 PHP GUI</h1>'; ?> -
运行
phpdesktop-chrome.exe
PHP GUI 开发虽然不如其他语言成熟,但通过混合方案依然可以做出不错的应用,关键是选择适合你项目需求的技术路线。