Loading...
正在加载...
请稍候

FrankenPHP 静态构建

✨步子哥 (steper) 2026年03月14日 01:35
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>FrankenPHP 静态构建指南</title> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700;900&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet"> <style> :root { --primary-color: #2563eb; --secondary-color: #7c3aed; --accent-color: #06b6d4; --surface-color: #ffffff; --background-color: #f8fafc; --text-primary: #1e293b; --text-secondary: #64748b; --code-bg: #1e293b; --success-color: #10b981; --warning-color: #f59e0b; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Noto Sans SC', sans-serif; background-color: var(--background-color); color: var(--text-primary); display: flex; justify-content: center; min-height: 100vh; } .poster-container { width: 720px; min-height: 960px; background-color: var(--surface-color); position: relative; overflow: hidden; display: flex; flex-direction: column; } /* Header Section */ .header { background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%); padding: 60px 40px 40px; color: white; position: relative; border-bottom-left-radius: 40px; border-bottom-right-radius: 40px; margin-bottom: 30px; z-index: 1; } .header::before { content: ''; position: absolute; top: -50%; right: -20%; width: 400px; height: 400px; background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 70%); border-radius: 50%; } .logo-container { display: flex; align-items: center; gap: 20px; margin-bottom: 20px; } .main-logo { width: 64px; height: 64px; border-radius: 16px; background: rgba(255,255,255,0.2); backdrop-filter: blur(10px); padding: 10px; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 32px rgba(0,0,0,0.1); } .main-logo img { width: 100%; height: auto; filter: brightness(0) invert(1); } .title-group { flex: 1; } .main-title { font-size: 48px; font-weight: 900; line-height: 1.1; letter-spacing: -1px; margin-bottom: 8px; text-shadow: 0 2px 10px rgba(0,0,0,0.2); } .subtitle { font-size: 22px; font-weight: 400; opacity: 0.95; letter-spacing: 0.5px; } /* Content Body */ .content-body { padding: 0 40px 40px; flex: 1; display: flex; flex-direction: column; gap: 24px; } /* Intro Card */ .intro-card { background: white; border-radius: 20px; padding: 24px; border: 1px solid #e2e8f0; box-shadow: 0 4px 20px rgba(0,0,0,0.03); display: flex; align-items: flex-start; gap: 20px; } .intro-icon { background: #eff6ff; color: var(--primary-color); width: 56px; height: 56px; border-radius: 16px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .intro-text h3 { font-size: 20px; font-weight: 700; color: var(--primary-color); margin-bottom: 8px; } .intro-text p { font-size: 16px; line-height: 1.6; color: var(--text-secondary); } /* Comparison Section */ .section-title { font-size: 24px; font-weight: 800; color: var(--text-primary); margin-bottom: 16px; display: flex; align-items: center; gap: 10px; } .section-title i { color: var(--secondary-color); } .comparison-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } .compare-card { background: white; border-radius: 20px; padding: 24px; position: relative; overflow: hidden; border: 1px solid #e2e8f0; transition: all 0.3s ease; height: 100%; display: flex; flex-direction: column; } .compare-card.recommended { border: 2px solid var(--secondary-color); box-shadow: 0 8px 30px rgba(124, 58, 237, 0.15); } .recommend-badge { position: absolute; top: 0; right: 0; background: var(--secondary-color); color: white; padding: 6px 12px; font-size: 12px; font-weight: 700; border-bottom-left-radius: 12px; } .card-header { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; } .card-icon { width: 48px; height: 48px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 24px; color: white; } .musl-icon { background: linear-gradient(135deg, #64748b, #475569); } .glibc-icon { background: linear-gradient(135deg, #7c3aed, #5b21b6); } .card-title { font-size: 18px; font-weight: 700; color: var(--text-primary); } .feature-list { list-style: none; flex: 1; } .feature-list li { display: flex; align-items: flex-start; gap: 8px; font-size: 14px; color: var(--text-secondary); margin-bottom: 10px; line-height: 1.4; } .feature-list li i { font-size: 18px; margin-top: 2px; } .check { color: var(--success-color); } .cross { color: #ef4444; } .warn { color: var(--warning-color); } /* Quick Start */ .quick-start { background: #0f172a; border-radius: 20px; padding: 24px; position: relative; overflow: hidden; } .quick-start::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--primary-color), var(--accent-color)); } .code-header { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; } .code-dot { width: 12px; height: 12px; border-radius: 50%; background: #475569; } .code-dot.red { background: #ef4444; } .code-dot.yellow { background: #f59e0b; } .code-dot.green { background: #10b981; } .code-content { font-family: 'Roboto Mono', monospace; font-size: 13px; color: #cbd5e1; line-height: 1.8; } .code-comment { color: #64748b; } .code-cmd { color: #fbbf24; } /* Advantages */ .advantages { display: flex; gap: 16px; justify-content: space-between; } .adv-item { flex: 1; background: #f1f5f9; border-radius: 16px; padding: 20px 16px; text-align: center; } .adv-icon { font-size: 32px; color: var(--primary-color); margin-bottom: 12px; } .adv-title { font-size: 15px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; } .adv-desc { font-size: 12px; color: var(--text-secondary); line-height: 1.4; } /* Footer */ .footer { text-align: center; padding: 20px; color: var(--text-secondary); font-size: 13px; margin-top: auto; display: flex; align-items: center; justify-content: center; gap: 8px; } .footer i { font-size: 16px; } </style> </head> <body> <div class="poster-container"> <!-- Header --> <div class="header"> <div class="logo-container"> <div class="main-logo"> <i class="material-icons" style="font-size: 36px; color: white;">bolt</i> </div> <div class="title-group"> <h1 class="main-title">FrankenPHP<br>静态构建</h1> </div> </div> <p class="subtitle">创建可移植的 PHP 二进制文件</p> </div> <div class="content-body"> <!-- Intro --> <div class="intro-card"> <div class="intro-icon"> <i class="material-icons">architecture</i> </div> <div class="intro-text"> <h3>核心概念</h3> <p>利用 <strong>static-php-cli</strong> 项目构建包含 PHP 解释器、Caddy Web 服务器和 FrankenPHP 的独立可执行文件,实现真正的"一次构建,到处运行"。</p> </div> </div> <!-- Comparison --> <div> <div class="section-title"> <i class="material-icons">compare_arrows</i> <span>构建类型对比</span> </div> <div class="comparison-grid"> <!-- Musl Card --> <div class="compare-card"> <div class="card-header"> <div class="card-icon musl-icon"> <i class="material-icons">lock</i> </div> <div class="card-title">完全静态</div> </div> <ul class="feature-list"> <li><i class="material-icons check">check_circle</i>基于 musl libc</li> <li><i class="material-icons check">check_circle</i>无任何外部依赖</li> <li><i class="material-icons check">check_circle</i>可在 Scratch 镜像运行</li> <li><i class="material-icons cross">cancel</i>不支持动态扩展</li> </ul> </div> <!-- Glibc Card --> <div class="compare-card recommended"> <div class="recommend-badge">推荐</div> <div class="card-header"> <div class="card-icon glibc-icon"> <i class="material-icons">extension</i> </div> <div class="card-title">基本静态</div> </div> <ul class="feature-list"> <li><i class="material-icons check">check_circle</i>基于 glibc</li> <li><i class="material-icons check">check_circle</i>支持动态加载扩展</li> <li><i class="material-icons warn">warning</i>需要 glibc 环境</li> <li><i class="material-icons check">check_circle</i>适合生产环境</li> </ul> </div> </div> </div> <!-- Quick Start --> <div> <div class="section-title"> <i class="material-icons">terminal</i> <span>快速开始</span> </div> <div class="quick-start"> <div class="code-header"> <div class="code-dot red"></div> <div class="code-dot yellow"></div> <div class="code-dot green"></div> </div> <div class="code-content"> <div><span class="code-comment"># 构建完全静态二进制文件 (Musl)</span></div> <div>docker buildx bake --load static-builder-musl</div> <div style="margin-top: 8px;"><span class="code-comment"># 构建支持扩展的版本 (Glibc)</span></div> <div>docker buildx bake --load static-builder-gnu</div> </div> </div> </div> <!-- Advantages --> <div class="advantages"> <div class="adv-item"> <i class="material-icons adv-icon">rocket_launch</i> <div class="adv-title">高性能</div> <div class="adv-desc">内置 Worker 模式<br>极速响应</div> </div> <div class="adv-item"> <i class="material-icons adv-icon">inventory_2</i> <div class="adv-title">易于部署</div> <div class="adv-desc">单文件分发<br>无需配置环境</div> </div> <div class="adv-item"> <i class="material-icons adv-icon">tune</i> <div class="adv-title">灵活配置</div> <div class="adv-desc">自定义扩展<br>按需编译</div> </div> </div> </div> <!-- Footer --> <div class="footer"> <i class="material-icons">language</i> <span>访问文档了解更多:frankenphp.dev/docs/static/</span> </div> </div> </body> </html>

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

友情链接: AI魔控网 | 艮岳网 | 老薛主机