找到
171
篇与
技术教程
相关的结果
- 第 11 页
-
不可不知的 MySQL 配置参数,让你的数据库 “稳如狗” 为了提高 MySQL 服务器的性能和稳定性,我们需要对其配置参数进行调整,主要包含 OS 配置参数和 MySQL 数据库配置参数,需要的小伙伴可以参考一下。 OS配置部分 (1)在BIOS及内核层面关闭NUMA (2)在BIOS层面将CPU、内存均设置最大性能模式 (3)在BIOS层面关闭CPU节能模式 (4)修改 IO Scheduler 为 deadline 或 noop,机械盘设置为 deadline,ssd 设置为 noop grep deadline /sys/block/sd*/queue/scheduler(5)使用xfs文件系统,挂载选项 noatime、nodiratime、nobarrier (6)在内核层面设置 vm.swappiness<=5,vm.dirty_ratio<=10, vm.dirty_background_ratio<=5 fs.file_max=65536 指定能够打开的文件句柄数 vm.dirty_background_ratio 指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台 回写进程运行,将一定缓存的脏页异步地刷入外存; vm.dirty_ratio 指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。 net.core.somaxconn=65536 指定socket监听的TCP协议连接数的上限 net.core.netdev_max_backlog=65536 net.ipv4.tcp_max_sync_backlog=65536 net.ipv4.tcp_fin_timeout=10 net.ipv4.tcp_tw_reuse=0 此参数表示开启重用,允许将 TIME_WAIT 套接字重新用于新的TCP连接 建议关闭 net.ipv4.tcp_tw_recycle=0 此参数表示开启TCP连接中 TIME_WAIT 的快速回收,建议关闭(7)在内核层面修改用户可最大打开文件数和线程数为 65535 vi /etc/security/limits.conf # add for mysql * - nofile 65535 * - nproc 65535MySQL配置部分 (1)sort/join/read/read rnd buffer 设置 --一般4M或者8M,最多到16M sort_buffer_size = 4M join_buffer_size = 4M read_buffer_size = 8M read_rnd_buffer_size = 4M (2)tmp/heap table --一般16M或者32M,如果sql性能差,需要经常产生临时表,可以设到96M。可以在session级别设置 tmp_table_size = 32M max_heap_table_size = 32M (3)双一保证 --保证主库环境、主从数据一致性 sync_binlog = 1 innodb_flush_log_at_trx_commit = 1 (4)long_query_time --建议设为0.01-0.1,如果设为0,就会把所有的sql记录下来,需要定期去清理 long_query_time = 0.1 (5)log_queries_not_using_indexes & log_throttle_queries_not_using_indexes --把所有没有使用索引的sql都记录下来 log_queries_not_using_indexes =1 log_throttle_queries_not_using_indexes = 60 (6)interactive_timeout & wait_timeout --一般建议设置为300s 或者600s interactive_timeout = 600 wait_timeout = 600 (7)lock_wait_timeout --持有锁的时间,一般设置为1800或者3600 lock_wait_timeout = 3600 (8)default_time_zone --可能造成cpu使用高,要设置一个固定值 default_time_zone = "+8:00" (9)thread_handling --企业版或者percona版本才有的参数,如果业务是大量短连接,可以设置。如果是长连接或者连接池,没必要打开 (10)innodb_buffer_pool_size --一般设置为内存50%-75% innodb_buffer_pool_size=2G innodb_buffer_pool_instances 必须在 innodb_buffer_pool_size 大于等于1G 时才生效。 当 innodb_buffer_pool_size 值低于 1GB时,没必要也不能设置innodb_buffer_pool_instances 值大于等于 2。 一般而言,当 innodb_buffer_pool_size 值不高于 8GB时,没必要设置innodb_buffer_pool_instances 值大于 1。 通常,当 innodb_buffer_pool_size 较大时(大于64GB),innodb_buffer_pool_instances设置为 8 是个比较合理的值。 (11)innodb_max_dirty_pages_pct --默认75%,IO比较快的可设置为50% innodb_max_dirty_pages_pct = 50 (12)innodb_thread_concurrency --建议设置为0 innodb_thread_concurrency = 0 (13)innodb_lock_wait_timeout --行锁等待时间,设为5-10s innodb_lock_wait_timeout = 10 (14)innodb_log_file_size & innodb_log_files_in_group innodb_log_file_size = 2G innodb_log_files_in_group = 3 (15) # 根据您的服务器IOPS能力适当调整 # 一般配普通SSD盘的话,可以调整到 10000 - 20000,普通机械磁盘其随机IO的IOPS最多也就是300 # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 (16) innodb_status_output innodb 状态监控信息开关,on为开启,off为关闭,默认为off innodb_status_output_locks 为锁监控信息开关,on为开启,off为关闭,默认也为off 一般建议将innodb_status_output innodb 参数关闭,如测试需要可以临时打开,测试完成再关闭。 SET GLOBAL innodb_status_output=OFF; 改为还需要同步修改配置文件,否则下次重启又打开了。改完后,错误日志不再有innodb状态信息输出了。 innodb_status_output_locks 设置为打开,监控锁信息。这样需要查看锁信息时,可以通过 show engine innodb status \G; 进行查看。 (17) skip_name_resolve:默认值为OFF,内网生产建议设为ON,禁用dns解析 (18)设置保存binlog时间 expire_logs_days=7 或者 binlog_expire_logs_seconds=604800 (19)sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION (20)max_allowed_packet max_allowed_packet = 64M (21)innodb_print_all_deadlocks innodb_print_all_deadlocks=1 #建议打开
-
PHP函数对象编程 FOP 的替代方案是什么? 函数对象编程(FOP)是一种利用函数作为对象的编程模式。它通常用于定义回调函数,用于在事件触发或其他条件满足时执行特定操作。 虽然 FOP 在某些情况下非常有用,但它也有一些缺点,包括可维护性差、可读性差以及难以调试。 以下是一些函数对象编程的替代方案: 匿名函数 匿名函数是一种没有名称的函数。它们可以使用 lambda 表达式或箭头函数来定义。匿名函数对于快速定义和使用小函数非常有用。 // lambda 表达式 $sum = function(int $a, int $b) { return $a + $b; }; // 箭头函数 $sum = fn(int $a, int $b) => $a + $b;类方法 类方法可以用来定义回调函数。类方法的好处是它们具有更好的可维护性并且更容易调试。 class MyClass { public function sum(int $a, int $b) { return $a + $b; } } $myClass = new MyClass(); $sum = [$myClass, 'sum'];闭包 闭包是一种函数,可以访问它的作用域之外的变量。闭包非常适合在多个函数之间共享状态。 $x = 10; $closure = function() use ($x) { return $x + 2; };实战案例 假设我们想要定义一个回调函数,用于打印字符串。我们可以使用以下方法: 函数对象编程: $callback = new class { public function __invoke(string $message) { echo $message; } }; 匿名函数: $callback = fn(string $message) => echo $message; 闭包: $callback = function(string $message) { echo $message; }; 类方法: class MyClass { public function printMessage(string $message) { echo $message; } } $myClass = new MyClass(); $callback = [$myClass, 'printMessage'];哪种方法最适合取决于具体情况。一般来说,匿名函数和闭包对于小型回调函数是最好的选择,而类方法对于大型回调函数或需要访问外部状态的回调函数是最好的选择。
-
Linux服务器应该用哪个版本,Debian,CentOS 还是 Redhat ? 在选择公司服务器的Linux发行版时,不同的发行版各有其优势和适用场景。Debian、CentOS和RedHat是三个非常流行的Linux发行版,每个都有其独特的特点和用户群体。 本文将详细探讨这三个发行版的优缺点,帮助你选择最适合公司服务器的Linux发行版。 1. 什么是Debian? Debian 是一个由志愿者开发的自由操作系统,以其稳定性和可靠性著称。Debian遵循严格的软件包管理标准,拥有庞大的软件库和活跃的社区支持。 1.1 优点 稳定性高:Debian以稳定性著称,适合用于生产环境。 开源:完全开源,没有商业利益驱动,用户可以自由修改和分发。 软件丰富:拥有庞大的软件库,支持多种软件包。 安全性高:注重安全性,定期发布安全更新。 1.2 缺点 更新较慢:为了保持稳定性,更新速度较慢。 企业支持:相对于CentOS和RedHat,企业级支持较少。 学习曲线:对于新手来说,学习曲线较陡峭。 1.3 适用场景 生产环境:适合需要高度稳定性的生产环境。 Web服务器:广泛用于Web服务器和数据库服务器。 嵌入式设备:适用于资源受限的嵌入式设备。 2. 什么是CentOS? CentOS 是一个基于Red Hat Enterprise Linux (RHEL) 构建的免费Linux发行版,旨在提供一个与RHEL高度兼容的稳定环境。CentOS继承了RHEL的许多优点,同时提供了免费的使用体验。 2.1 优点 稳定性高:CentOS基于RHEL构建,继承了RHEL的稳定性。 免费:无需支付许可费用,适合预算有限的公司。 社区支持:拥有庞大的社区支持,遇到问题时可以轻松找到解决方案。 长期支持:每个主要版本提供长达10年的支持周期,不过版本已停止更新维护,推出了滚动发行版。 2.2 缺点 更新较慢:为了保持稳定性,更新速度相对较慢。 新特性较少:不如其他发行版那样频繁引入新特性。 企业支持:虽然有社区支持,但缺乏官方的企业级支持。 2.3 适用场景 企业级应用:适合需要高度稳定性的企业级应用。 Web服务器:广泛用于Web服务器和数据库服务器。 中小型公司:适合预算有限但需要稳定环境的中小型公司。 3. 什么是RedHat Enterprise Linux (RHEL)? RedHat Enterprise Linux (RHEL) 是一个商业化的Linux发行版,提供企业级的支持和服务。RHEL以稳定性和可靠性著称,广泛应用于大型企业和关键业务系统。 3.1 优点 稳定性高:RHEL以稳定性著称,适合用于关键业务系统。 企业支持:提供官方的企业级支持和服务,包括技术支持、培训和咨询。 安全性高:注重安全性,定期发布安全更新。 生态系统:拥有完善的生态系统,支持多种企业级应用和工具。 3.2 缺点 成本较高:需要支付许可费用,适合预算充足的公司。 更新较慢:为了保持稳定性,更新速度相对较慢。 学习曲线:对于新手来说,学习曲线较陡峭。 3.3 适用场景 大型企业:适合预算充足、需要企业级支持的大型企业。 关键业务系统:适合需要最高稳定性和安全性的关键业务系统。 金融和医疗行业:广泛应用于安全性要求高的行业,对稳定性和安全性要求极高。 4. 如何选择合适的发行版? 选择合适的Linux发行版需要考虑以下几个因素: 稳定性:如果你的应用需要高度稳定性,建议选择Debian或CentOS。 企业支持:如果你需要官方的企业级支持和服务,建议选择RedHat Enterprise Linux。 成本:如果你的预算有限,建议选择免费的Debian或CentOS。 新特性:如果你希望使用最新的技术和特性,可以选择CentOS Stream或最新的Debian版本。 社区支持:如果你需要丰富的社区资源和文档,建议选择Debian或CentOS。 5. 结论 每种Linux发行版都有其独特的优势和适用场景。选择合适的发行版需要根据你的具体需求和应用场景来决定。以下是一些建议: 生产环境:选择Debian或CentOS,适合需要高度稳定性的生产环境。 企业级应用:选择RedHat Enterprise Linux,适合需要企业级支持和高稳定性的关键业务系统。 预算有限:选择Debian或CentOS,适合预算有限但需要稳定环境的公司。 开发和测试环境:选择CentOS Stream或最新的Debian版本,适合需要最新特性的开发和测试环境。 希望本文能帮助你更好地理解和选择适合公司服务器的Linux发行版。如果你有任何疑问或需要进一步的帮助,欢迎交流!
-
探索NativePHP:PHP桌面应用开发的新星 在编程的世界里,PHP一直以其强大的Web开发能力而闻名。然而,随着技术的发展,PHP的应用领域也在不断扩展。今天,我要介绍的是一个令人兴奋的新库——NativePHP,它允许开发者使用PHP语言来编写桌面应用程序。 NativePHP简介 NativePHP是一个新兴的PHP库,它利用PHP的强大功能和易用性,为开发者提供了一种全新的桌面应用开发方式。这个库通过与本地操作系统的交互,使得PHP代码能够直接调用系统级的API,从而实现桌面应用的功能。 图片 入门指导 要开始使用NativePHP,你需要确保你的开发环境已经安装了PHP和Composer。 1. 安装NativePHP:你可以通过Composer来安装NativePHP库。在你的项目目录下运行以下命令: composer require nativephp/php2. 创建你的第一个应用:安装完成后,你可以开始编写你的第一个NativePHP应用。以下是一个简单的Hello World示例: require 'vendor/autoload.php'; use NativePHP\Application; $app = new Application(); $app->run();图片 代码案例 让我们来看一个更复杂的例子,展示如何使用NativePHP创建一个简单的窗口应用: require 'vendor/autoload.php'; use NativePHP\Application; use NativePHP\Window; $app = new Application(); $window = new Window(); $window->setTitle('Hello NativePHP'); $window->setSize(800, 600); $window->show(); $app->run();NativePHP优劣势 优势: 易用性:NativePHP继承了PHP的易用性,使得开发者可以快速上手。 跨平台:NativePHP支持Windows、macOS和Linux,使得你的应用可以跨平台运行。 社区支持:虽然是一个新兴库,但NativePHP已经吸引了一些开发者的关注,社区正在逐渐壮大。 劣势: 性能:与C++或Java等语言编写的桌面应用相比,PHP的性能可能会有所不足。 成熟度:作为一个新兴库,NativePHP可能还缺乏一些成熟的功能和工具。 使用方法和场景 NativePHP适用于那些希望使用PHP来开发桌面应用的开发者。它特别适合以下场景: 快速原型开发:如果你需要快速验证一个想法,NativePHP可以帮助你快速构建一个桌面应用原型。 小型到中型项目:对于不需要极高性能的小型到中型桌面应用,NativePHP是一个不错的选择。 注意事项 在使用NativePHP时,开发者需要注意以下几点: 性能优化:由于PHP的性能限制,开发者需要对应用进行性能优化。 安全性:与Web应用相比,桌面应用可能面临不同的安全挑战,开发者需要特别注意。 结尾 亲爱的开发工程师们,NativePHP为我们打开了一个全新的世界,让我们能够用熟悉的PHP语言来探索桌面应用的开发。不要害怕挑战,勇敢地尝试新事物,你会发现编程的乐趣远不止于此。让我们一起,用代码创造未来! 在这篇文章中,我们深入探讨了NativePHP库,并提供了入门指导、代码案例和使用场景。希望这些信息能帮助你在开发旅程中做出明智的选择,并在技术的海洋中乘风破浪。
-
快速部署安装Axigen开源免费的邮件服务器 | 宝塔Linux面板 Axigen ——Axigen可视化安装、配置、部署——Axigen是一款强大的开源邮件服务器和邮件安全解决方案,专注于提供高效的电子邮件服务。它支持灵活的配置和强大的安全特性,为用户提供稳定可靠的邮件交互体验。Axigen提供直观的Web管理界面,简化了邮件服务器的设置和管理过程。下面将为大家介绍在宝塔面板上可视化搭建、配置、部署Axigen系统。 一、Axigen系统的功能作用 1.高效邮件交互: 支持电子邮件的快速传递和交互。 2.安全特性: 提供强大的安全特性,包括加密通信、反垃圾邮件和反病毒功能,确保邮件通信的安全性。 3.灵活配置: 具备灵活的配置选项,使用户能够根据实际需求自定义邮件服务器的规则和设置。 4.直观Web管理: Web管理界面直观易用,简化了邮件服务器的设置和管理,提高了操作效率。 5.多协议支持: 支持多种邮件协议,包括SMTP、POP3和IMAP,满足不同用户对邮件访问的需求。 6.邮件存储与检索: 提供可靠的邮件存储和检索功能,确保用户可以方便地管理和检索邮件内容。 二、Axigen系统的应用场景 企业邮件服务器: 用于企业内部邮件通信,提供高效、安全的邮件服务。 学校和教育机构: 用于学校和教育机构的邮件通信,提供高效、安全的邮件服务。 政府机构: 用于政府机构的邮件通信,提供高效、安全的邮件服务。 三、Axigen系统的使用教程 1.安装Axigen 登录宝塔面板,在软件商店中搜索“Axigen ”点击右侧的“安装”,点击右上角“立即安装”即可安装。 注意:如果没有搜索到应用,点击“更新软件列表”。 图片 图片 图片 2.使用Axigen 配置:Axigen : 点击右下角:安装应用 图片 应用状态: 运行、停止、重启 图片 访问信息: 图片 日志: 图片
-
CSS 让 height 高度属性完美支持 auto 过渡动画 众所周知,有些属性是不支持过渡动画的,比如高度 auto div{ height: 0; transition: 1s } .wrap:hover div{ height: auto }效果如下 图片 要实现过渡效果,之前提供过一个 grid 布局方式,原理是利用 grid 的尺寸单位 1fr 支持过渡的特性 一、calc-size 函数 现在要实现 auto 的过渡效果,需要用到一个全新的 calc-size 函数 图片 看到这个函数,是不是和 calc 比较类似?没错,这是一个可以将一些关键词转换成具体尺寸的函数。 回到上面这个例子,只需要将高度改成 calc-size(auto) ,如下 div{ height: 0; transition: 1s } .wrap:hover div{ height: calc-size(auto) }现在就有过渡效果了(Chrome 129+ 或者 Chrome 127+开启实验属性) 图片 其实除了 auto ,还支持其他尺寸关键词,比如 height: calc-size(min-content) height: calc-size(max-content) height: calc-size(fit-content)也支持混合计算,如下 height: calc-size(auto + 10px) height: calc-size(max-content - 10px)二、interpolate-size 属性 前面的例子,为了兼容之前的浏览器,还必须保留 height: auto 的写法 div{ height: 0; transition: 1s } .wrap:hover div{ height: auto; height: calc-size(auto) }如果是已经存在的项目,可能会有很多地方需要都要改成这种写法,有一定的侵入性。 为此,浏览器还提供了一个 interpolate-size 属性,这个属性可以设置插值计算的规则,有两个关键词 interpolate-size: numeric-only;/*默认值*/ interpolate-size: allow-keywords;其中第一个 numeric-only ,表示仅限数值,也就是只有真实的数值才会有过渡效果(目前浏览器的默认效果),第二个 allow-keywords 表示允许所有关键词,当然包括 auto 属性 有了这个属性,要做的事情就更简单了,只需要在全局 :root 加上这个属性 :root{ interpolate-size: allow-keywords; } div{ height: 0; transition: 1s } .wrap:hover div{ height: auto; }这样就全局生效了,无需在每个地方就加上 calc-size(auto) ,是不是非常方便呢? 图片 三、也支持 detail 展开过渡 大家可能都知道,detail 配合 summary 可以实现展开折叠效果 <div class="con"> <details name="a"> <summary>分组A</summary> <p>这是第一个分组 name="a"</p> </details> <details name="a"> <summary>欢迎</summary> <p>最近 details元素新增了一个name属性</p> </details> <details name="a"> <summary>关注</summary> <p>别看这只是一个普普通通的属性,这可是带来了一个全新的模式,一起了解一下吧</p> </details> </div>效果如下 图片 当然默认展开折叠是没有过渡效果的 利用 calc-size 或者 interpolate-size 也可以很轻松的实现过渡动画,关键实现如下 :root { interpolate-size: allow-keywords; } ::details-content{ content-visibility: visible; height: 0; transition: .3s; overflow: hidden; } details[open]::details-content{ height: auto; }这样就有过渡效果了,非常丝滑 图片 这是一段通用代码,可以用在任何地方 四、现在其实可以用起来了 虽然说兼容性很差(Chrome 129+),但这是一个渐进增强属性,不会影响现有功能,也无需修改已有结构,只需要全局增加这样一行就行了 :root { interpolate-size: allow-keywords; }这样能支持的浏览器自然就会有过渡动画了,完全不用担心是否兼容。 总结一下,其实就两点 calc-size 可以将非数值类型的单位转换成支持过渡的尺寸单位,包括 auto interpolate-size 可以从全局范围允许任意关键词支持过渡
-
Typecho 更换网站域名后必须执行的数据库 SQL 语句 由于 Typecho 系统限定,附件上传后在日志中引用时通常是一个完整的URL地址,这就导致在网站域名发生更替时日志内的附件地址依旧是采用旧域名,从而出现图片等无法显示的问题。我们可以数据库操作中使用SQL语句来进行修改,省去每篇日志重新编辑的麻烦。 以下为部分 SQL 语句,可以在数据库中进行操作。(注意:执行之前请先进行数据备份!!!,数据量大的话有可能出现卡死。) SQL语句作用 修改网站设置里的域名 一键替换文章的域名 将管理员的个人网站进行替换 一键替换评论中的域名 一键替换评论中的名称 一键替换评论中的邮箱 隐藏内容,请前往内页查看详情
-
Web 开发 2025:PHP 依然有一席之地 在 2025 年即将到来之际,许多新晋 Web 开发人员都在思考一个问题:学习 PHP 还有必要吗? PHP 作为 Web 开发领域的元老,几十年来一直占据着主导地位,其影响力不容小觑。超过 75% 的网站都运行在 WordPress、Drupal 和 Joomla 等平台之上,而这些平台正是由 PHP 驱动的。然而,随着新兴编程语言和框架的涌现,PHP 的未来似乎蒙上了一层阴影,学习它的价值也因此受到质疑。 为了帮助您做出明智的决定,我们将深入探讨在 2025 年学习 PHP 的利弊,并分析其未来发展趋势。 1、PHP 的持续相关性 尽管 Python、JavaScript 和 Ruby 等新兴语言来势汹汹,但 PHP 在 Web 开发领域的地位依然不可撼动。尤其是 WordPress 等巨头平台,凭借 PHP 构建,牢牢占据着内容管理系统(CMS)市场的半壁江山。因此,对于专注于网站、博客或电子商务解决方案开发的开发者来说,掌握 PHP 依然是至关重要的技能。 2、框架和工具 现代 PHP 开发早已摆脱了过去的繁琐,这主要归功于 Laravel 等框架的兴起。Laravel 以其优雅的语法和强大的功能著称,为开发者提供了前所未有的便捷体验。Artisan 命令行工具、Eloquent ORM 和 Blade 模板引擎等更是如虎添翼,极大提升了开发效率。类似的,其他流行框架如 Django 和 Ruby on Rails 也采用了类似的设计理念, 致力于为开发者提供高效愉悦的开发体验。 3、PHP 8.x 和性能提升 PHP 并未故步自封,而是不断发展进化。PHP 8.0 及其后续版本的发布,带来了显著的性能提升和安全增强。其中,全新的 JIT 编译器极大提升了代码执行速度, 使 PHP 在与其他语言的竞争中更具优势。此外,PHP 还积极拥抱其他语言,支持与 Node.js 和 Python 等语言的集成,进一步拓展了其应用领域。 4、繁荣的社区和就业机会 PHP 并未故步自封,而是不断发展进化。PHP 8.0 及其后续版本的发布,带来了显著的性能提升和安全增强。其中,全新的 JIT 编译器极大提升了代码执行速度, 使 PHP 在与其他语言的竞争中更具优势。此外,PHP 还积极拥抱其他语言,支持与 Node.js 和 Python 等语言的集成,进一步拓展了其应用领域。 5、PHP 与新语言 虽然 PHP 宝刀未老,但我们也必须承认,一些新兴语言和框架在某些方面已经走在了前面,尤其是在现代 Web 应用开发领域。 JavaScript (Node.js): Node.js 已然成为全栈开发的热门选择,其最大的优势在于允许开发者使用 JavaScript 同时进行前端和后端开发。随着 React、Vue 等 JavaScript 框架的流行,越来越多的开发者投入 Node.js 的怀抱,享受其带来的流畅开发体验。 Python (Django/Flask): Python 以其简洁易读的语法著称,并且在数据科学和人工智能领域得到了广泛应用。这使得 Python 也成为了 Web 开发领域的热门选择。与 PHP 相比,Django 和 Flask 等 Python 框架提供了更强大的功能和更简洁的语法,对新一代开发者更具吸引力。 Go: Go 语言以其超快的速度和简洁的语法而闻名,在高性能应用和微服务领域越来越受欢迎。 尽管 PHP 依然占据一席之地,但学习 JavaScript 或 Python 等语言可以为你打开更多大门,让你在数据科学、机器学习或移动应用开发等领域大展拳脚。 6、您应该在 2025 年学习 PHP 吗? 如果你专注于开发基于 CMS 的项目,或者需要维护现有的 PHP 系统,那么学习 PHP 依然是明智之举。 而如果你立志成为全栈开发者,JavaScript 或 Python 或许是更佳选择。 当然,鱼和熊掌也可兼得。精通 PHP 的同时掌握前端开发技能,无疑会让你在求职市场上脱颖而出。更重要的是,借助 Laravel 等现代框架,PHP 开发体验也丝毫不逊色于其他语言。 PHP 将成为 2025 年最受好评的编程语言 图片 图表说明:PHP 将成为 2025 年最受好评的编程语言 这张图表预测了到 2025 年,PHP 与其他主流编程语言(JavaScript、Python、Java 和 Go)在受欢迎程度、就业机会和 Web 开发领域的主导地位。 1、受欢迎程度(%):该指标反映了开发者对每种语言的使用率和满意度 JavaScript 以 95% 的高比例遥遥领先,Python 紧随其后,占比 92%。 PHP 依然保持着 80% 的强劲势头,表明其与 Web 开发的密切联系。 Java 和 Go 分别以 75% 和 60% 的比例位居其后。 2、就业机会(%):该指标预测了市场对掌握每种语言的开发者的需求程度 PHP 的就业市场份额高达 82%,凸显了其强劲的就业前景,尤其是在 Web 开发和 CMS 平台领域。 JavaScript 和 Python 分别以 90% 和 88% 的比例领先,而 Java 和 Go 也保持稳定,分别占比 80% 和 65%。 3、Web 开发主导地位(%):该指标衡量每种语言在 Web 开发领域的影响力 JavaScript 在前端开发领域占据绝对优势,占比高达 95%。 PHP 作为服务器端开发的传统优势依然存在,占比 85%,这意味着它将继续为大量 Web 应用提供支持,尤其是 WordPress 和 Laravel 等平台。 Python (70%) 和 Java (50%) 在 Web 应用开发中也占有一席之地,而 Go (40%) 正在某些细分领域逐渐崭露头角。 总而言之,这份图表强调了 PHP 在 Web 开发领域的重要地位,它依然是需求旺盛的主流语言之一,对于从事 CMS 平台和遗留系统开发的开发者来说更是不可或缺的技能。 结论 展望 2025 年,PHP 在 Web 开发领域依然占据着不可忽视的地位,尤其是在 CMS 开发和遗留系统维护方面。 当然,为了拓宽职业发展道路,或者进军人工智能、数据科学等前沿领域,学习 JavaScript 或 Python 等语言也是非常有益的。 总而言之,PHP 本身在不断发展进步,加之 Laravel 等现代框架的助力,对于有志于成为 Web 开发者的新人来说,PHP 依然是一项值得学习的宝贵技能,尤其是在 Web 开发领域。
-
守护网站安全:预防SSL证书泄露源站IP的实用指南 引言 在互联网的世界里,即使是小型网站也需关注安全防护。作为一名新手站长,我在最近遭遇了DDoS攻击后,开始深入学习网络安全知识,意外发现SSL证书可能泄露源站IP的风险。为此,我整理了以下内容,旨在提醒同行注意这一潜在威胁,并分享相应的预防措施。如有不足之处,敬请指正。 快速检测:你的源站IP是否已泄露? 推荐使用Censys Search这一在线工具进行快速自测。只需输入你的域名,即可查看源站IP是否已被暴露。 访问链接:Censys Search 若结果显示“无结果”(如图所示),则说明你的源站IP尚未泄露。 无结果示例图片 然而,如果查询结果中出现了你的源站IP,且你已经使用了CDN,那么很不幸,你的源站IP已经泄露。这通常是由于Nginx部署时未设置默认网站,导致直接访问IP的443端口时,Nginx默认返回首个创建站点的SSL证书,从而间接暴露了IP对应的域名。 解决方案:创建默认站点,隐藏源站IP 以下是详细的步骤指南: 1、创建假域名网站 以 default.site 作为假域名,进行网站创建并保存。 创建假域名网站图片 2、自签SSL证书并绑定 利用在线工具(如:toolhelper.cn)为假域名生成自签名SSL证书,并在宝塔等管理面板中填写证书和密钥,开启强制HTTPS。 绑定自签名证书图片 3、设置默认站点 按照下图所示进行默认站点的设置。 设置默认站点图片 4、验证效果 通过无痕标签页访问你的IP,若配置正确,将不再显示你的域名,且可查看自签名证书信息。 验证效果图片 查看自签名证书信息图片 至此,你已成功隐藏源站IP。但为保险起见,建议更换新IP或要求Censys Search删除历史查询结果。 高级防护:可选的进一步措施 对于有更高安全需求的用户,可设置服务器iptables,仅允许CDN服务商的IP段访问服务器。此步骤一般非必需。 其他安全建议 避免自建邮局:使用第三方企业邮箱服务,防止邮件头泄露源站IP。 禁用xmlrpc和REST API(针对WordPress用户):在 functions.php 文件中添加相应代码以提升安全性。 // 禁用 xmlrpc.php add_filter( 'xmlrpc_enabled', '__return_false' ); // 禁用 REST API add_filter('rest_authentication_errors', 'disable_rest_api_except_admins'); function disable_rest_api_except_admins($access) { if (!current_user_can('manage_options')) { return new WP_Error('rest_disabled', __('REST API IS DISABLED'), array('status' => 403)); } return $access; }结语 本文介绍的安全措施虽基础,但能有效防御部分攻击手段。需注意的是,隐藏真实IP并不等同于完全免疫DDoS或CC攻击。若遭遇此类攻击,建议暂时解析到Cloudflare等平台进行缓解,并制定进一步对策。网络安全之路漫长且充满挑战,期待与各位同行共同进步,共同守护我们的网络空间。