在.NET Core 上啟動並執行 WordPress,無需安裝PHP既可跨平台運行WordPress。
在Peachpie中實現PHP所需的功能數月後,現在終於可以運行一個真實的應用程式:WordPress。
本文是基於Peachpie https://github.com/iolevel/peachpie
Peachpie是一個基於Microsoft的Roslyn的現代PHP編譯器。
在.NET上運行WordPress
流行的Phalanger項目已經證明,可以在Microsoft .NET上運行幾乎未經修改的WordPress應用。
但是這個解決方案存在著問題,與新的WordPress版本不相容。現在,Peachpie 也能夠將WordPress作為一個完全託管的應用程式運行在.NET和.NET Core上。
這隻是一個證明,Peachpie仍然是一個進行中中的項目。不建議在生產環境中使用它。
本篇文章主要目的是證明Peachpie真的與WordPress中使用的標準PHP相容,並展示其優點。
先決條件:
.NET Core 1.0
MySQL Server
對WordPress修改
由於Peachpie 0.5.0版本,編譯器不支援擴充有條件聲明的類,如
if (condition) { class X {} }class Y extends X {} // extending conditionally declared class
wp-includes/class-json.php:
這裡準備了一個修改好的WordPress版本,已經包括上面修改,使你編譯項目更容易。
.NET Core WordPress
預先修改 wp-config.php
配置了包含MySQL資料庫的憑據的檔案。使用預設連接埠3306,密碼為'' ,伺服器是'localhost'。這裡大家根據實際情況進行修改。
編譯WordPress
編譯由dotnet及其website/project.json
專案檔驅動。
{ "version": "1.0.0", "buildOptions": { "compilerName": "php", "compile": "**\\*.php", "debugType": "portable", "xmlDoc": true }, "dependencies": { "Peachpie.App": "0.5.0-*" }, "tools": { "Peachpie.Compiler.Tools": "0.5.0-*" }, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0" } } } }}
使用 Peachpie.Compiler.Tools 進行編譯WordPress項目。
然後有一個app 項目也就是ASP.NET Core。
static void Main() { var root = Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()) + "/website"; var host = new WebHostBuilder() .UseKestrel() .UseWebRoot(root).UseContentRoot(root) // content root with wp static files .UseUrls("http://*:5004/") .UseStartup<Startup>() // initialization routine, see below .Build(); host.Run();} class Startup { public void Configure(IApplicationBuilder app) { Pchp.Core.Context.DefaultErrorHandler = new Pchp.Core.CustomErrorHandler(); // disables debug asserts app.UsePhp(); // installs handler for *.php files and forwards them to our website.dll app.UseDefaultFiles(); app.UseStaticFiles(); }}
接著還原項目,在根目錄下dotnet restore.
還原好以後cd app dotnet run
然後訪問http://localhost:5004/ ,只要MySQL 配置正確,就會跳轉至安裝介面。注意要先在資料庫中建立wordpress 資料庫。
為了證明該網站真的在.NET Core上運行,我們可以反編譯website.dll 看看。