分类 服务器 下的文章

因为我有SM.MS账号,所以一直是登录使用。最近才发现SM.MS禁止了游客上传图像,今天试的imgdd上传出现了问题。正好闲来无事整理一下现在可用的免费图床。

图像处理:

https://ic.yunimg.cc/

可选择多种文件尺寸和图像质量,并可在线预览对比图像质量后保存。

https://imagestool.com/webp2jpg-online/

几乎全能图像在线转换压缩处理工具

图床

以下为图床列表,示例图片文件大小为1.01Mb左右(1041 kb,1065532 字节),你可以按F12,在开发人员工具中选择网络-停用缓存,然后按F5刷新页面,查看图片下载速度。

只做收集使用,没有任何利益关系。请注意备份您的数据

- 阅读剩余部分 -

为了防止有奇怪的人不断试你的密码,你可以尝试修改你的Typecho的登录路径。

以下举例,我们将admin修改为SAVq87NqJ9ecUSYl

需要修改的文件夹

  1. 打开网站文件根目录
  2. 重命名文件夹adminSAVq87NqJ9ecUSYl

需要修改的配置

  1. 打开根目录config.inc.php文件,修改大约第12行的
define('__TYPECHO_ADMIN_DIR__', '/admin/');
  1. 打开install.php(如果已经完成网站安装,可忽略),大约第14行已经第405行
define('__TYPECHO_ADMIN_DIR__', '/admin/');

将移上所有的admin修改为SAVq87NqJ9ecUSYl即可。

2025年3月14日更新:

没想到ruanyifeng这周和我写一个话题的内容。

https://www.ruanyifeng.com/blog/2025/03/weekly-issue-341.html

TL;DR

我不认为低代码平台+ai会变香


最近在 X 上又刷到有人吹低代码平台,说它“未来可期”。作为一个写了十几年代码的老程序员,我实在忍不住想吐槽。2025 年 3 月的今天,低代码仍然在炒,但我怎么看都觉得它像个老掉牙的故事——多年前就有人做过,有人退场,活下来的也没多风光。开发者真要为它担心失业?我看未必。

低代码的炒作历史

低代码并不新鲜。十年前就有一堆“零代码”“低代码”平台冒出来,喊着“拖拖拽拽就能做应用”。OutSystems、Mendix 这类老面孔仍在,国内也涌现了不少平台,但看看,有多少已经悄无声息地退出了市场?活下来的,像 Appian 或者钉钉宜搭,日子也不算滋润。我认识一哥们儿用低代码搭了个库存系统,业务一调整就改不动,最后还是找我重写。

根据Gartner 2024年报告,全球低代码市场规模增速已从2021年的23.6%下降至7.2%

Forrester 报告中的结论:低代码项目平均维护成本比传统开发高 2.3 倍。

AI的加入与现实

最近,低代码平台开始加入 AI,宣传上功能似乎变强了,能自动生成 UI、调优逻辑等。听起来很吸引人,但我一想,这不扯吗?“好用”不是一开始就该有的吗?AI 是新添的没错,但作为一个开发工具,基础功能好用才是最基本的要求。加了 AI 就吹得天花乱坠,好像以前不好用是理所当然似的。更别提 AI 生成的内容,改起来还是老样子——要么直接用,要么手动调整,跟十年前改代码没啥两样。AI 救不了低代码的命,最多也就是个噱头。

对开发者的影响

有人说低代码抢初级开发者的饭碗。确实,简单的表单和内部工具能拖几下搞定,初级程序员可能有点压力。但对我这种习惯复杂逻辑的人来说,低代码根本动不了我。那些“80% 简单需求”它能凑合,剩下 20% 的高性能、高定制化活儿,还得靠我们。

低代码还老给我添乱。客户用它搞个半成品,跑来让我修 bug、调性能,比从头写还费劲。我见过公司拿低代码做了个原型,上线后卡得要死,最后还得重构。省了点时间,却留下一堆烂摊子,这算啥“革命”啊?

收费模式的高数题

再说说低代码的收费模式,真是让人无语。免费版的基础功能弱得可怜,比如最多建几个表、连个像样的 API 都不行,想干点正事儿就得掏钱。收费功能层级森严,基本每个平台都有“基础版”“专业版”“企业版”之类的分级,价格一级比一级离谱。举个例子,我试过一个平台,免费版连导出数据都不行,想加个自定义插件,得升到每月几百块的专业版。更别提什么“无限用户”“高级支持”了,全锁在最贵的套餐里。这哪是工具啊,简直是圈钱的套路机器。

未来?别指望它翻天

低代码的粉丝总爱说未来会更智能,靠 AI 翻身。我听了只想笑。AI 是牛,但低代码加了 AI 就能写分布式系统?能优化算法?我看悬。这么多年,低代码的套路我都看透了:炒一波概念,忽悠一波企业用户,然后慢慢淡出视线。活下来的,要么靠大厂撑腰(比如微软的 Power Apps),要么苟在小众市场,风光不到哪去。

什么“低代码 + 传统开发共存”的说法,我也懒得信。企业用低代码无非图快图便宜,可业务一复杂,它就成鸡肋,重写成本还更高。我宁可从头写个扎实的系统,省得回头返工。

结论:低代码的未来

在我眼里,低代码就是个“伪命题”。炒了这么多年,没真干掉谁,也没见哪个平台成了行业霸主。加个 AI 也救不了它,免费功能鸡肋,收费还一套一套的。开发者要失业?除非你只会写“Hello World”。对我来说,低代码顶多是个玩具,玩玩行,想靠它吃饭,我看悬。

所以,别被低代码的宣传唬住了。想在这行混好,还是老老实实练功——算法、架构、DevOps,这些真本事才是我们的护身符。低代码?让它继续炒吧,我码我的代码。

在当今的网络环境中,静态网站托管服务变得越来越流行,尤其是对于开发者和博客作者来说。本文将介绍三种流行的免费静态网站托管服务:Vercel、GitHub Pages 和 Cloudflare Pages,并对它们的免费服务进行比较。

Vercel

Vercel 是一个专注于前端开发的托管平台,提供快速、可靠的静态网站托管服务。它的主要特点包括:

  • 全球 CDN:Vercel 在全球范围内拥有多个 CDN 节点,确保网站的快速加载。
  • 自定义域名:支持用户使用自定义域名,并提供自动部署功能。
  • 构建限制:每月带宽限制为 100GB,构建次数和构建时长也有限制,但整体上对个人用户来说相对宽松。
  • 速度:在国内访问速度较快,通常比 GitHub Pages 和 Cloudflare Pages 更具优势。

GitHub Pages

GitHub Pages 是 GitHub 提供的静态网站托管服务,适合开发者和开源项目。其特点包括:

  • 稳定性:作为全球最大的代码托管平台,GitHub Pages 的稳定性相对较高。
  • 自定义域名:支持用户使用自定义域名。
  • 访问速度:在国内访问速度一般,偶尔会出现访问问题。
  • 限制:每月流量限制为 100GB,单个文件大小限制为 100MB,仓库大小建议少于 5GB。

Cloudflare Pages

Cloudflare Pages 是 Cloudflare 推出的静态网站托管服务,旨在提供快速和安全的网站托管。其特点包括:

  • 全球 CDN:同样拥有全球 CDN 节点,确保快速加载。
  • 自定义域名:支持最多 10 个自定义域名。
  • 构建限制:每月可构建 500 次,文件数量限制为 2万,单个文件大小不得超过 25MB。
  • 速度:与 GitHub Pages 相似,但在国内的访问速度和稳定性一般。

免费服务对比

在比较这三种服务时,可以从以下几个方面进行分析:

  1. 访问速度

    • Vercel 的访问速度在国内表现最佳,通常比 GitHub Pages 和 Cloudflare Pages 更快。
    • GitHub Pages 和 Cloudflare Pages 的速度相似,但 GitHub Pages 的稳定性更好。
  2. 自定义域名支持

    • 三者均支持自定义域名,但 Cloudflare Pages 对域名数量有上限(最多 10 个)。
  3. 构建和流量限制

    • Vercel 每月带宽限制为 100GB,构建次数和时长有限制。
    • GitHub Pages 每月流量限制为 100GB,文件和仓库大小也有相应限制。
    • Cloudflare Pages 每月可构建 500 次,文件数量和大小限制较为严格。
  4. 适用场景

    • Vercel 适合需要快速加载和高稳定性的个人博客或项目。
    • GitHub Pages 适合开源项目和开发者,尤其是对百度收录有需求的用户。
    • Cloudflare Pages 适合需要使用 Cloudflare CDN 的用户,但在国内的表现可能不如 Vercel。

结论

综合来看,Vercel 是一个非常适合个人博客和前端项目的托管平台,尤其是在国内访问速度方面表现突出。GitHub Pages 则是一个稳定的选择,适合开源项目和开发者。Cloudflare Pages 虽然提供了强大的 CDN 支持,但在国内的访问速度和稳定性相对较弱。根据个人需求选择合适的平台,将有助于提升网站的访问体验。


如果你想试一下你所在的地区访问各服务的速度,你可以使用以下数据

无域名,平台部署测试域名访问

域名访问,由Cloudflare进行DNS解析,无CDN

以上引用内容来自:https://github.com/hoytzhang/static-pages-test
你可以使用 https://www.itdog.cn/http/ 来进行访问对比

在现代 Web 应用的交互场景中,数据删除操作是用户与系统频繁互动的功能之一。当用户轻松点击 “删除” 按钮时,背后实则是一系列环环相扣、复杂精妙的技术流程在运转。而且,多数情况下,内容并不会真正从服务器上消失,只是被标记为不可见,依然留存在服务器的数据仓库中。本文将深入剖析这一过程及其背后的多重考量。

一、前端触发:点击背后的初始响应

(一)前端事件捕获

当用户在网站界面点击 “删除” 按钮时,前端的 JavaScript 脚本迅速响应,如同训练有素的哨兵。它会利用事件监听机制,如 addEventListener 方法,精准捕捉这一点击事件。为了避免用户误操作,通常会弹出确认对话框,以友好的提示询问用户是否真的要删除该项内容。这个对话框就像是一道安全闸门,为可能的误删操作设置了一道防线。

(二)请求发送

若用户确认删除,前端会借助 AJAX(Asynchronous JavaScript and XML)或者 Fetch API 发起一个 HTTP 请求。按照 RESTful API 的设计规范,这个请求一般采用 DELETE 方法。请求中会携带要删除资源的唯一标识符,如数据库中的主键 ID 或者 UUID,它就像是一把钥匙,能让后端准确找到要处理的数据。

二、后端承接:请求的接收与精细处理

(一)路由匹配

后端服务器接收到前端发送的请求后,首先会根据请求的 URL 和 HTTP 方法进行路由匹配。这就好比在一个大型图书馆中,根据书籍的分类标识和借阅规则,快速定位到负责处理该请求的具体函数。通过精确的路由匹配,请求被导向相应的处理逻辑。

(二)请求验证

在正式处理请求之前,后端会进行严格的验证工作。这包括用户身份验证,通过检查用户的登录凭证、令牌等信息,确保请求来自合法的用户;同时还会进行数据验证,检查请求中携带的数据格式是否正确、是否符合业务规则。只有通过这一系列严格的验证,请求才会被允许继续处理。

(三)核心删除操作

这是整个删除流程的关键环节。虽然用户直观感觉数据已被删除,但实际情况存在两种不同的处理方式:

  • 逻辑删除:这是更为常见的处理方式。后端会在数据库中对数据进行标记,通常是通过设置一个名为 is_deleted 的字段。将该字段的值设置为特定标识(如 true1),表示数据已被删除。此时,数据在物理上仍然完整地保留在数据库中,只是在后续的查询操作中,会通过 SQL 语句的 WHERE 条件过滤掉这些标记为已删除的数据,从而对普通用户不可见。
  • 物理删除:直接从数据库中永久移除数据。这种方式相对较少使用,尤其是在需要考虑数据恢复的业务场景下。因为一旦执行物理删除,数据将难以恢复,可能会给业务带来不可挽回的损失。

(四)后续操作跟进

删除操作完成后,后端可能会执行一些后续操作来确保系统的一致性和可追溯性。例如,更新缓存以保证数据的实时性,避免用户看到旧的数据;同时记录审计日志,详细记录删除操作的执行者、执行时间、被删除的数据等信息,为后续的数据分析和安全审计提供依据。

三、结果反馈:后端到前端的信息传递

(一)响应状态返回

后端完成处理后,会返回一个 HTTP 状态码给前端。例如,返回 200 OK 表示操作成功;若出现错误,会返回相应的错误状态码,如 400 Bad Request 表示请求参数有误,403 Forbidden 表示用户没有权限进行该操作等。这个状态码就像是一个信号旗,向前端传达操作的基本结果。

(二)详细反馈信息

除了状态码,后端还会返回详细的消息,进一步告知用户删除操作的具体结果。例如,“删除成功” 或者 “由于 XX 原因,删除失败” 等信息,让用户清楚了解操作的最终情况。
四、前端呈现:用户体验的优化与更新

(一)界面更新

前端接收到后端的响应后,会根据响应状态对用户界面进行更新。如果删除操作成功,通常会从视图中移除已标记为删除的数据项,让用户直观看到数据已被删除。这一过程就像是舞台上的演员退场,界面变得更加简洁。

(二)用户体验提升

为了提升用户体验,前端会采取一系列优化措施。比如,在请求发送过程中显示加载指示器,让用户知道系统正在处理请求,避免用户因长时间等待而产生焦虑;操作完成后提供确认消息,给予用户明确的反馈;甚至还可以提供可选的撤销操作,允许用户在一定时间内反悔,恢复刚刚删除的数据,增加用户操作的灵活性和安全感。

五、数据留存:不消失的背后逻辑

(一)数据恢复保障

逻辑删除的方式为数据恢复提供了便利。在用户误操作删除数据后,可以通过简单的操作,如将 is_deleted 字段的值改回原来的状态,轻松恢复数据。这就像是给数据加了一个 “后悔药”,避免了因误删造成的信息丢失,保障了数据的安全性和完整性。

(二)数据分析与合规审计

保留数据对于企业的数据分析和审计工作具有重要意义。通过对历史数据的分析,企业可以了解用户行为、业务趋势等信息,为决策提供有力支持。同时,在一些行业中,法规要求企业保留一定期限的业务数据,以便进行合规审计。逻辑删除可以满足这一需求,确保企业在不影响正常业务操作的前提下,能够顺利通过审计。

(三)存储性能优化

逻辑删除可以减少频繁的物理删除操作,从而提高数据库的性能。物理删除操作会导致数据库产生碎片,影响数据的读写效率。而逻辑删除只是对数据进行标记,不会对数据库的物理结构造成实质性的改变,减少了数据库维护的成本和复杂度。

六、安全防线:保障删除操作的可靠性

(一)身份验证与授权管理

在实现删除功能时,确保只有经过身份验证的用户才能进行操作是至关重要的。通过用户登录系统时的身份验证机制,如用户名和密码、OAuth 认证等,确定用户的合法性。同时,根据用户的角色和权限,精确控制用户能够删除的数据范围,防止越权操作。

(二)CSRF 攻击防护

为了防止跨站请求伪造(CSRF)攻击,系统会使用 CSRF 令牌。在用户登录或页面加载时,服务器会生成一个唯一的 CSRF 令牌,并将其嵌入到页面中。当用户发起删除请求时,前端会将该令牌一并发送给后端。后端会验证该令牌的有效性,只有令牌合法的请求才会被处理,从而确保请求的来源是合法的,避免恶意网站伪造请求。

(三)确认机制强化

在用户执行删除操作之前,提供明确的确认提示是防止误删除的有效手段。除了前端弹出的确认对话框,还可以在后端进行二次确认,确保用户的删除意图是真实的。例如,要求用户输入密码或验证码等额外信息,进一步提高删除操作的安全性。

七、总结

当我们在网站上轻点删除按钮时,背后隐藏着一个复杂而精密的技术世界。尽管表面上数据似乎已被删除,但实际上它往往只是被标记为不可见,仍然静静地存留在服务器上。这种逻辑删除的方式为数据管理带来了极大的灵活性,既避免了误删除带来的困扰,又满足了数据恢复、分析和审计等多方面的需求。通过深入理解删除操作背后的机制,开发者可以更好地设计和实现安全、高效的删除功能,为用户提供更加优质的服务体验。希望本文能为你的开发实践提供有价值的参考,让你在处理数据删除问题时更加得心应手。

  • INTERNXT

https://internxt.com/temporary-email

  • TEMPAIL

https://tempail.com/

  • AdGuard Temp Mail

https://adguard.com/en/adguard-temp-mail/overview.html

  • Tempmail

https://temp-mail.io/en

  • Email on Deck

https://www.emailondeck.com/

  • TempMail.so

https://tempmail.so/

  • @mail.tm

https://mail.tm/en/

  • Temp Mail & 10 10 min mail

https://temp-mail.org/en/

https://temp-mail.org/en/10minutemail

  • Temp Mail

https://tempmailto.org/

  • guerrillamail

https://www.guerrillamail.com/

  • inboxes

https://inboxes.com/

TL;DR

通过vercel第三方库来运行php程序

效果展示

展示不了一点,我发现部署几天后开始变得非常卡,不知道为啥

所以我推荐你每天定时deploy一下,会好很多

一,注册需要的账号

你需要注册以下账号

  • github
  • vercel
  • 一个免费或者你自己搭建的mysql数据库
关于数据库,不推荐使用国内的免费数据库,因为vercel访问太慢了
或许你可以尝试db4free,或者一些免费空间提供的数据库

二,操作步骤

1. 创建git仓库

在github创建一个仓库,注意这个仓库需要是private的,也就是私密的仓库。然后clone到本地。下面为了方便,假设仓库名为blog

2. 下载typecho

下载地址:https://typecho.org/download

3. 把typecho解压到仓库文件夹内

此时文件应该存放在根目录

4. 新建api文件夹,然后在api文件夹下创建index.php文件

其中index.php文件的内容如下

<?php
$file= __DIR__ . '/..'.$_SERVER["PHP_SELF"];

if(file_exists($file))
{
   return false;
}
else
{
    require_once __DIR__ . '/../index.php';
}
#echo $_SERVER["PHP_SELF"];

5. 在仓库中创建vercel.json

内容如下

{
  "functions": {
    "api/index.php": {
      "runtime": "vercel-php@0.7.3"
    }
  },
  "routes": [{ "src": "/(.*)", "dest": "/api/index.php" }]
}

6. 在根目录创建config.inc.php

内容如下

<?php
/**
 * Typecho Blog Platform
 *
 * @copyright  Copyright (c) 2008 Typecho team (http://www.typecho.org)
 * @license    GNU General Public License 2.0
 * @version    $Id$
 */

/** 开启https */
define('__TYPECHO_SECURE__',true);

/** 定义根目录 */
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));

/** 定义插件目录(相对路径) */
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');

/** 定义模板目录(相对路径) */
define('__TYPECHO_THEME_DIR__', '/usr/themes');

/** 后台路径(相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');

/** 设置包含路径 */
@set_include_path(get_include_path() . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . '/var' . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__);

/** 载入API支持 */
require_once 'Typecho/Common.php';

/** 程序初始化 */
Typecho_Common::init();

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_Mysql', 'typecho_');
$db->addServer(array (
  'host' => '数据库地址',
  'user' => '数据库用户',
  'password' => '数据库密码',
  'charset' => 'utf8mb4',
  'port' => '3306',
  'database' => '数据库名',
  'engine' => 'MyISAM',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

7. 注释掉会阻挡操作的内容

打开根目录下的install.php文件,注释或者删除773-775行,注释的内容大概如下。

    // if (!$writeable) {
        // $errors[] = _t('上传目录无法写入, 请手动将安装目录下的 %s 目录的权限设置为可写然后继续升级', $uploadDir);
    // }
这里如果没有删除,可能会无法初始化数据库

8. 上传代码,在vercel中编译,注意提前绑定域名

9. 第一次打开会报错

提示Database Query Error。这时你需要在你的域名||vercel提供的免费域名后添加/install.php,然后按照步骤操作。

这里如果你没有执行第7步的操作,可能会报错,建议修改之后重新提交

三,注意事项

  1. 过长的等待时间会触发vercel报错,提示This Serverless Function has timed out. 这时你或许可以考虑更换数据库
  2. 注意看第7点
  3. 一些函数官方说支持,但是会有奇怪的问题
  4. 上传二进制文件和直接修改文件的功能就别想了,在仓库中操作吧
  5. 暂时想不到了