用.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

  插件下载地址 https://marketplace.visualstudio.com/items?itemName=iolevel.peachpie-vs

安装后界面如下:

二、新建PeachPie项目 

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

解决方案中包含两个项目, 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 项目中, 如图:

然后查看项目

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

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

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

 如图:

四 运行

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

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

点继续运行就好。 

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

 

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

点击同意

点击下一步

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

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

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

如图:

总结:

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

https://gitee.com/maikebing/DiscuzX

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

https://github.com/peachpiecompiler/peachpie

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode225. 用队列实现栈

一:题目 二:上码 class MyStack { private:/**思路:1.我们每次push的时候 先push进队列,然后的话,将该元素前面的元素都出队重新push进该队列的尾部*/queue<int>q; public:/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */voi…

使用 .NET 进行游戏开发

微软是一家综合性的网络公司&#xff0c;相信这点来说不用过多的赘述&#xff0c;没有人不知道微软这个公司&#xff0c;这些年因为游戏市场的回报&#xff0c;微软收购了很多的游戏公司还有独立工作室&#xff0c;MC我的世界就是最成功的的案例&#xff0c;现在市值是排在全世…

leetcode20. 有效的括号

一:题目 二:上码 class Solution { public:/**思路:- 这个题厉害之处在于其遍历到符号的左半部分的时候,我们是将对应的右半部分入队的- 那么如果存在对应的元素的话,那么我们就可以判断跟栈顶元素是否相等。*/bool isValid(string s) {stack<char> st;for (int i 0; i …

为什么我们总是「习惯性辩解」?

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「162」篇原创敬上大家好&#xff0c;我是Z哥。今天我们来讨论一个日常工作中很常见的现象&#xff1a;面对质疑&#xff0c;我们的第一反应是不承认&#xff0c;甚…

leetcode1047. 删除字符串中的所有相邻重复项

一:题目 二:上码 class Solution { public:string removeDuplicates(string s) {stack<char>st;string str;st.push(s[0]);for (int i 1; i < s.size(); i) {if (!st.empty() && s[i] st.top()) {//此时s[i]也没有入栈st.pop();} else {st.push(s[i]);}}whi…

如何理解Eating这个词?云原生与微服务专场介绍

点击上方“开源社”关注我们| 作者&#xff1a;开源社| 编辑&#xff1a;李明康| 责编&#xff1a;袁睿斌有一幅曾经传播很广的漫画&#xff0c;大意是&#xff1a;软件吞噬世界&#xff0c;开源吞噬软件。后来这个漫画又被人加了两条鱼&#xff1a;云计算吞噬开源&#xff0c;…

leetcode239. 滑动窗口最大值(java详解)

一:题目 二:思路 1:lc通过版 class Solution {/*思路:1.这里是要求出每一个窗口中的最大值,那么我们自然的想到如何用一个队列 可以使其每次队首出现最大值&#xff0c;那么我自然回想到大顶堆,但是用了之后&#xff0c;我们窗口中的元素位置就发生了变化那么当我们移动窗口的…

程序员修神之路--它可能是分布式系统中最重要的枢纽

“灵魂拷问分布式系统为什么需要注册中心呢&#xff1f;分布式系统注册中心有哪些坑&#xff1f;分布式系统注册中心怎么来实现呢&#xff1f;注册中心利用现成的组件很好实现吗&#xff1f;看到标题你可能会鄙视一下&#xff0c;注册中心有是什么讲的。注册中心作为现在架构中…

用Java刷算法题的常用数据结构(C++转Java)

文章目录一:前言1:为何刷题从C转java2:如何上手呢&#xff1f;二:输入1:常规的输入2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决3:常见输入之我们输入一串数到容器中三:常用的数据结构1:数组2.List3:Map4:Set5.栈6:队列一:前言 1:为何刷题从C转java 平时除了写项…

Magicodes.IE 2.4发布

今天我们发布了2.4版本&#xff0c;这离不开大家对Magicodes.IE的支持&#xff0c;我们也对大家的意见以及需求不断的进行更新迭代&#xff0c;目前我们的发布频率平均在一周一个beta版本&#xff0c;一个月一个正式版本的更新&#xff0c;我们欢迎更多的开发者加入进来&#x…

7-1 简单词法分析

一:题目 二:思路 思路: 1.记得看书;不要一上来就莽;不然莽不过去的 2.这里我从书中了解到 f(0,b) 0; f(0,a) 1;f(1,c)1;f(1,b)3… 那么的话我们只要最终推导出f(1,b)3;那么的话就是一个满足要求的字符串; 注意我们入口部分一定是从 0 开始; 3.接下来就是要判断一些细枝末节 …

Java 生态碎片化 和 .NET生态的一致性

.NET Core是以MIT协议开源&#xff0c; Java是GPL协议开源。Java 8 SDK升级Oracle要收费这件事对于很多小公司是有着重大的影响的&#xff0c;Java生态越发碎片化&#xff0c;有众多的OpenJDK发行版&#xff0c;腾讯云和阿里都有OpenJDK发行版&#xff0c;龙芯也有MIPS版本的Op…

Power Automate Desktop概览

点击蓝字关注我们Microsoft Power Automate使得通过自动化重复性、耗时的任务来提高您的业务效率成为可能。Power Automate提供了一种更好的方法&#xff0c;通过数字和机器人过程自动化(RPA)在整个组织中完成任务。Microsoft Ignite 在线活动小伙伴们都有参加么&#xff1f;重…

超600人!近5小时直播!录屏+彩蛋+PPT…你要的都在这!

2020年9月26日下午&#xff0c;《NCF框架揭秘》直播交流会圆满落幕&#xff01;由盛派首席架构师苏震巍老师主持、分享&#xff0c;更有各路大咖&#xff0c;在线助力&#xff0c;干货满满&#xff01;点击视频 ☝ 回顾直播现场友情提示&#xff1a;如果公众号内视频无法显示高…

leetcode226. 翻转二叉树(Java)

一&#xff1a;题目 二:上码(前序解法) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left,…

Chrome正在启用HTTP/3,支持IETF QUIC

Chromium 官方宣布 Chrome 正在部署到 HTTP/3 与 IETF QUIC。QUIC&#xff08;Quick UDP Internet Connections&#xff09;是 Google 推出的一个项目&#xff0c;旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCPTLSSPDY &#xff0c;但是基于 UDP 实现的。它是 HTTP/3 的…

leetcode101. 对称二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

诊断日志知多少 | DiagnosticSource 在.NET上的应用

1. 引言最近为了解决ABP集成CAP时无法通过拦截器启用工作单元的问题&#xff0c;从小伙伴那里学了一招。借助DiagnossticSource&#xff0c;可以最小改动完成需求。关于DiagnosticSource晓东大佬18年在文章 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息就…

leetcode110. 平衡二叉树(java详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

IdentityServer4系列 | 常见术语说明

一、前言在上一篇中&#xff0c;我们IdentityServer4的说明&#xff0c;认识到是一个基于OpenID Connect协议标准的身份认证和授权程序&#xff0c;并简单的对基础知识的认识以及区别说明&#xff0c;从OAuth、OpenID、OpenID Connect以及JWT等进行对比区别说明。而在这一篇中&…