在.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.1 or newer
MySQL Server
對WordPress修改
由於Peachpie 0.5.0版本,編譯器不支持擴展有條件聲明的類,如
if (condition) { class X {} } class Y extends X {} // extending conditionally declared class
- 注釋條件 if (!class_exists(...))
- 注釋第一個Services_JSON_Error類,保留第二個
這里准備了一個修改好的WordPress版本,已經包括上面修改,使你編譯項目更容易。
預先修改 wp-config.php 配置了包含MySQL數據庫的憑據的文件。使用默認端口3306,密碼為'' ,服務器是'localhost'。這里大家根據實際情況進行修改。
編譯WordPress
使用 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(new PhpRequestOptions() { ScriptAssembliesName = new[] { "website" } }); // 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 看看。

參考文檔:
https://github.com/linezero/peachpie-wordpress
https://github.com/iolevel/peachpie-wordpress
http://www.peachpie.io/2017/02/wordpress-announcement.html
如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。
