vlambda博客
学习文章列表

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

    DiscuzX是北京康盛新创科技有限责任公司推出的一套通用的社区论坛软件系统。自2001年6月面世以来,Discuz!已拥有15年以上的应用历史和200多万网站用户案例,是全球成熟度最高、覆盖率最大的论坛软件系统之一。目前最新版本Discuz! X3.4正式版于2017年8月2日发布,去除了云平台的相关代码,是 X3.2 的稳定版本。 通过DiscuzX 用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。Discuz! 的基础架构采用世界上最流行的web编程组合PHP+MySQL实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。    作为国内最大的社区软件及服务提供商,Comsenz旗下的 Discuz! 开发组具有丰富的 web应用程序设计经验,尤其在论坛产品及相关领域,经过长期创新性开发,掌握了一整套从算法,数据结构到产品安全性方面的领先技术。使得 Discuz! 无论在稳定性、负载能力、安全保障等方面都居于国内外同类产品领先地位!

        .NET Core 是一个通用的开放源代码开发平台。可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。为云、IoT、客户端 UI 和机器学习提供了框架和 API。  最新版是 .NET Core 3.1, .Net 5 将于2020年11月发布。 

        作为曾经的DiscuzX老粉丝, 要让DiscuzX在性能上有大幅度提升, 在部署方面采用现代的部署环境, 想让DiscuzX继续发光发热, peachpie编译器绝对是不二之选。 下面开始介绍具体步骤:

  

一、安装 PeachPie Visual Studio Extension

安装后界面如下:


二、新建PeachPie项目 

由于我们的DiscuzX是一个Web项目, 因此我们创建 PeachPie ASP.Net Core Web App , 创建后 如下图:

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

解决方案中包含两个项目, Server 是 ASP.Net Core 项目, 在这里可以理解为承载PHP的宿主, Web1 则是PHP项目!


三、编译php 

由于默认模板中的 Peachpie.NET.Sdk/1.0.0-preview1 似乎存在bug , 经过参考  https://github.com/iolevel/peachpie-samples , 我们将web1 项目 改成 Peachpie.NET.Sdk/1.0.0-preview2 ,  server项目中的Peachpie.AspNetCore.Web  也改为 1.0.0-preview2版本!

接下来, 让我们把 DiscuzX 的 upload文件夹中的所有文档放在 Web1 项目中, 如图:

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

然后查看项目

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员


在这里我们遇到一个问题, source\plugin\mobile 中引用了一个不存在的php文件, 我们直接把mobile 排除掉, 因为这个插件目前对于 DiscuzX 没什么可用价值, 然后再编译, 编译结果如下:

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员


用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员


无数警告,  没心细看, 直接点Server的运行, 结果发现 样式, 图片全没有, (敲黑板,划重点),我们需要在 Startup 的 Configure 方法中 加入下面这行代码


app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(Path.GetFullPath("../upload/")) });

 如图:

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员



四 运行

点击运行后, 运行过程中会有多个报错, 比如

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

ob_end_clean 的问题已经实现了, 只不过没发布, 

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

点继续运行就好。 

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

不管任何情况, 点继续就好。 


 

现在, 我们看到了熟悉的界面, 如下图: 

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

点击同意

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

点击下一步

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

这里记得前提是数据库密码和用户名要对!

然后你会看到安装过程一闪而过。 

用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员

那么接下来, 界面并不能显示出来, 表并没有创建成功, 

如图:



总结:

DiscuzX 要想继续在.Net Core 上使用, 并不是短短一两个小时可以搞定的, 需要进一步调整, 一些 内容可能依然存在 peachpie没有实现的情况, 因此如果你有兴趣参与DiscuzX在.Net Core中的调试 ,可以访问

https://gitee.com/maikebing/DiscuzX

如果你想了解更多有关php运行在.Net Core 上的内容, 可以关注 peachpie

https://github.com/peachpiecompiler/peachpie