嘿那里!在开始之前请注意...我已经很长时间没有写信了。多年来我一直威胁要这样做,最后我发现这是一个很好的话题。我有点生疏,但会努力坚持下去,希望能有所进步。
EventPress 可能是我所做的最重要的事情。我从一开始就参与其中,该应用程序在过去 10 年中经历了 3 个主要版本,呈指数级增长。版本 4 现已发布,在我们处理它的过程中我想更改一些更改。
首先,介绍一点历史。 EventPress 归 HotPress Media 所有,之所以成立是因为客户需要一个简单的解决方案来管理事件 RSVP,以取代他们的 Excel 电子表格。 EventPress 的第一个版本很丑陋。没有规范,我们在没有适当计划的情况下运行了该项目,最终得到了一大碗意大利面条。但它奏效了,并帮助我们踏入了南非最大的公司之一的大门。
版本 2 是一个巨大的飞跃。我们在接口方式上没有太大的改变,但是底层框架却发生了很大的变化。 EventPress 被迁移到 Laravel(当时的版本 5),尽管版本 1 中的很多代码都转移到了版本 2,但结构要好得多,我们遇到的问题也少得多。那时我们仍然没有任何类型的测试套件,我们基本上是在“它可以在我的机器上运行”的基础上进行测试。不太好。
版本 3 对 UI 进行了彻底修改,Tailwind 成为首选 CSS 框架。尽管仍然有相当多的版本 1 代码隐藏在黑暗的角落,但大量代码已被更改。第 3 版的一个重大变化是全新的分发系统。在此过渡期间,我们学到了很多有关发送群发邮件的知识。
许多面向公众的 UI 都是版本 2 的直接副本。即使现在,与会者看到的大部分内容仍然是版本 2 的代码。相反,版本 3 为代码库带来了更多的结构。某种逻辑开始出现。我们编写了瘦控制器并严重依赖服务容器。版本 3 也是 EventPress 第一个带有测试套件的版本。
我编写 PHP 代码已经很长时间了,但我是自学的。 EventPress 就像被扔进了深渊,没有任何关于如何游泳的指导。这是一个巨大的学习曲线,但它让我达到了今天的水平。我自己构建了这个东西,其他开发人员的投入很少。
这一次,我将通过博客记录 EventPress 4 的开发过程。不是因为我要寻求认可,而是因为我想把这一次记录下来。也许我的解决方案可以帮助其他独立开发人员。我学到了很多关于构建和运行大型 PHP 应用程序的知识。
EventPress 4 将进行大规模重写。尽管大量 EventPress 3 代码最终会出现在版本 4 中,但它不仅仅是复制粘贴。我觉得是时候最终摆脱自版本 1 以来一直存在的所有陈旧内容了;我想要一个更强大的测试套件;我想利用一些更新的技术。
我的计划是在解决这个问题时每月至少写一次东西。我会努力强迫自己坚持下去。
所以首先,投入战斗......
从哪里开始。
EventPress 4 将不会获得新的 UI。我们将使用版本 3 中的几乎所有界面,并且可能只是进行一些细微的更改。 EventPress 的 UI 是使用 Vue 3 和 Tailwind 构建的,而 Inertia 是我们选择的粘合剂。
EventPress 4 将是版本 3 的一对一功能副本。这意味着随着版本 3 在未来几个月内不断发展,版本 4 也需要随之发展。不过,目前还只是一些计划。
首先,我研究了版本 3 仍在努力的地方,并就如何在版本 4 中改进这些元素做了一些笔记。我已经建立了一个关于如何构建此版本的想法事件出版社。有一些熟悉的东西和一些全新的东西:
- Laravel 11
- Vue 3
- InertiaJS 2
- FrankenPHP 上的 Laravel Octane
- PHP 8.4
- MySQL(以及适用于企业客户端的 SQLSRV)
- 球童
我知道其中有一些有趣的选择。辛烷值对我们来说很重要,因为我们以前从未使用过类似的东西。 Octane 是 Laravel 的第一方包,可帮助您在 PHP 应用程序服务器上运行应用程序。支持 Swoole、RoadRunner 和 FrankenPHP。我们研究了所有三个选项,并暂时决定使用 FrankenPHP。它比其他两个更新,但提供了非常好的性能。 Swoole 提供了并发工作线程,这很好,但不是我们认为自己需要的。然而,问题在于它需要安装 Swoole 扩展。这不是我们期望企业客户做的事情。我也有一些使用 FrankenPHP 的经验,所以这是有道理的。
我们已经使用 Nginx 多年了。它太棒了,我强烈推荐它。然而,FrankenPHP 附带了它自己的 Caddy 服务器,因此我们也在对此进行试验。我们可能不会坚持使用 Caddy,但现在,它在列表中。
PHP 8.4 尚未发布,但由于 EventPress 4 暂时不会发布,因此我们开始使用最新版本是有意义的。截至撰写本文时,PHP 8.4 距离发布还有大约一个月的时间,因此我们正在使用最新的候选版本。
InertiaJS 2 的情况大致相同。它也处于测试阶段,但由于我们距离发布还有很长的路要走,它可能会在 EventPress 之前很久就发布。此外,我们在 BETA 版本中运行了 InertiaJS 1 很长时间,没有出现任何问题。
静态分析
我是最近的静态分析转换者。我用得最多的是 PHPStorm 为我提供的我编码的东西。对于 EventPress 4,我们决定全力以赴,将 PHPStan 纳入其中。 PHPStan 是 PHP 的第三方静态分析器。它的配置非常简单,并帮助我消除了许多其他项目中的一些错误。
基于 EventPress 的大小,这在这里也很有意义。为了完成这项工作,我添加了一个 test:types Composer 脚本,我可以随时运行该脚本,并将其添加到 CI 脚本中。
代码检查
我从未运行过 PHP 代码 linter。我使用过 PHP Mess Detector 几次,但从未真正投入其中。对于 EventPress 4,我们决定使用 linter 来帮助保持代码整洁和一致。我们选择了 Laravel 自己的“Pint”,它实际上只是 PHP-CS-Fixer 的包装器,并提供了一种非常简单的方法来保持代码整洁。再次,我添加了 lint 和 test:lint Composer 脚本以使其更易于运行。
开发环境
在开发过程中我在 Mac 和 Linux 机器上工作。我的办公桌上有一台 M1 Max,已经用了好几年了,办公室里还散布着几台 Linux 机器。我的主要驱动程序是 Mac,我的大部分开发工作都是在 Mac 上进行的,但我的所有代码都在 Linux 机器上运行。通常是 Ubuntu 服务器。
EventPress 4 为这个难题添加了一些新的部分,但我认为在大多数情况下我可以继续按照目前的方式进行开发。我使用 Homebrew 安装大部分工具,使用 Laravel Valet 运行本地开发环境。我不是 Laravel Herd 用户(这很好,但我更像是 Herd Pro 用户,我无法证明每年花费 99 美元购买一个可以完成我已经可以做的所有事情的工具,只是速度更快一点,并且包含在一个漂亮的用户界面)。
所以我的计划是在我的本地计算机上运行一个使用 MySQL 数据库运行的 eventpress4.test 域。我将在早期开发过程中使用此状态一段时间,并每隔几天左右使用 Octane 进行一些测试。一旦我们完成了早期部分,我们将开始更频繁地使用 Octane 进行开发。我们将托管一个运行该应用程序的测试服务器,因为我们希望它在生产中运行。
集装箱
EventPress 从未被容器化。然而,EventPress 4 很可能会走这条路。我们仍在尝试一些事情,但我们已经与一些企业客户进行了交谈,我们认为这将有助于使他们的部署过程变得更加容易。我们在 Docker 容器中运行 EventPress 3 进行了一些早期测试,我们认为这对于未来所有 EventPress 版本来说都是正确的举措。
胃肠道
多年来,我们一直严重依赖 GitLab 作为我们选择的 CI/CD 服务。 GitLab 运行许多复杂的 CI 管道,并为我从事的几乎每个项目进行部署。
不过,我也已经是 GitHub 用户很多年了。我主要将它用于我的开源工作,但最近开始将一些较小的项目转移到付费 GitHub 帐户,这给我留下了深刻的印象。有一些事情与 GitLab 的工作方式非常不同,但在大多数方面我真的很高兴。
因此,EventPress 4 代码将托管在 GitHub 上,我们将使用 Actions for 或 CI 管道以及所有部署。
准备好了,出发吧!
我想这篇文章就到此为止了。仍有一些计划需要完成,但我已经开始编写一些代码并编写一些测试。我已经有了一个基本的身份验证层(感谢 Laravel),尽管其中大部分与 EventPress 3 类似。我将在下一个中展示一些代码。答应我!
以上是构建事件新闻第 1 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

会话ID应在登录时、敏感操作前和每30分钟定期重新生成。1.登录时重新生成会话ID可防会话固定攻击。2.敏感操作前重新生成提高安全性。3.定期重新生成降低长期利用风险,但需权衡用户体验。

在PHP中设置会话cookie参数可以通过session_set_cookie_params()函数实现。1)使用该函数设置参数,如过期时间、路径、域名、安全标志等;2)调用session_start()使参数生效;3)根据需求动态调整参数,如用户登录状态;4)注意设置secure和httponly标志以提升安全性。

在PHP中使用会话的主要目的是维护用户在不同页面之间的状态。1)会话通过session_start()函数启动,创建唯一会话ID并存储在用户cookie中。2)会话数据保存在服务器上,允许在不同请求间传递数据,如登录状态和购物车内容。

如何在子域名间共享会话?通过设置通用域名的会话cookie实现。1.在服务器端设置会话cookie的域为.example.com。2.选择合适的会话存储方式,如内存、数据库或分布式缓存。3.通过cookie传递会话ID,服务器根据ID检索和更新会话数据。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用