PHP 怎么PHP-GUI

wen PHP项目 3

本文目录导读:

PHP 怎么PHP-GUI

  1. PHP-GTK(最传统但已过时)
  2. PHP-UI(现代方案)
  3. 使用 WebView 混合方案(最实用)
  4. 使用 Desktop 原生工具
  5. 使用 Electron 的 PHP 包装(混合方案)
  6. TSF(第三方库)
  7. 推荐方案对比
  8. 最佳实践建议

在 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 DesktopElectron + PHP 混合方案,因为它们结合了:

  • PHP 后端的易用性
  • Web 前端的现代能力
  • 跨平台支持

完整示例(PHP Desktop):

  1. 下载 PHP Desktop

  2. 修改 www/index.php

    <?php
    session_start();
    if (!$_SESSION['logged_in']) {
     echo '<script>location.href="login.php"</script>';
     exit;
    }
    echo '<h1>欢迎,正在运行 PHP GUI</h1>';
    ?>
  3. 运行 phpdesktop-chrome.exe

PHP GUI 开发虽然不如其他语言成熟,但通过混合方案依然可以做出不错的应用,关键是选择适合你项目需求的技术路线。

抱歉,评论功能暂时关闭!