65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Windows 中运行独立的 PHP 应用

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2023年2月6日

CPOL

2分钟阅读

viewsIcon

18146

Windows 内置的便携式 nginx+php+mysql

引言

存在各种在 Windows 中“便携式”安装 PHP 堆栈的工具。 它们都要求一些手动下载、交互、启动/停止等。 这是一个您可以链接到应用程序的静态库,用于在 Windows 中运行 PHP 代码。

该库使用 ZipUtils 来处理 ZIP 档案。

技术栈

该库将配置

  • Nginx,优秀的 Web 服务器。 该库包含版本 1.23.3。 我从 https://nginx.ac.cn/en/download.html 获取了它。
  • PHP,目前是 8.2.2,我从这里 获取了“线程安全”zip 文件。
  • MariaDB MySQL 服务器,目前是 10.10.2。 我从 这里 获取了它。

通过删除 NEED_PHPNEED_MDB 的定义,如果您不需要 PHP 和 MySQL,可以删除它们。

Using the Code

//
    RUNWW w;
    w.hIcon = LoadIcon(h, L"ICON_1");
    w.nginx = { nginx.data(),nginx.size() };
    w.root = { f.data(),f.size() };
    w.php = { php.data(),php.size() };
    w.mdb = { mdb.data(),mdb.size() };
    w.PHPPort = 0;
    w.NginxPort = 0;
    w.MDBPort = 51000; 
    
    w.DataFolder = L"c:\\ww_data";
    w.WhereAt = L"c:\\ww_apps";

    RunWW(w);
//

您需要传递用于 nginx、php、mariaDB 和您的文件根目录的 zip 内存。 此外,您可以为 PHP 和 Nginx 端口传递零。 对于 MySQL,您也可以传递 0,但随后您将不得不从可执行文件中重写您的 PHP 脚本以连接到服务器。

WhereAt 文件夹是放置应用程序二进制文件的地方。 在上面的示例中,您有以下安装:

  • nginx,在 c:\ww_apps\nginx
  • PHP,在 c:\ww_apps\php
  • MariaDB,在 c:\ww_apps\mdb

该库会在 nginx/conf 文件夹内重新创建 nginx.conf,以匹配服务器名称、端口和 PHP 参数。

该库会重新创建 php.ini,以加载最常见的 PHP 扩展。

DataFolder 文件夹是放置

  • 您的应用程序 PPH 文件的根文件夹(在本例中,在 c:\ww_data\html 中)。
  • MySQL 数据文件夹 (c:\ww_data\mdb)

您可以将现有文件夹作为 DataFolder 传递,并且不解压 zip 文件。 在这种情况下,该库使用现有的安装文件夹(其中包含 "html" 文件夹用于 HTML nginx PHP 代码,"mdb" 文件夹用于 MySQL)。

此外,该库会自动在 MySQL 数据文件夹中创建一个数据库 "db1",您可以将其更改为任何您想要的名称。 您也可以创建一个新用户(而不是默认的 "root")。

最后,RunWW() 运行服务器并在任务栏中创建一个图标,同时使用您的项目的根 URL 启动浏览器。 当用户右键单击托盘图标并选择退出时,此函数将返回。

当此函数返回时,您的应用程序应该保留数据文件夹(即,通过将其压缩到存档中,或以其他方式保留它)直到下次使用。 WhereAt 文件夹可以随时重新创建。

测试代码

测试解决方案使用此库来运行单个 index.php,该文件创建一个 SQLite3 数据库并连接到 MySQL 并创建一个表。

该库包含 xdebug。 作为一个 PHP 扩展安装,并配置为在调用 xdebug_break() 时连接到 localhost:9003(检查 launch.jsonphp.cpp 以进行修改)。 如果您使用 Test 的数据文件夹启动 VSCode 并启动 xdebug,则默认的 index.php 将中断。

历史

  • 2023年2月6日 - 首次发布
© . All rights reserved.