在线体验:https://krakjoe.github.io/em
什么是 PHP em?
PHP em 是一个基于 WebAssembly 的单页 PHP 开发栈,允许开发者直接在浏览器中编写、测试和运行 PHP 代码。它提供了一个完整的开发环境,包括代码编辑器、虚拟文件系统、数据库支持和多版本 PHP 测试功能。em 还支持作为桌面应用运行,提供离线开发能力,适用于 Linux、MacOS 和 Windows 系统。
主要特性
- 浏览器端 IDE:内置支持语法高亮的代码编辑器,支持 PHP 8.0 至 8.4 及开发版(master),实时执行代码。
- 虚拟文件系统(VFS):内存中的文件系统模拟,支持项目导入/导出(ZIP 格式)、持久化存储和目录操作。
- GitHub 集成:直接从 GitHub 仓库或 Gist 加载项目,支持密钥认证以规避 API 限制。
- 数据库与扩展:支持 SQLite、图像处理(GD、JPEG、PNG)、XML/DOM 操作、压缩(zlib、bz2)等 PHP 扩展。
- 桌面应用:提供 Electron 构建的桌面版本,支持多种操作系统和架构。
快速入门
在线使用
- 访问 em 在线环境(具体链接需从 GitHub 页面获取)。
- 从下拉菜单选择 PHP 版本。
- 在编辑器中编写 PHP 代码。
- 点击“运行代码”或按 Ctrl+Enter查看即时输出。
桌面应用安装
下载适用于您操作系统的版本(需使用 --no-sandbox 参数启动 Electron 应用):
- Linux:支持 x64/arm64 的 AppImage 或 ZIP 格式。
- MacOS:支持 x64/arm64 的 DMG 或 ZIP 格式。
- Windows:支持 x64 的便携版、安装版或 ZIP 格式。
示例启动命令:
./em.AppImage --no-sandbox  # Linux 示例
示例代码
在 em 的编辑器中运行以下 PHP 代码:
<?php
echo "Hello from PHP in WebAssembly!";
通过 JavaScript API 集成:
const result = Module.invoke('<?php echo "Hello from PHP!"; ?>');
console.log(result); // 输出: "Hello from PHP!"
应用场景
学习与教育
- 无需配置 XAMPP 或 WAMP,初学者即可快速上手 PHP。
- 提供安全的沙盒环境,适合实验和教程。
- 支持多版本 PHP 测试,确保代码兼容性。
原型设计与测试
- 快速验证 PHP 算法或概念。
- 在不同 PHP 版本间切换测试,无需修改本地环境。
开发与调试
- 便携的开发环境,隔离于主系统。
- 内置虚拟浏览器,测试 Web 应用(如表单、会话和 HTTP 请求)。
高级功能
虚拟浏览器
em 的虚拟浏览器功能允许在模拟环境中运行 PHP Web 应用,无需真实服务器。开发者可以测试表单、会话和 HTTP 请求,调试 Web 应用。
项目管理
- 文件/文件夹操作:在虚拟文件系统中创建和组织项目。
- 导入/导出:支持 ZIP 格式或高效的 VFS 镜像(使用压缩的连续缓冲区,优于 ZIP)。
- GitHub 集成:直接导入 GitHub 仓库或 Gist。
示例:创建 VFS 镜像:
php-em-vfs.js --mode create --in /path/to/my/files --out /tmp/my.vfsi
多版本支持
支持 PHP 8.0 至 8.4 及 master 分支,方便测试代码在不同版本中的行为。
架构与技术
PHP em 基于以下核心技术:
- WebAssembly:将 PHP C 代码编译为可在浏览器运行的高效代码。
- Emscripten:将 PHP 编译为 WebAssembly 的工具。
- 虚拟文件系统:模拟 POSIX 文件操作,支持随机访问和压缩存储。
- Service Workers:支持虚拟浏览器功能。
- IndexedDB/FileSystem API:实现持久化存储。
为什么选择 PHP em?
PHP em 消除了传统 PHP 开发中的环境配置障碍,使开发者能够专注于代码本身。其便携性、跨平台支持和强大的功能使其适合:
- 学生和初学者快速学习 PHP。
- 开发者进行快速原型设计和跨版本测试。
- 在线或离线开发 Web 应用。
总结
PHP em 是一个突破性的工具,将 PHP 开发带入浏览器和桌面环境。通过 WebAssembly 和虚拟文件系统,它提供了一个功能齐全、零配置的开发环境。无论是学习、测试还是开发,PHP em 都为 PHP 开发者提供了无与伦比的便利。立即访问 GitHub - krakjoe/em 开始体验!