Kinsta-博客中文翻译-十一-

Kinsta 博客中文翻译(十一)

原文:Kinsta Blog

协议:CC BY-NC-SA 4.0

PHP 7.1.0 的新特性

原文:https://kinsta.com/blog/php-7-1-0/

截至 12 月 1 日,PHP 的最新版本 PHP 7.1.0 现已发布。在将 PHP 从 5.6 直接升级到 7.0 并大幅提高速度之后,PHP 现在专注于核心语言特性,这将帮助我们所有人编写更好的代码。在这篇文章中,我将看看 PHP 7.1.0 的主要新增内容和特性。你也可以查看官方的变更日志

更新: PHP 8.1(正式发布)现已对所有 Kinsta 客户端开放。Kinsta 不支持 PHP 7.1.0。请注意,我们支持 PHP 版本 8.0 和 8.1。

PHP 7.1.0 is now focusing on core language features that will help us write better code.Click to Tweet

可空类型

人们谈论最多的一个新增功能将是非常缺乏的可空类型。变量已经可以返回某种类型的值或者 null,你也可以设置一个函数的参数为 null。PHP 7.1 将支持 null 作为函数的可定义返回类型。

我们来看看这是什么意思。这里有一些你可能在 good ol' 7.0 中熟悉的返回类型。

function getNumber(): int  {
    return 6;
}

// Returns an integer so all is well

function getNumber(): int  {
    return 'six';
}

// Returns a string, will throw an error when called

在类型声明前添加问号将允许 null 作为返回值。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

function getNumber(): ?int  {
    return null;
}

// Null is allowed, so all is well

参数类型提示的语法完全相同。在下面的例子中

function showColor(?string $color) {
    if ($color) {
        echo $color;
    }
}

showColor( '#ff9900' );
// Works just fine, a string has been given

showColor( null );
// Works fine, null is allowed

我喜欢这个特性,因为我们的代码越有描述性,我们就能更好地一起工作。类型声明对于在任何问题发生之前将其清除也是非常有用的,这是一个双赢的局面。

php 7.1.0 changes

Iterable 和 Void 返回

当我们谈到返回类型时,有两个新的类型:void。iterable Void 可以用于没有返回值的函数。

function perform_a_job() : void {
    return;
    // This is fine, it returns null
}

function perform_a_task() : void {
    // This is also fine, it returns null
}

function perform_another_task() : void {
    return true;
    // This will return an error since it is not void
}

这是使我们的代码自文档化的另一种方式。不返回任何东西的函数是否应该被使用还有待讨论,但是我们至少有一个规范的机制来指示这种行为。

Iterable 表示可以遍历的值,就像数组一样。iterable 的附加价值在于,我们可以用它来指示实现迭代器接口的对象。

function fonc01(iterable $data) {
    foreach ($data as $key => $val) {
        //....
    }
}

fonc01(new SplFixedArray(5));
// Works kist fine, SplFixedArray implements Iterator
// See http://php.net/manual/en/class.splfixedarray.php

(感谢帕斯卡·马丁举了这个例子)

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

多重捕获异常处理

到目前为止,如果 try 块包含多个异常的可能性,我们需要分别处理它们,即使它们使用相同的逻辑。PHP 7.1 通过允许一次捕获多个异常解决了这个问题。

try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
}

现在可以在列表中使用键了

虽然list()看起来像一个函数,但它实际上是一个语言构造,就像array()一样。它用于一次性分配变量列表。

到目前为止,它只能用于从 0 开始的数字数组。从 7.1.0 开始,你可以使用带有list()的键,或者你可以使用它的简写:[]。看看下面的例子,由 php.net 的提供。

$data = [
    ["id" => 1, "name" => 'Tom'],
    ["id" => 2, "name" => 'Fred'],
];

// list() style
list("id" => $id1, "name" => $name1) = $data[0];

// [] style
["id" => $id1, "name" => $name1] = $data[0];

// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
    // logic here with $id and $name
}

// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
    // logic here with $id and $name
}

更多的负字符串偏移量

PHP 7.1.0 增加了对负字符串偏移量的更广泛支持。您甚至可以将负偏移与字符串一起使用[]。看看这有多棒:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

$name = "Daniel";
echo "My name ends in an '$name[-1]'. Nice!";

像 strpos 这样的核心函数正在更新,这将使我们的代码更短更清晰。

数字运算符和格式错误的数字

事实上,你可以在 PHP 中做5 + "3",它将评估为 8,这被视为对一些人的祝福,对另一些人的诅咒。当你意识到5 + "three"的计算结果为 5 时,问题就更严重了。

我认为这是极其草率的,会导致各种各样的问题。PHP 7.1.0 试图给这种情况带来一些理智,当你有一些畸形的东西时,它会警告你,就像第二个例子。第一个将继续工作,因为 PHP 将字符串 3 转换为数字 3。第二个会发出通知或警告。

其他 PHP 7.1.0 的小补充

除了无数的小错误修复,还有一些小功能至少应该提到:

  • 添加了 SHA3 固定模式算法
  • 添加了 is_iterable()函数
  • 实现闭包::fromCallable
  • 添加对 HTTP/2 服务器推送的支持
  • MCrypt 已被弃用,将在下一版本中删除

进一步阅读

我喜欢 PHP 的发展方向——一种比以前更结构化、类型更紧密的语言。现在我们已经收到了 7.0 的巨大速度更新,是时候关注这些方面了。如果你有兴趣学习更多关于 PHP 的知识,总的来说,我有一个最好的 PHP 教程列表,如果你想学习更多关于 7.1.0 的知识,我可以热情地推荐以下资源:

另外,请务必查看 PHP 7.1.0 与 PHP 7 和 PHP 5 的这些性能基准。关于 PHP 7.1.0 的源代码下载,请访问 PHP 下载页面。

针对 Kinsta 用户的 PHP 7.1、7.2 和 7.3

最新版本的 PHP 7.1、7.2 和 7.3 已经提供给所有的 Kinsta 用户。只需单击一下,就可以在 MyKinsta 仪表板的 Tools 下轻松启用它。

kinsta php 7.1

Kinsta PHP 7.1


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 7.2 的新特性(现已推出)

原文:https://kinsta.com/blog/php-7-2/

PHP 7.2 已经于 11 月 30 日正式发布。这个版本有新的特性、功能和改进,允许我们编写更好的代码。在本帖中,我们将介绍 PHP 7.2 中一些最有趣的语言特性。

更新: PHP 8.0 现已对所有 Kinsta 客户端开放。

您可以在意见征询页面上看到完整的变更列表。

核心改进

参数类型声明

从 PHP 5 开始,我们被允许在函数声明中指定期望被传递的参数类型。如果给定值的类型不正确,PHP 就会抛出一个错误。

参数类型声明(也称为类型提示)指定预期传递给函数或类方法的变量的类型。

这里有一个例子:

class MyClass {
	public $var = 'Hello World';
}

$myclass = new MyClass;

function test(MyClass $myclass){
	return $myclass->var;
}

echo test($myclass);

在这段代码中,测试函数期望 MyClass 的实例。不正确的数据类型会导致以下致命错误:

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of **MyClass**, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

因为 PHP 7.2 类型提示可以和对象数据类型一起使用,并且这种改进允许声明一个通用对象作为函数或方法的参数。这里有一个例子:

class MyClass {
	public $var = '';
}

class FirstChild extends MyClass {
	public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
	public $var = 'My name is John';
}

$firstchild = new FirstChild;
$secondchild = new SecondChild;

function test(object $arg) {
	return $arg->var;
}

echo test($firstchild);

echo test($secondchild);

在这个例子中,我们调用了测试函数两次,每次调用传递不同的对象。这在以前的 PHP 版本中是不可能的。

Docker commands

Testing type hints with PHP 7.0 and PHP 7.2 in Docker

对象返回类型声明

如果参数类型声明指定函数参数的预期类型,则返回类型声明指定返回值的预期类型。

返回类型声明指定函数预期返回的变量类型。

从 PHP 7.2 开始,我们被允许对对象数据类型使用返回类型声明。这里有一个例子:

class MyClass {
	public $var = 'Hello World';
}

$myclass = new MyClass;

function test(MyClass $arg) : object {
	return $arg;
}

echo test($myclass)->var;

以前的 PHP 版本抛出了以下致命错误:

Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

当然,在 PHP 7.2 中,这段代码呼应了‘Hello World’

参数类型扩大

PHP 目前不允许子类和它们的父类或接口之间的参数类型有任何差异。那是什么意思?
考虑以下代码:

<?php
class MyClass {
	public function myFunction(array $myarray) { /* ... */ }
}

class MyChildClass extends MyClass {
	public function myFunction($myarray) { /* ... */ }
}

这里我们省略了子类中的参数类型。在 PHP 7.0 中,这段代码会产生以下警告:

Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

从 PHP 7.2 开始,我们可以在不破坏任何代码的情况下省略子类中的类型。这个提议将允许我们升级类来使用库中的类型提示,而不需要更新所有的子类。

列表语法中的尾随逗号

数组中最后一项后的尾随逗号是 PHP 中的有效语法,有时鼓励使用以便轻松添加新项,避免因缺少逗号而导致的解析错误。从 PHP 7.2 开始,我们被允许在分组名称空间中使用尾随逗号。

查看列表语法中的结尾逗号,以更好地了解 RFC 和一些代码示例。

安全改进

密码哈希中的 Argon2

Argon2 是一种强大的哈希算法,被选为 2015 年密码哈希竞赛的获胜者,PHP 7.2 将为我们带来它,作为 Bcrypt 算法的安全替代方案。
新的 PHP 版本引入了 PASSWORD_ARGON2I 常量,现在可以在 password_* 函数中使用:

password_hash('password', PASSWORD_ARGON2I);

与仅采用一个成本因子的 Bcrypt 不同,Argon2 采用三个成本因子,区别如下:

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

  • 一个内存开销,它定义了哈希过程中应该消耗的 KiB 数(默认值为 1<10,或 1024 KiB,或 1 MiB)
  • 定义哈希算法迭代次数的时间成本(默认为 2)
  • 一个并行因子,它设置散列过程中将使用的并行线程的数量(默认为 2)

三个新常数定义了默认成本系数:

  • PASSWORD _ argon 2 _ DEFAULT _ MEMORY _ COST
  • PASSWORD _ argon 2 _ DEFAULT _ TIME _ COST
  • PASSWORD _ argon 2 _ DEFAULT _ THREADS

这里有一个例子:

$options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2];
password_hash('password', PASSWORD_ARGON2I, $options);

更多信息见 Argon2 密码散列

作为 PHP 核心的一部分

从 7.2 版本开始,PHP 将钠库包含到核心中。libna是一个跨平台和跨语言的库,用于加密、解密、签名、密码散列等等。
该图书馆之前可通过 PECL 获得。
有关 lib 钠函数的文档列表,请参考库快速入门指南
参见 PHP 7.2:第一个将现代密码学加入其标准库的编程语言

贬值

以下是 PHP 7.2 不推荐使用的函数和特性的列表,这些函数和特性将在 PHP 8.0 之前删除:

PHP 5.1 中的 __autoload 函数已经被 spl_autoload_register 取代。现在在编译过程中遇到它时会抛出一个弃用通知。

当抛出非致命错误时,在局部范围内创建 $php_errormsg 变量。既然 PHP 7.2 应该用 error_get_lasterror_clear_last 代替。

create_function() 允许使用生成的函数名、参数列表和作为参数提供的主体代码创建函数。由于安全问题和糟糕的性能,它已被标记为不推荐使用,而鼓励使用附件。

设置为非零值的 mbstring.func_overload ini 设置已被标记为不推荐使用。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

(未设置)cast 是一个总是返回 null 的表达式,被认为是无用的。

parse_str() 如果提供了第二个参数,则将查询字符串解析为数组,如果没有使用,则解析为局部符号表。由于安全原因,不鼓励在函数范围内动态设置变量,所以使用没有第二个参数的 parse_str()会抛出一个反对通知。

gmp_random() 被认为是平台相关的,将被弃用。用 gmp_random_bits()gmp_random_rage() 代替。

each() 用于迭代数组,很像 foreach() ,但是 foreach() 更好,有几个原因,包括快 10 倍。现在,循环中的第一次调用将抛出弃用。

assert() 函数检查给定的断言,如果结果为,则采取适当的措施。带字符串参数的 assert()的用法现在已被否决,因为它打开了一个 RCE 漏洞。 zend.assertion ini 选项可用于阻止断言表达式的求值。

$errcontext 是一个数组,包含错误生成时存在的局部变量。它作为最后一个参数传递给用函数 set_error_handler() 设置的错误处理程序。

PHP 7.2 对 WordPress 用户意味着什么?

据官方 WordPress 统计页面显示,截至本文撰写之时,只有 19.8%的 WordPress 用户升级到了 PHP 7。而只有 5%的人在使用 PHP 7.1 。您可以看到,超过 40%的大多数用户仍然在运行 PHP 5.6。更可怕的是,超过 39%的用户正在使用不支持的 PHP 版本。截至 2016 年 12 月,WordPress.org 实际上将他们的官方推荐从 PHP 5.6 升级到 PHP 7 或更高版本。

WordPress PHP 7.1 stats

WordPress PHP 7.1 stats

从性能的角度来看,上面的数字尤其令人沮丧,因为 PHP 7 已经显示出明显更快。以下是一些统计数据:

  • 官方 PHP 基准测试表明,与 PHP 5.6 相比,PHP 7 允许系统每秒执行两倍的请求,而延迟几乎是 5.6 的一半。
  • Christian Vigh 也发表了一篇 PHP 性能对比文章,他发现 PHP 5.2 比 PHP 7 慢 400%。

我们还在 2018 年用 PHP 5.6 vs PHP 7 vs HHVM 运行了自己的性能基准。与上面的基准类似,我们看到 PHP 7.2 每秒执行的事务(请求)几乎是 PHP 5.6 的三倍。

WordPress benchmarks

WordPress benchmarks

  • WordPress 4.9.4 PHP 5.6 基准测试结果:49.18 请求/秒
  • WordPress 4.9.4 PHP 7.0 基准测试结果:133.55 请求/秒
  • WordPress 4.9.4 PHP 7.1 基准测试结果:134.24 请求/秒
  • WordPress 4.9.4 PHP 7.2 基准测试结果 : 148.80 req/sec?
  • HHVM 基准测试结果:144.76 请求/秒

许多更新缓慢,仅仅是因为测试所有新的第三方插件和主题以确保它们正常运行需要时间。但是很多时候,归结起来就是他们还没有做。不确定你运行的是什么版本的 PHP?最简单的检查方法之一是使用类似于 Pingdom 或 Google Chrome Devtools 的工具。第一个 HTTP 请求头通常会显示版本。

Check version of PHP

Check version of PHP

这依赖于主机不修改 X-Powered-By 报头值。如果他们这样做了,你可能看不到你的 PHP 版本,在这种情况下,你需要通过 FTP 上传一个文件。或者你也可以主动去问主人。

更新到 PHP 7.2

PHP 7.2 还没有完全发布,但是一旦发布,你就可以开始测试了。你可以在本地测试你的 WordPress 站点,或者在像 Docker 这样的环境中检查你的脚本,它允许你从命令行测试不同版本的 PHP。

或者,您可以利用一个临时环境,因为这将更类似于一个实际的生产站点。12 月 4 日,Kinsta 向所有客户端发布了 PHP 7.2。只需轻轻一点,您就可以轻松创建一个临时环境

Test PHP 7.2 in staging environment

Test PHP 7.2 in staging environment

只需点击一下“工具”下的 PHP 引擎,你就可以开始测试,以确保你的第三方插件和主题的兼容性。一旦你确认一切正常,你可以将你的生产站点升级到 PHP 7.2 或者将你的临时站点升级到 live

Change to PHP 7.2

Change to PHP 7.2

结论

准备好转 PHP 7.2 了吗?希望现在您至少已经过渡到 PHP 7 了。如果您还没有,现在是开始测试的好时机。所以,升级你的脚本,检查你的代码,让我们知道你对 PHP 7.2 的第一印象。

推荐阅读:PHP 死了


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 7.3 的新特性(现在可以在 Kinsta 获得)

原文:https://kinsta.com/blog/php-7-3/

截止 2018 年 12 月 6 日,最新最棒的版本,PHP 7.3 来了!随之而来的是新的有用的特性、功能、弃用、大量的错误修复和性能提升。 PHP 7.3 现在在 MyKinsta 仪表板中对所有 Kinsta 客户端可用。🤘

更新: PHP 8.1(正式发布)现已对所有 Kinsta 客户端开放。Kinsta 不再支持 PHP 7.3。请注意,我们支持 PHP 8.0 和 8.1 版本。

在本帖中,我们将概述我们个人认为最相关的特性和变化。但是你可以在 PHP 7.3 升级说明PHP 7.3 征求意见中查看完整的特性、变化和错误修复列表。

The latest version, PHP 7.3 is now available to all Kinsta clients! 🤘Click to Tweet

PHP 7.3 有什么新特性?

在本帖中,我们将介绍 PHP 7.3 的以下变化:

灵活的 Heredoc 和 Nowdoc 语法

这可能是 PHP 7.3 带来的最相关的改进之一,我们认为它值得更多的关注。因此,在深入 PHP 7.3 heredoc/nowdoc 的变化之前,我们将提供一个这个有用的核心特性的快速概述。如果您已经对 nowdoc 和 heredoc 很有信心,请放心地跳到 PHP 7.3 的变化。

heredoc 和 nowdoc 语法概述

heredoc 语法提供了一种添加大量文本的方法,而不需要转义诸如双引号之类的东西。一个 heredoc 以<<<开头,后面跟着一个标记,以同样的标记结尾,后面跟着一个分号。这里有一个例子:

print <<<EOT
Heredoc text behaves just like a double-quoted string, without the double quotes.
EOT;

nowdoc 的行为很像 heredoc,但有一些例外:

  • 标识符用单引号(<<<'EOT')括起来
  • 在 nowdoc 中不进行任何解析

以下是 nowdoc 的一个示例:

print <<<'EOT'
Nowdocs are to single-quoted strings what heredocs are to double-quoted strings.
EOT;

Heredocs 和 nowdocs 使用相同的规则来管理结束标记的使用:

  1. 结束标记必须从该行的第一列开始
  2. 标记必须遵循与 PHP 中任何其他标签相同的命名规则:它必须只包含字母数字字符和下划线,并且必须以非数字字符或下划线开头。

PHP 手册警告:

非常重要的是要注意,带有结束标识符的行不能包含其他字符,除了分号(;).这尤其意味着标识符不能缩进,分号前后不能有任何空格或制表符。认识到结束标识符前的第一个字符必须是本地操作系统定义的换行符也很重要。这是 UNIX 系统上的\n,包括 macOS。结束分隔符后面还必须跟一个换行符。

PHP 7.2 无效语法:

class foo {
    public $bar = <<<EOT
    bar
    EOT;
}
// Identifier must not be indented

PHP 7.2 有效语法:

class foo {
    public $bar = <<<EOT
bar
EOT;
}

简而言之,在 PHP 7.2 中:

  • 结束标记不能缩进
  • 带有结束标记的行不能包含空格或制表符之类的字符
  • 结束标记前的第一个字符必须是换行符
  • 结束标记后面必须跟一个换行符

很明显,heredoc 和 nowdoc 的语法非常严格,但 PHP 7.3 可能会通过以下改进稍微改变这一点。

1.允许缩进结束标记并去除前导空格

在 PHP 7.3 中,我们可以缩进结束标记,我们可以安全地编写下面的代码:

class foo {
    public $bar = <<<EOT
        bar
    EOT;
}

结束标记的缩进设置了将从正文的每一行中去除的空白(或制表符)的数量。但是要小心:结束标记不应该缩进超过正文的任何其他行。

参见下面的代码:

class foo {
    public $bar = <<<EOT
    bar
        EOT;
}

上面的代码会发出以下解析错误:

Parse error: Invalid body indentation level (expecting an indentation at least ...) in %s on line %d

去除制表符和空格允许我们将 heredoc/nowdoc 的主体缩进到与周围代码相同的级别,并且在主体的每一行之前没有不必要的空格。

我们可以使用制表符和空格来缩进,但是不允许混合使用。这意味着我们必须对结束标记和正文的任何行使用相同的缩进字符。对于不同的缩进字符,我们会遇到不同类型的解析错误(无效缩进)。

2.从结束标记中删除尾随的新行要求

目前,为了终止 heredoc/nowdoc,标记后面必须有一个新行。PHP 7.3 将改变这一点,允许我们在同一行终止 heredoc/nowdoc。这里有一个来自 RFC 的例子:

PHP 7.2 有效语法:

$values = [<<<END
a
b
c
END
, 'd e f'];

PHP 7.3 有效语法:

$values = [<<<END
a
b
c
END, 'd e f'];

无论如何,在选择标记的名字时要小心,因为“偶尔”如果它与你在 heredoc/nowdoc 正文中使用的一个单词匹配,你可能会期望一个错误(在 RFCGitHub 上阅读更多关于这个的内容)。

两项提案都以超过三分之二的票数通过。

PHP 7.3 RFC

额外资源

在函数调用中允许尾随逗号

尾随逗号(或“结尾逗号”)是附加到元素、参数或属性列表的逗号,在频繁附加新值的情况下,它们很方便,因为它们可以防止由于缺少逗号而导致的错误。在 PHP 中,数组中允许尾随逗号,从 PHP 7.2 开始,在分组名称空间中允许尾随逗号。

从 PHP 7.3 开始,函数声明中允许使用尾随逗号。可变函数提供了一个尾随逗号非常有用的上下文示例:

foo(
    $bar,
    $baz,
);

当我们用compact()创建一个数组时,为了用sprintf()返回一个格式化的字符串,或者当合并一个数组时,我们可以使用一个尾随逗号:

$newArray = array_merge(
    $arrayOne,
    $arrayTwo,
    ['foo', 'bar'],
);

此外,尾随逗号对于调试也很有用:

var_dump(
    $foo,
    $bar,
    $baz,
);

而他们强大的有unset()isset():

unset(
    $foo,
    $bar,
    $baz,
);

isset(
    $foo,
    $bar,
    $baz,
);

方法调用和封装中也允许使用尾随逗号。

注意:这个改变只会影响函数调用。函数声明语法不会改变。此外,不允许使用独立逗号、多个尾随逗号和前导逗号。

更多示例可在 RFC 页面上找到。该 RFC 以 30 比 10 的票数通过。

PHP 7.3 RFC

JSON _ THROW _ ON _ 错误

PHP 7.3 最受欢迎的功能之一是提供了一种处理 JSON 错误的新方法。这不是一个核心特性,而是对 JSON 扩展的补充,它将改变 json_decode()json_encode() 的错误行为。

目前,json_decode()返回出错的null,但是null也可以是有效的结果。这可能会令人困惑,因为

只有通过调用json_last_error()json_last_error_msg()才能知道是否发生了错误,它们分别以机器可读和人类可读的形式返回全局错误状态。–PHP RFC

出错时json_encode()返回FALSE。这一点更清楚,因为有一个特定的误差值。总之,两个函数都不会在出错时暂停程序执行,也不会抛出任何警告

话虽如此,以下是 PHP 7.3 的建议:

相反,RFC 建议为json_decode()json_encode()JSON_THROW_ON_ERROR增加一个新的选项标志值。当传递该标志时,这些函数的错误行为被改变。全局错误状态保持不变,如果发生错误,这些函数会抛出一个JsonException,消息和代码分别设置为json_last_error()json_last_error_msg()的值。

下面的例子展示了一种抛出 JSON 错误的简单方法:

try {
    json_decode("{", false, 512, JSON_THROW_ON_ERROR);
}
catch (\JsonException $exception) {
    echo $exception->getMessage(); // echoes "Syntax error"
}

出错时抛出异常有几个好处,你会在 RFC 中发现。

注意:传递给json_decode()的无效深度参数输出警告并返回NULL。这种行为不会受到JSON_THROW_ON_ERROR的影响。同样,参数解析错误不受JSON_THROW_ON_ERROR影响,继续产生警告。

这项提案以 23 票对 0 票获得通过。

PHP 7.3 RFC

额外资源

list()引用赋值

引用赋值是什么意思?

考虑下面一行:

$b = &$a;

这里$b获取$a的值,但是该值没有从$a复制到$b。在 PHP 中我们可以通过引用来赋值,这意味着两个变量可能指向相同的数据,对任何变量的每次更改都会影响原始数据。这里是 PHP 手册中的一个例子:

<?php
$a = 3;
$b = &$a; // $b is a reference to $a

print "$a\n"; // prints 3
print "$b\n"; // prints 3

现在,让我们更改$a的值:

$a = 4; // change $a

print "$a\n"; // prints 4
print "$b\n"; // prints 4 as well, since $b is a reference to $a, which has been changed

什么是 list()结构,它在 PHP 7.3 中有什么变化

list() 语言结构可以用来“给变量赋值,就像它们在一个数组中一样”,但是对于list(),我们目前不允许通过引用来给变量值赋值。

PHP 7.3 应该会改变这一点,允许我们也使用list()构造通过引用来分配变量,如下例所示:

$array = [1, 2];
list($a, &$b) = $array;

这与以下内容相同:

$array = [1, 2];
$a = $array[0];
$b =& $array[1];

这个提议的优点是,我们现在可以通过引用来分配多个变量,这在当前是不允许的。更多示例请参见 RFC 。这项提案以 17 票对 7 票获得通过。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

PHP 7.3 RFC

额外资源

is _ 可数函数

PHP 7.3 的另一个有用的特性是is_countable()函数。一直到 PHP 7.2 ,我们在试图 count() 不可数的东西时都会出错。为此,为了避免出现警告,我们被迫添加以下代码:

if (is_array($foo) || $foo instanceof Countable) {
    // $foo is countable
}

这个 RFC 提出了函数 is_countable() ,如果给定变量是数组或者是可数变量,则返回true,否则返回false。因此,上面的代码可以修改如下:

if (is_countable($foo)) {
    // $foo is countable
}

这项提案以 25 票对 0 票获得通过。

PHP 7.3 RFC

额外资源

array_key_first(),array_key_last()

目前,我们可以使用 reset()end()key() 函数来获取数组的第一个和最后一个键。不幸的是,使用这些函数,没有办法在不改变数组内部状态的情况下收集数组的第一个或最后一个索引。其他选项通常会降低代码的可读性和性能。该提案将通过向 PHP 核心添加两个新功能来改变这种情况:

  • array_key_first()
  • array_key_last()

从 PHP 7.3 开始,array_key_first()array_key_last()允许检索给定数组的第一个和最后一个键,而不影响内部数组指针。这些新函数将允许我们编写不太复杂的代码,并且在某些情况下避免错误。更多信息和几个例子见 RFC

array_key_first()array_key_last()以 18 票对 14 票获得通过。

注意:最初的 RFC 提出了另外两个函数,array_value_first()array_value_last(),这两个函数在不同的投票中被投票,但是没有被批准,也不会成为 PHP 核心的一部分。

PHP 7.3 RFC

额外资源

Argon2 密码哈希增强

Argon2 是一种哈希算法,在 PHP 7.2 中实现,作为 Bcrypt 算法的替代。PHP 7.2 引入了PASSWORD_ARGON2I常量,可用于password_*函数:

password_hash('password', PASSWORD_ARGON2I);

自从第一次实现以来,Argon2 又增加了一个新版本,因此,在撰写本文时,Argon2 有三个版本:

  • Argon2d 最大化抵抗 GPU 破解攻击。它速度更快,并使用依赖数据的内存访问。
  • Argon2i 使用与数据无关的内存访问,这是密码哈希的首选。它的速度较慢,因为它在内存中传递更多次,以防止折衷攻击。
  • Argon2id 是一个混合版本,它结合了 Argon2i 方法用于第一次内存传递,以及 Argon2d 方法用于后续传递。

在互联网上推荐 Argon2id,除非有充分的理由特别喜欢另一种变体。

新 RFC 建议在密码 _* 函数中使用新的PASSWORD_ARGON2ID常量实现 Argon2id:

password_hash('password', PASSWORD_ARGON2ID);

该实现与 Argon2i 实现相同,并将接受相同的成本因素:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

  • 一个内存开销,它定义了哈希过程中应该消耗的 KiB 数(默认值为 1<10,或 1024 KiB,或 1 MiB)
  • 定义哈希算法迭代次数的时间成本(默认为 2)
  • 一个并行因子,它设置散列过程中将使用的并行线程的数量(默认为 2)

请参见以下代码:

$options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2];
password_hash('password', PASSWORD_ARGON2ID, $options);

关于 RFC 的更多信息和示例。

PHP 7.3 RFC

额外资源

  • Argon2 (维基百科)
  • Argon2:用于密码散列和其他应用的硬存储功能

贬值

以下函数/功能在 PHP 7.3 中将被弃用,在 PHP 8.0 之前将被删除。

弃用并删除 image2wbmp()

函数的作用是:输出或保存给定图像的 wbmp 版本。这个函数有三个参数:图像资源、文件名(保存文件的路径)和前景色。
从 PHP 5.0 开始,与 imagewbmp() 相同,所以这个 RFC 提出弃用并移除。
从 PHP 7.3 开始,每次调用image2wbmp()都会发出一个弃用警告。移除之后,每个调用都会抛出一个致命错误。

PHP 7.3 RFC

弃用并移除不区分大小写的常数

PHP 目前支持区分大小写和不区分大小写的常量。总之,不区分大小写的常量是受支持的,但被认为在功能上存在不一致性,并且使用起来很复杂。
这一提议始于以下前提:

  • 类常量总是区分大小写
  • const声明的全局常量总是区分大小写的
  • 默认情况下,用define()定义的常量区分大小写

此外, PHP 语言引用明确声明:

默认情况下,常数区分大小写。按照惯例,常量标识符总是大写的。

也就是说,本 RFC 提出了以下更改:

  • 不赞成调用第三个参数设置为truedefine()–PHP 7.3
  • 不赞成使用与声明不同的大小写访问不区分大小写的常量(除了truefalsenull)–PHP 7.3
  • 去除声明不区分大小写的常量的可能性——PHP 8.0
  • truefalsenull从特殊情况下的常量转换为保留关键字–PHP 8.0

PHP 7.3 RFC

弃用并删除不区分大小写的常量

php 7.3 的附加反作用

这里是 PHP 7.3 中被否决的功能的快速列表。这不是详尽的,它们只是我个人认为更相关的反对建议。关于建议的反对意见的完整列表,请参见 PHP 7.3 的反对意见。

未记录的 mbstring 函数别名:有许多未记录的 mbstring 函数别名是使用mb_前缀的等价函数的重复。例如,mberegmb_ereg的别名。所有这些函数都将被标记为不推荐使用,并且在编译过程中遇到它们时会抛出一个不推荐使用的通知。

整数针串搜索功能:这些功能通常作用于串针。如果给定一个非字符串针,它被转换成一个整数并作为一个字符的序数值应用(在 PHP 手册上阅读更多)。这里是来自 RFC 的一个例子:

$str = "There are 10 apples";
var_dump(strpos($str, "10")); // int(10)
var_dump(strpos($str, 10));   // bool(false)

这被认为是令人困惑的,并且会导致不可预知的问题,因为类型会随着用户数据源而改变。为此,RFC 建议,如果将非字符串针传递给以下函数之一,则发出弃用警告:

  • strpos
  • strrpos
  • stripos
  • strripos
  • strstr
  • strchr
  • strrchr
  • stristr

在 PHP 8.0 中,弃用警告应该被移除,针应该被自动转换成字符串。

金斯塔把我宠坏了,我现在要求每个供应商都提供那样的服务水平。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasanfrom@ suganthamn

查看计划

fgetss()函数和string.strip_tags流过滤器 : fgetss()string.strip_tags在读取流时从流中剥离标签。函数和过滤器都公开了 strip_tags() 功能,使得strip_tags()的实现更加复杂,因为需要一个流状态机。此外,RFC 指出了这些功能的另一个缺点:

另一方面,这些功能似乎没有什么用处。本身由于自身的局限性和已知的 bug,已经很少有合法的应用了。除此之外,不需要为流应用程序提供本地支持。

因此 RFC 建议将fgetss()gzgetss()SplFileObject::fgetss()标记为不推荐使用。

PHP 7.3 对 WordPress 用户意味着什么?

据官方 WordPress 统计页面显示,截至本文撰写之时,只有 32.9%的 WordPress 用户升级到了 PHP 7 或更高版本。只有 4%的人在使用 T2 的 PHP 7.2。您可以看到,超过 38%的大多数用户仍在运行 PHP 5.6。更可怕的是,超过 28.5%的用户在使用不支持的 PHP 版本。截至 2016 年 12 月,WordPress.org 实际上将他们的官方推荐从 PHP 5.6 升级到 PHP 7 或更高版本。

WordPress PHP versions

WordPress PHP versions

PHP 7 性能

从性能的角度来看,上面的数字尤其令人沮丧,因为 PHP 7 已经显示出明显更快。以下是一些统计数据:

  • 官方 PHP 基准测试表明,与 PHP 5.6 相比,PHP 7 允许系统每秒执行两倍的请求,而延迟几乎是 5.6 的一半。
  • Christian Vigh 也发表了一篇 PHP 性能对比文章,他发现 PHP 5.2 比 PHP 7 慢 400%。

我们运行了自己的 PHP 性能基准。与上面的基准类似,我们看到 PHP 7.3 上的 WordPress 5.0 每秒可以执行的事务(请求)几乎是 PHP 5.6 的三倍。

WordPress 5.0 PHP benchmarks

WordPress 5.0 PHP benchmarks

  • WordPress 5.0 PHP 5.6 基准测试:91.64 请求/秒
  • WordPress 5.0 PHP 7.0 基准测试结果:206.71 请求/秒
  • WordPress 5.0 PHP 7.1 基准测试结果:210.98 请求/秒
  • WordPress 5.0 PHP 7.2 基准测试结果:229.18 req/sec
  • WordPress 5.0 PHP 7.3 基准测试结果:253.20 req/sec 🏆

有趣的是,PHP 7.3 上的 WordPress 4.9.8 比 WordPress 5.0 稍快。

WordPress 4.9.8 PHP benchmarks

WordPress 4.9.8 PHP benchmarks

  • WordPress 4.9.8 PHP 5.6 基准测试:97.59 请求/秒
  • WordPress 4.9.8 PHP 7.0 基准测试结果:221.42 请求/秒
  • WordPress 4.9.8 PHP 7.1 基准测试结果:233.78 请求/秒
  • WordPress 4.9.8 PHP 7.2 基准测试结果:250.36 req/sec
  • PHP 7.3 基准测试结果:276.31 请求/秒🏆

许多更新缓慢,仅仅是因为测试所有新的第三方插件和主题以确保它们正常运行需要时间。但是很多时候,归结起来就是他们还没有做。

检查你的 PHP 版本

不确定你运行的是什么版本的 PHP?最简单的检查方法之一是使用类似于 Pingdom 或 Google Chrome Devtools 的工具。第一个 HTTP 请求头通常会显示版本。

Check version of PHP

Check version of PHP

这依赖于主机不修改X-Powered-By头值。如果是这样,您可能看不到您的 PHP 版本。在这种情况下,你也可以安装一个像版本信息这样的免费插件,它会在你的 WordPress 管理面板的页脚显示一些基本的服务器信息。

Check PHP version in WordPress

Check PHP version in WordPress

或者,你也可以通过 FTP 上传一个文件来查看你的 PHP 版本,或者联系你的主机询问。

更新到 PHP 7.3

PHP 7.3 的最终版本在这里,你可以马上开始测试。你可以在本地测试你的 WordPress 站点,或者在像 Docker 这样的环境中检查你的脚本,它允许你从命令行测试不同版本的 PHP。

或者,您可以利用一个临时环境,因为这将更类似于一个实际的生产站点。在 MyKinsta 仪表板中点击几下,创建一个暂存环境

WordPress staging environment

WordPress staging environment

我们总是建议在生产现场使用它之前进行彻底的测试。为此,只需在“工具”下更改登台站点的 PHP 引擎,您就可以开始测试以确保您的第三方插件和主题的兼容性。

Change to PHP 7.3

Change to PHP 7.3

一旦你确认一切正常,你可以将你的生产站点升级到 PHP 7.3,或者如果你做了任何改变,也可以将你的临时站点升级到活动状态

摘要

PHP 最新最棒的版本在这里。它给我们带来了诸如灵活的 heredocs 和 nowdocs、函数调用中的尾随逗号、list()引用赋值等礼物。在本帖中,我们提供了我们最喜欢的改进和变化的概述,但我们也想知道哪些是你最喜欢的,以及你将以何种方式利用它们。请在下面的评论中告诉我们。而且别忘了 PHP 并没有死

#PHP 7.3 is all about developers. Check out the new features, functionality, and performance boost! 🤘Click to Tweet

你可以在征求意见页面和 GitHub 的 PHP 7.3 升级说明中找到 PHP 7.3 提案的完整列表。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 7.4 的新特性(特性、弃用、速度)

原文:https://kinsta.com/blog/php-7-4/

PHP 7.4 是 PHP 7 的下一个次要版本,已于 2019 年 11 月 28 日正式发布。因此,是时候让我们深入了解一些最令人兴奋的新增功能和新特性了,它们将使 PHP 变得更快、更可靠。

更新: PHP 8.1(正式发布) 现已面向所有 Kinsta 客户端。Kinsta 不再支持 PHP 7.4。请注意,我们支持 PHP 8.0 和 8.1 版本。

即使 PHP 7.4 显著提升了性能并改善了代码可读性,PHP 8 将是 PHP 性能的真正里程碑,因为包含 JIT 的提议已经被批准了。

无论如何,今天我们将讨论 PHP 7.4 中一些最有趣的特性和变化。请注意,以下是 7.4 版本的重要日期:

  • 2019 年 6 月 6 日:PHP 7.4 Alpha 1
  • 2019 年 7 月 18 日:PHP 7.4 Beta 1——功能冻结
  • 2019 年 11 月 28 日:PHP 7.4 GA 发布

你可以在官方 RFC 页面上查看完整的特性和添加列表。

PHP 7.4 有什么新特性?

在本帖中,我们将介绍 PHP 7.4 最终版本应该增加的一些变化和特性:

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

忘记 array_merge: PHP 7.4 在数组表达式中引入了 Spread 运算符

从 PHP 5.6 开始,参数解包是一种将数组和遍历解包到参数列表中的语法。要解包数组或可遍历对象,必须在它前面加上… (3 个点),如下例所示:

function test(...$args) { var_dump($args); }
test(1, 2, 3);

现在这个 PHP 7.4 RFC 提议将这个特性扩展到数组定义:

$arr = [...$args];

数组表达式中的 Spread 操作符的第一个好处就是性能。事实上,RFC 文件规定:

展开运算符应该比array_merge有更好的性能。这不仅是因为 spread 操作符是一个语言结构,而array_merge是一个函数,还因为编译时优化可以对常量数组执行。

Spread 操作符的一个显著优点是它支持任何可遍历的对象,而array_merge函数只支持数组。

以下是数组表达式中参数解包的示例:

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);

如果在 PHP 7.3 或更早版本中运行这段代码,PHP 会抛出一个解析错误:

Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3

相反,PHP 7.4 会返回一个数组:

array(5) {
	[0]=>
	string(6) "banana"
	[1]=>
	string(6) "orange"
	[2]=>
	string(5) "apple"
	[3]=>
	string(4) "pear"
	[4]=>
	string(10) "watermelon"
}

RFC 声明我们可以多次扩展同一个数组。此外,我们可以在数组中的任何地方使用扩展操作符语法,因为普通元素可以添加在扩展操作符之前或之后。因此,下面的代码将如我们预期的那样工作:

$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];

也可以将函数返回的数组直接解包到一个新的数组中:

function buildArray(){
	return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];

PHP 7.4 输出以下数组:

array(6) {
	[0]=>
	string(3) "red"
	[1]=>
	string(5) "green"
	[2]=>
	string(4) "blue"
	[3]=>
	string(4) "pink"
	[4]=>
	string(6) "violet"
	[5]=>
	string(6) "yellow"
}

我们也可以使用生成器语法:

function generator() {
	for ($i = 3; $i <= 5; $i++) {
		yield $i;
	}
}
$arr1 = [0, 1, 2, ...generator()];

但是我们不允许解包通过引用传递的数组。考虑下面的例子:

$arr1 = ['red', 'green', 'blue'];
$arr2 = [...&$arr1];

如果我们试图通过引用解包一个数组,PHP 会抛出下面的解析错误:

Parse error: syntax error, unexpected '&' in /app/spread-operator.php on line 3

无论如何,如果第一个数组的元素通过引用存储,那么它们也通过引用存储在第二个数组中。这里有一个例子:

$arr0 = 'red';
$arr1 = [&$arr0, 'green', 'blue'];
$arr2 = ['white', ...$arr1, 'black'];

这是我们从 PHP 7.4 中得到的:

array(5) {
	[0]=>
	string(5) "white"
	[1]=>
	**&string(3) "red"**
	[2]=>
	string(5) "green"
	[3]=>
	string(4) "blue"
	[4]=>
	string(5) "black"
}

差价运营商提案以 43 比 1 的票数通过。

箭头功能 2.0(短闭包)

在 PHP 中,匿名函数被认为相当冗长,难以实现和维护。这个 RFC 提议引入更短、更清晰的箭头函数(或者短闭包)语法,这将允许我们显著地清理我们的 PHP 代码。

考虑下面的例子:

function cube($n){
	return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);

PHP 7.4 允许使用更简洁的语法,上面的函数可以重写如下:

$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);

目前,匿名函数(闭包)可以继承父作用域中定义的变量,这要归功于use语言构造,如下所示:

$factor = 10;
$calc = function($num) use($factor){
	return $num * $factor;
};

但是在 PHP 7.4 中,父作用域中定义的变量是由值隐式捕获的(隐式按值作用域绑定)。因此,我们可以在一行中编写上面看到的整个函数:

$factor = 10;
$calc = fn($num) => $num * $factor;

在父作用域中定义的变量可以在 arrow 函数中使用,就像我们使用use($var)一样,并且不可能从父作用域中修改变量。

新的语法是对该语言的巨大改进,因为它允许我们构建更具可读性和可维护性的代码。我们还可以使用参数和返回类型,默认值,变长参数列表(变量函数,我们可以通过引用传递和返回等等。最后,短闭包也可以用在类方法中,它们可以像常规闭包一样利用$this变量。

这个 RFC 已经以 51 票对 8 票获得批准,所以我们可以期待它成为 PHP 7.4 新增内容的一部分。

零合并赋值运算符

PHP 7 中添加的合并操作符 ( ??)在我们需要结合isset()使用三元操作符时会派上用场。如果第一个操作数存在并且不是NULL,则返回第一个操作数。否则,它返回第二个操作数。这里有一个例子:

$username = $_GET['user'] ?? ‘nobody';

这段代码做的很简单:它获取请求参数,如果不存在的话设置一个默认值。那一行的意思很清楚,但是如果我们有更长的变量名,就像 RFC 中的这个例子一样,会怎么样呢?

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';

从长远来看,这段代码可能有点难以维护。所以,为了帮助开发者写出更直观的代码,这个 RFC 提议引入零合并赋值操作符 ( ??=)。因此,我们可以编写以下代码,而不是编写前面的代码:

$this->request->data['comments']['user_id'] ??= ‘value’;

如果左侧参数的值是null,则使用右侧参数的值。
注意,虽然 coalesce 操作符是一个比较操作符,但是??=是一个赋值操作符。

这项提议以 37 票对 4 票获得通过。

类型化属性 2.0

参数类型声明或类型提示允许指定预期传递给函数或类方法的变量的类型。类型提示是 PHP 5 的一个特性,从 PHP 7.2 开始,我们可以将它们用于object数据类型。现在 PHP 7.4 将类型提示向前推进了一步,增加了对一级属性类型声明的支持。这里有一个非常基本的例子:

class User {
	public int $id;
	public string $name;
}

支持所有类型,除了voidcallable:

public int $scalarType;
protected ClassName $classType;
private ?ClassName $nullableClassType;

RFC 解释了不支持voidcallable的原因:

不支持 void 类型,因为它没有用并且语义不清楚。

不支持可调用类型,因为其行为依赖于上下文。

所以我们可以放心地使用boolintfloatstringobjectiterableselfparent,任何类或接口名称,以及可空类型 ( ?type)。

类型可用于静态属性:

public static iterable $staticProp;

它们也允许使用var符号:

var bool $flag;

可以设置默认的属性值,当然它必须与声明的属性类型相匹配,但是只有可空的属性可以有一个默认的null值:

public string $str = "foo";
public ?string $nullableStr = null;

同一类型适用于单个声明中的所有属性:

public float $x, $y;

如果我们在属性类型上犯了一个错误,会发生什么?考虑以下代码:

class User {
	public int $id;
	public string $name;
}

$user = new User;
$user->id = 10;
$user->name = [];

在上面的代码中,我们声明了一个字符串属性类型,但是我们将一个数组设置为属性值。在这种情况下,我们会得到以下致命错误:

Fatal error: Uncaught TypeError: Typed property User::$name must be string, array used in /app/types.php:9

该 RFC 以 70 票对 1 票获得批准。

在 MyKinsta dashboard 中轻松将你的 WordPress 站点迁移到 PHP 7.4。免费试用 kin sta。【T7

弱引用

通过这个 RFC ,PHP 7.4 引入了 WeakReference 类,它允许程序员保留对一个对象的引用,而不会阻止对象本身被销毁。

目前,PHP 通过使用像 pecl-weakref 这样的扩展来支持弱引用。无论如何,新的 API 不同于文档中的WeakRef类。

这是这个提议的作者尼基塔·波波夫的一个例子:

$object = new stdClass;
$weakRef = WeakReference::create($object);

var_dump($weakRef->get());
unset($object);
var_dump($weakRef->get());

第一个var_dump打印object(stdClass)#1 (0) {},第二个var_dump打印NULL,因为被引用对象已经被破坏。

我在 #PHPRussia2019 的 PHP 7.4 演讲的幻灯片。是一次伟大的会议!https://t.co/zLr9Bj2aKl

—尼基塔·波波夫(@ Nikita _ PPV)2019 年 5 月 19 日

PHP 8.1 的新特性:特性、变化、改进等等

原文:https://kinsta.com/blog/php-8-1/

2021 年 11 月 25 日发布, PHP 8.1 终于来了,打包了几个令人兴奋的特性。

在本文中,我们将详细介绍 PHP 8.1 中的新特性。从它的新特性和性能改进到重大变化和废弃,我们将深入探讨它们。

坐稳了!

PHP 8.1 的新特性

让我们从 PHP 8.1 中的所有新特性开始。这是一个很长的列表。

信息

适用于所有环境的 PHP 8.1 现已在 Kinsta 发布。请查看我们的 PHP 8.1 特性更新了解更多信息。

PHP 8.1 is here! 🎉 See what's in store in this in-depth guide ⬇️Click to Tweet

纯交集类型

PHP 8.1 增加了对交集类型的支持。它类似于 PHP 8.0 中引入的联合类型,但是它们的预期用途完全相反。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

为了更好地理解它的用法,让我们回顾一下 PHP 中类型声明的工作方式。

本质上,您可以向函数参数、返回值和类属性添加类型声明。这种赋值称为类型提示,它确保值在调用时是正确的类型。否则,它会立即抛出一个类型错误。反过来,这有助于您更好地调试代码。

但是,声明单一类型有其局限性。联合类型通过允许您用多种类型声明一个值来帮助您克服这个问题,并且输入必须满足至少一个声明的类型。

另一方面,RFC将交叉口类型描述为:

“交集类型”需要一个值来满足多个类型约束,而不是单个类型约束。

…纯交集类型使用语法 T1 & T2 & …指定,并且可以在当前接受类型的所有位置使用…

注意使用& (AND)运算符来声明交集类型。相反,我们使用| (OR)操作符来声明联合类型。

在交集类型中使用大多数标准类型将导致永远无法实现的类型(例如整数和字符串)。因此,交集类型只能包括类类型(即接口和类名)。

以下是如何使用交集类型的示例代码:

class A {
    private Traversable&Countable $countableIterator;

    public function setIterator(Traversable&Countable $countableIterator): void {
        $this->countableIterator = $countableIterator;
    }

    public function getIterator(): Traversable&Countable {
        return $this->countableIterator;
    }
}

在上面的代码中,我们定义了一个变量可数迭代器作为两种类型的交集:可遍历可数。在这种情况下,声明的两种类型是接口。

交集类型也符合已经用于类型检查和继承的标准 PHP 变化规则。但是关于交集类型与子类型如何交互,还有两个附加的规则。你可以在 RFC 中阅读更多关于交叉点类型的变化规则

在某些编程语言中,可以在同一个声明中组合联合类型和交集类型。但是 PHP 8.1 禁止这样做。因此,它的实现被称为“纯”交集类型。然而,RFC 确实提到它是“留给未来的范围”

枚举

PHP 8.1 终于增加了对枚举(也称为枚举或枚举类型)的支持。它们是用户定义的数据类型,由一组可能的值组成。

编程语言中最常见的枚举例子是布尔类型,其中truefalse是两个可能的值。它太常见了,以至于被融入了许多现代编程语言。

根据RFC,PHP 中的枚举将首先被限制为“单元枚举”:

这个 RFC 的范围仅限于“单元枚举”,也就是说,枚举本身就是一个值,而不仅仅是一个原始常量的花哨语法,并且不包括额外的相关信息。这一功能极大地扩展了对数据建模、自定义类型定义和 monad 风格行为的支持。枚举启用了“使无效状态不可表示”的建模技术,这导致更健壮的代码,而不太需要穷举测试。

为了达到这个阶段,PHP 团队研究了许多已经支持枚举的语言。他们的调查发现可以将枚举分为三大类:奇特的常量、奇特的对象和全代数数据类型(ADT)。这是一本有趣的读物!

PHP 实现了“奇特的对象”枚举,并计划在未来将其扩展到完整的 ADT。它在概念和语义上模仿了 Swift、Rust 和 Kotlin 中的枚举类型,尽管它没有直接模仿它们中的任何一个。

RFC 使用一副牌中的花色这一著名类比来解释其工作原理:

enum Suit {
  case Hearts;
  case Diamonds;
  case Clubs;
  case Spades;
}

这里,花色枚举定义了四个可能的值:红心方块梅花黑桃。您可以使用语法直接访问这些值:Suit::HeartsSuit::DiamondsSuit::ClubsSuit::Spades

这种用法可能看起来很熟悉,因为枚举是建立在类和对象之上的。他们的行为相似,几乎有完全相同的要求。枚举与类、接口和特征共享相同的命名空间。

上面提到的枚举称为纯枚举

如果你想给任何情况一个标量等值,你也可以定义支持的枚举。然而,反枚举只能有一种类型,要么是int要么是string(不能两者都有)。

enum Suit: string {
  case Hearts = 'H';
  case Diamonds = 'D';
  case Clubs = 'C';
  case Spades = 'S';
}

此外,支持枚举的所有不同情况都必须有唯一的值。你永远不能混合纯枚举和支持枚举。

RFC 深入研究了枚举方法、静态方法、常量、常量表达式等等。涵盖所有这些内容超出了本文的范围。你可以参考文档来熟悉它的所有优点。

never返回类型

PHP 8.1 增加了一个新的返回类型提示,叫做never。在总是throwexit的函数中使用非常有用。

根据其RFC,URL 重定向函数总是exit(显式或隐式)是其使用的一个很好的例子:

function redirect(string $uri): never {
    header('Location: ' . $uri);
    exit();
}

function redirectToLoginPage(): never {
    redirect('/login');
}

一个never声明的函数应该满足三个条件:

  • 它不应该显式定义return语句。
  • 它不应该有隐式定义的return语句(例如 if-else 语句)。
  • 它必须用一个exit语句结束执行(显式或隐式)。

上面的 URL 重定向例子显示了never返回类型的显式和隐式用法。

never返回类型与void返回类型有许多相似之处。它们都确保函数或方法不会返回值。然而,它的不同之处在于执行更严格的规则。例如,void声明的函数仍然可以return没有显式值,但是你不能对never声明的函数做同样的事情。

根据经验,当您希望 PHP 在函数调用后继续执行时,使用void。当你想要相反的结果时,选择never

此外,never被定义为“底部”类型。因此,任何声明为never的类方法都“永远”不能将其返回类型更改为其他类型。然而,你可以用一个never声明的方法来扩展一个void声明的方法。

信息

最初的 RFC 将never返回类型列为noreturn,这是一个已经被两个 PHP 静态分析工具支持的返回类型,这两个工具分别是 Psalm 和 PHPStan。因为这是由诗篇和诗篇的作者自己提出的,他们保留了它的术语。然而,由于命名惯例,PHP 团队对noreturnnever进行了投票,never成为了永远的赢家。因此,对于 PHP 8.1+版本,总是用never替换noreturn

纤维

历史上,PHP 代码几乎总是同步代码。即使对于 I/O 操作,代码执行也会暂停,直到返回结果。你可以想象为什么这个过程可能会使代码执行变慢。

有多个第三方解决方案可以克服这个障碍,允许开发人员异步编写 PHP 代码,尤其是对于并发 I/O 操作。一些流行的例子包括 amphpReactPHPGuzzle

然而,在 PHP 中没有处理这种实例的标准方法。而且,在同一个调用栈中处理同步和异步代码会导致其他问题

纤程是 PHP 通过虚拟线程(或绿色线程)处理并行性的方式。它试图通过允许 PHP 函数中断而不影响整个调用栈来消除同步和异步代码之间的差异。

RFC 承诺如下:

  • 向 PHP 添加对纤程的支持。
  • 引入一个新的纤程类和相应的反射类 ReflectionFiber。
  • 添加异常类 FiberError 和 FiberExit 来表示错误。
  • 光纤允许现有接口(PSR-7、教条 ORM 等)的透明非阻塞 I/O 实现。).那是因为占位符(承诺)对象被消除了。相反,函数可以声明 I/O 结果类型,而不是不能指定解析类型的占位符对象,因为 PHP 不支持泛型。

您可以使用纤程来开发全栈、可中断的 PHP 函数,然后您可以使用这些函数在 PHP 中实现协作式多任务处理。当纤程暂停整个执行堆栈时,您可以放心,因为它不会损害您代码的其余部分。

Chart illustrating PHP code execution flow with Fibers.

Chart illustrating PHP code execution flow with Fibers (Source: PHP.net).

为了说明纤程的使用,它的 RFC 使用了这个简单的例子:

$fiber = new Fiber(function (): void {
    $value = Fiber::suspend('fiber');
    echo "Value used to resume fiber: ", $value, "\n";
});

$value = $fiber->start();

echo "Value from fiber suspending: ", $value, "\n";

$fiber->resume('test');

您在上面的代码中创建了一个“纤程”,并立即用字符串fiber将它挂起。echo语句充当纤程恢复的视觉提示。

您可以从对$fiber->start()的调用中检索这个字符串值。

然后,使用字符串“test”恢复纤程,该字符串是从对Fiber::suspend()的调用中返回的。完整的代码执行会产生如下输出:

Value from fiber suspending: fiber
Value used to resume fiber: test

这是 PHP 纤维工作的基本教科书示例。这里是另一个执行七个异步 GET 请求的纤程示例

综上所述,大多数 PHP 开发人员永远不会直接与纤程打交道。RFC 甚至提出了同样的建议:

光纤是一项高级功能,大多数用户不会直接使用。该特性主要面向库和框架作者,以提供事件循环和异步编程 API。纤程允许在任何时候将异步代码执行无缝地集成到同步代码中,而不需要修改应用程序调用堆栈或添加样板代码。

Fiber API 不应该直接用在应用级代码中。纤程提供了一个基本的、低级的流控制 API 来创建更高级的抽象,然后在应用程序代码中使用。

考虑到它的性能优势,您可以期待 PHP 库和框架利用这一新特性。看看他们如何在他们的生态系统中实现纤程会很有趣。

新的readonly属性

PHP 8.1 增加了对readonly属性的支持。它们只能从声明它们的作用域初始化一次。一旦初始化,就不能修改它们的值。这样做会抛出一个错误异常。

其 RFC 显示:

一个 readonly 属性只能初始化一次,并且只能从声明它的作用域初始化。对该属性的任何其他赋值或修改都将导致错误异常。

这里有一个你如何使用它的例子:

class Test {
    public readonly string $kinsta;

    public function __construct(string $kinsta) {
        // Legal initialization.
        $this->kinsta = $kinsta;
    }
}

一旦初始化,就没有回头路了。将这一特性嵌入 PHP 极大地减少了通常用于实现这一功能的样板代码。

属性提供了强大的不变性保证,无论是在类内部还是外部。中间运行什么代码并不重要。调用一个readonly属性将总是返回相同的值。

然而,在特定的用例中,使用readonly属性可能并不理想。例如,您只能将它们与一个类型化属性一起使用,因为没有类型的声明是隐式的null,不能是readonly

此外,设置一个readonly属性并不会使对象不可变。属性将保存相同的对象,但是对象本身可以改变。

这个属性的另一个小问题是您不能克隆它。对于这个特殊的用例,已经有了一个解决方案。如有必要,调查一下。

定义final类常量

从 PHP 8.0 开始,您可以用它的子类覆盖类常量。这是由于 PHP 中实现继承的方式。

下面是一个如何覆盖先前声明的常量值的示例:

class Moo
{
    public const M = "moo";
}

class Meow extends Moo
{
    public const M = "meow";
}  

现在,如果奶牛想要对猫的行为(至少是常数)更加严格,他们可以用 PHP 8.1 的新final修饰符来实现。

一旦你声明了一个常数为final,这意味着。

class Moo
{
    final public const M = "moo";
}

class Meow extends Moo
{
    public const M = "meow";
}

// Fatal error: Meow::M cannot override final constant Moo::M

您可以在final class constantsPHP RFC 中了解更多信息。

新的fsync()fdatasync()功能

PHP 8.1 新增了两个名为fsync()fdatasync()的文件系统函数。对于那些习惯了同名的 Linux 功能的人来说,它们似乎很熟悉。那是因为它们是相关的,只是为 PHP 实现的。

事实上,这一增加早就应该了。PHP 是少数几个直到 PHP 8.1 才实现 fsync()和 fdatasync()——也就是的主流编程语言之一。

fsync()函数类似于 PHP 现有的fflush()函数,但是它在一个方面有显著的不同。鉴于fflush()将应用的内部缓冲区刷新到操作系统,fsync()更进一步,确保内部缓冲区刷新到物理存储。这确保了完整和持久的写入,因此即使在应用程序或系统崩溃后,您也可以检索数据。

这里有一个你如何使用它的例子。

$doc = 'kinsta.txt';

$kin = fopen($doc, 'ki');
fwrite($kin, 'doc info');
fwrite($kin, "\r\n");
fwrite($kin, 'more info');

fsync($kin);
fclose($kin);

在末尾添加fsync()调用确保了 PHP 或 OS 的内部缓冲区中保存的任何数据都被写入存储。在此之前,所有其他代码的执行都将被阻止。

它的相关功能是fdatasync()。使用它来同步数据,但不一定是元数据。对于元数据不重要的数据,这个函数调用会使写入过程稍微快一点。

然而,你应该注意到 PHP 8.1 还不完全支持 Windows 上的fdatasync()。它只是充当fsync()的别名。在 POSIX 上,fdatasync()被正确地实现了。

array_is_list()功能

PHP 数组可以保存整数和字符串键。这意味着您可以将它们用于多种用途,包括列表、哈希表、字典、集合、堆栈、队列等等。您甚至可以在数组中包含数组,从而创建多维数组。

您可以有效地检查一个特定的条目是否是一个数组,但是要检查它是否有任何缺失的数组偏移量、乱序键等就不那么容易了。简而言之,您无法快速验证一个数组是否是一个列表。

array_is_list()函数检查一个数组的键是否从0开始按顺序排列,并且没有间隔。如果所有条件都满足,它将返回true。默认情况下,对于空数组,它也返回true

下面是几个在满足truefalse条件的情况下使用它的例子:

// true array_is_list() examples
array_is_list([]); // true
array_is_list([1, 2, 3]); // true
array_is_list(['cats', 2, 3]); // true
array_is_list(['cats', 'dogs']); // true
array_is_list([0 => 'cats', 'dogs']); // true
array_is_list([0 => 'cats', 1 => 'dogs']); // true 

// false array_is_list() examples 
array_is_list([1 => 'cats', 'dogs']); // as first key isn't 0
array_is_list([1 => 'cats', 0 => 'dogs']); // keys are out of order
array_is_list([0 => 'cats', 'bark' => 'dogs']); // non-integer keys
array_is_list([0 => 'cats', 2 => 'dogs']); // gap in between keys 

带有乱序键的 PHP 数组列表是 bug的潜在来源。在继续执行代码之前,使用这个函数强制严格遵守列表的要求是 PHP 的一个很好的补充。

钠 XChaCha20 的新功能

钠是一个现代的,易于使用的加密库,用于加密,解密,密码散列,签名等等。PECL lib 钠包为钠添加了一个包装器,以便 PHP 开发人员可以使用它。

甚至像脸书、Discord、Malwarebytes 和 Valve 这样的领先科技公司也使用 like 来保证他们用户的快速安全连接。

libna 支持 XChaCha20 加密算法对数据进行加密和解密,尤其是流加密。同样,PECL lib 钠扩展已经支持 XChaCha20,但只支持 Poly1305 消息认证代码。

许多 PHP 应用程序直接使用 XChaCha20 进行流加密。为了使事情变得更简单,从 PHP 8.1 开始,您将有三个新的函数来使用 XChaCha20 加密或解密数据,而不涉及身份验证。这种模式称为“分离模式”

新引入的 XChaCha20 函数有:

  • sodium_crypto_stream_xchacha20_keygen:返回一个安全的随机密钥,用于钠 _ 加密 _ 流 _xchacha20。
  • sodium_crypto_stream_xchacha20:将密钥和 nonce 扩展成伪随机字节的密钥流。
  • sodium_crypto_stream_xchacha20_xor:使用随机数和密钥加密消息(无认证)。

此外,在全局名称空间中定义了两个新的 PHP 常量:

  • SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES(分配的 32
  • SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES(已分配 24

但是要小心使用。由于没有认证,解密操作容易受到常见的密文攻击。

你可以在 GitHub 页面上阅读更多关于它的用法和要求。

新的 IntlDatePatternGenerator 类

PHP 的底层 ICU 库支持创建本地化的日期和时间格式,但它不是完全可定制的。

例如,如果您想在 PHP 8.0 之前创建特定于地区的数据和时间格式,您可以使用预定义的 IntlDateFormatter 常量以 6 种方式实现:

  • IntlDateFormatter::LONG : 更长,比如 2017 年 11 月 10 日或者 11:22:33pm**
    *** IntlDateFormatter::MEDIUM : 稍短一点,像 2017 年 11 月 10 日
    * IntlDateFormatter::SHORT : 只是数字,比如 10/11/17 或者 11:22pm****

其中每一个都有自己的RELATIVE_变量,它将日期格式设置在当前日期之前或之后的有限范围内。在 PHP 中,这些值是昨天的,今天的,明天的

******比如你想用长版本表示年份,用短版本表示月份,比如 10/11/2017 。从 PHP 8.0 开始,你不能。

在 PHP 8.1+中,可以使用新的 IntlDatePatternGenerator 类指定日期、月份和时间的格式。您可以将这些组件的确切顺序留给格式化程序。

您应该注意到,虽然这个类中只有单词 Date ,但是它与 ICU 的 DateTimePatternGenerator 是一致的。这意味着您还可以使用它来创建灵活的时间格式。为了简化命名,PHP 团队选择了更短的 IntlDatePatternGenerator 术语。

这里有一个直接来自其 RFC 的例子:

$skeleton = "YYYYMMdd";

$today = \DateTimeImmutable::createFromFormat('Y-m-d', '2021-04-24');

$dtpg = new \IntlDatePatternGenerator("de_DE");
$pattern = $dtpg->getBestPattern($skeleton);
echo "de: ", \IntlDateFormatter::formatObject($today, $pattern, "de_DE"), "\n";

$dtpg = new \IntlDatePatternGenerator("en_US");
$pattern = $dtpg->getBestPattern($skeleton), "\n";
echo "en: ", \IntlDateFormatter::formatObject($today, $pattern, "en_US"), "\n";

/*
de: 24.04.2021
en: 04/24/2021
*/

在上面的代码中,框架变量定义了要使用的特定日期或时间格式。但是,格式化程序处理最终结果的顺序。
T3】

支持 AVIF 图像格式

AVIF,或 AV1 图像文件格式,是基于 AV1 视频编码格式的相对较新的免版税的图像格式。除了提供更高的压缩率(因此文件更小),它还支持一些功能,如透明度、HDR 等。

AVIF 格式最近(2021 年 6 月 8 日)才标准化。这为 Chrome 85+和 Firefox 86+等浏览器铺平了道路,增加了对 AVIF 图像的支持。

PHP 8.1 的图像处理和 GD 扩展增加了对 AVIF 图像的支持。

然而,要包含这个功能,您需要编译具有 AVIF 支持的 GD 扩展。您可以通过运行下面的命令来做到这一点。

对于 Debian/Ubuntu:

apt install libavif-dev

对于 Fedora/RHEL:

dnf install libavif-devel

这将安装所有最新的依赖项。接下来,您可以通过用./configure脚本运行--with-avif标志来编译 AVIF 支持。

./buildconf --force
./configure --enable-gd --with-avif

如果您正在从头开始一个新环境,您也可以在这里启用其他 PHP 扩展。

安装后,您可以通过在 PHP 终端中运行以下命令来测试是否启用了 AVIF 支持:

php -i | grep AVIF

如果您已经正确安装了 AVIF,您将看到以下结果:

AVIF Support => enabled

您还可以使用gd_info()调用来检索 GD 特性的列表,包括是否启用了 AVIF 支持功能。

这个更新的 PHP 8.1 GD 扩展还增加了两个处理 AVIF 图像的新函数:imagecreatefromavifimageavif。它们的工作方式与 JPEG 和 PNG 类似。

函数从给定的 AVIF 图像中返回一个 GdImage 实例。然后,您可以使用此实例来编辑或转换图像。

另一个imageavif功能输出 AVIF 图像文件。例如,您可以使用它将 JPEG 转换为 AVIF:

$image = imagecreatefromjpeg('image.jpeg');
imageavif($image, 'image.avif');

你可以在 GitHub 页面上了解更多关于这项新功能的信息。

目录上传的新$_FILES: full_path

PHP 维护了大量预定义的变量来跟踪各种事情。其中一个是 $_FILES 变量,它保存了通过 HTTP POST 方法上传的条目的关联数组。

大多数现代浏览器支持上传整个目录HTML 文件上传字段。甚至 PHP 8.1 也支持这个功能,但是有一个很大的警告。你不能上传一个有确切目录结构或相对路径的文件夹,因为 PHP 没有将这些信息传递给$_FILES数组。

这在 PHP 8.1 中有所改变,在数组$_FILES中添加了一个名为full_path的新键。使用这些新数据,您可以在服务器上存储相对路径或复制精确的目录结构。

您可以通过使用var_dump($_FILES);命令输出$FILES数组来测试这些信息。

但是,如果您正在使用此功能,请谨慎操作。确保您防范了标准文件上传攻击

字符串键数组的数组解包支持

PHP 7.4 增加了对数组展开操作符 的数组解包支持。它是使用array_merge()功能的一种更快捷的替代方式。但是,这个特性仅限于数字键数组,因为在合并具有重复键的数组时,解包字符串键数组会导致冲突。

然而,PHP 8 增加了对命名参数的支持,消除了这一限制。因此,数组解包现在也支持使用相同语法的字符串键数组:

$array = [...$array1, ...$array2];

这个 RFC 示例展示了 PHP 8.1 中如何处理合并具有重复字符串键的数组:

$array1 = ["a" => 1];
$array2 = ["a" => 2];
$array = ["a" => 0, ...$array1, ...$array2];
var_dump($array); // ["a" => 2]

这里,字符串键“a”在通过数组解包合并之前出现了三次。但只有属于$array2的最后一个值获胜。

显式八进制数字符号

PHP 支持各种数字系统,包括十进制(基数为 10)、二进制(基数为 2)、八进制(基数为 8)和十六进制(基数为 16)。十进制数字系统是默认的。

如果你想使用任何其他的数字系统,那么你必须给每个数字加上一个标准的前缀:

  • 十六进制: 0x前缀。(例如 17 = 0x11)
  • 二进制: 0b前缀。(例如 3 = 0b11)
  • 八进制: 0前缀。(例如 9 = 011)

你可以看到八进制数字系统的前缀是如何不同的。为了使这种担心标准化,许多编程语言都增加了对显式八进制数字符号的支持:0o0O

从 PHP 8.1 开始,你可以把上面显示的例子(即十进制的数字 9)在八进制数值系统中写成0o11或者0O11

0o16 === 14; // true
0o123 === 83; // true

0O16 === 14; // true
0O123 === 83; // true

016 === 0o16; // true
016 === 0O16; // true

此外,这个新特性还支持 PHP 7.4 中引入的数字字符分隔符。

在 RFC 中阅读更多关于 PHP 8.1 的新特性。

MurmurHash3 和 xxHash 哈希算法支持

PHP 8.1 增加了对 MurmurHash3 和 xxHash 哈希算法的支持。它们不是为加密使用而设计的,但它们仍然提供了令人印象深刻的输出随机性、分散性和唯一性。

这些新的散列算法比大多数 PHP 现有的散列算法更快。事实上,这些散列算法的一些变体比 RAM 吞吐量更快。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

由于 PHP 8.1 还增加了对声明特定于算法的$options参数的支持,您可以对这些新算法做同样的事情。这个新参数的默认值是[]。因此,它不会影响我们现有的任何哈希函数。

你可以在他们的 GitHub 页面上阅读更多关于这些 PHP 8.1 新特性的内容: MurmurHash3xxHash算法特定的$options

HTTPS 域名系统(DoH)支持

HTTPS 域名系统(DoH)是通过 HTTPS 协议进行域名解析的协议。使用 HTTPS 加密客户端和 DNS 解析器之间的数据,DoH 通过防止 MitM 攻击来提高用户隐私和安全性。

从 PHP 8.1 开始,您可以使用 Curl 扩展来指定 DoH 服务器。它要求 PHP 用 libcurl 7.62+版本编译。对于大多数流行的操作系统来说,这不是问题,包括 Linux 发行版,因为它们通常包含 Curl 7.68+。

您可以通过指定CURLOPT_DOH_URL选项来配置 DoH 服务器 URL。

$doh = curl_init('https://kinsta.com');
curl_setopt($doh, CURLOPT_DOH_URL, 'https://dns.google/dns-query');
curl_exec($doh);

在上面的例子中,我们使用了 Google 的公共 DNS 服务器。另外,请注意在所有使用的 URL 中使用了https://。确保配置完美,因为 Curl 中没有默认的 DNS 服务器。

您还可以从 Curl 文档中包含的公共 DoH 服务器列表中选择。

此外,Curl 文档的 CURLOPT_DOH_URL 引用详细解释了如何使用它的各种参数。

使用 CURLStringFile 从字符串上传文件

PHP Curl 扩展支持带有文件上传的 HTTP(S) 请求。它使用 CURLFile 类来实现这一点,该类接受 URI 或文件路径、mime 类型和最终文件名。

然而,使用 CURLFile 类,您只能接受文件路径或 URI,而不能接受文件本身的内容。如果您已经在内存中上传了文件(如处理过的图像、XML 文档、pdf),您必须使用 Base64 编码的data:// URIs。

但是 libcurl 已经支持一种更简单的方式来接受文件的内容。新的 CURLStringFile 类正是为此增加了支持。

你可以阅读它的 GitHub 页面来了解它在 PHP 8.1 中是如何实现的。

新的MYSQLI_REFRESH_REPLICA常数

PHP 8.1 的 mysqli 扩展增加了一个名为MYSQLI_REFRESH_REPLICA的新常量。相当于现有的MYSQLI_REFRESH_SLAVE常数。

这一变化在 MySQL 8.0.23 中受到欢迎,以解决技术词汇中的种族不敏感问题(最常见的例子包括“slave”和“master”)。

您应该注意到旧的常量不会被删除或废弃。开发人员和应用程序可以继续使用它。这个新的常数只是开发者和公司的一个选择,他们希望不再使用这些术语。

继承缓存的性能改进

继承缓存是 opcache 的新增功能,它消除了 PHP 类继承的开销。

PHP 类分别被 opcache 编译和缓存。然而,它们已经在运行时对每个请求进行了链接。这个过程可能涉及几次兼容性检查和从父类和特征借用方法/属性/常数。

因此,即使每个请求的结果都是相同的,这也需要相当长的时间来执行。

继承缓存链接所有唯一的依赖类(父类、接口、特征、属性类型、方法),并将结果存储在 opcache 共享内存中。因为这种情况现在只发生一次,所以继承需要更少的指令。

此外,它消除了对不可变类的限制,例如未解析的常数、类型化属性和协变类型检查。因此,存储在 opcache 中的所有类都是不可变的,这进一步减少了所需的指令数量。

总而言之,它承诺显著的性能优势。这个补丁的作者 Dimitry Stogov 发现,它比基本的 Symfony“Hello,World!”有 8%的改进程序。我们迫不及待地想在下面的 PHP 基准测试中测试它。

一级可调用语法

PHP 8.1 增加了一个一级可调用语法来取代现有的使用字符串和数组的编码。除了创建一个更干净的闭包之外,这个新语法也可以被静态分析工具访问,并且遵守声明的范围。

这里有一些来自 RFC 的例子:

$fn = Closure::fromCallable('strlen');
$fn = strlen(...);

$fn = Closure::fromCallable([$this, 'method']);
$fn = $this->method(...)

$fn = Closure::fromCallable([Foo::class, 'method']);
$fn = Foo::method(...);

这里,所有的表达式对都是等价的。三点( )语法类似于参数解包语法(...$args)。除此之外,参数尚未填写。

PHP 8.1 中的变化

PHP 8.1 还包括对其现有语法和特性的改变。让我们来讨论一下:

PHP 交互式 Shell 需要 readline 扩展

PHP 的 readline 扩展支持交互 shell 特性,比如导航、自动完成、编辑等等。虽然它与 PHP 捆绑在一起,但默认情况下是不启用的。

您可以使用 PHP CLI 的-a命令行选项来访问 PHP 交互式 shell:

php -a

Interactive shell

php >
php > echo "Hello";
Hello
php > function test() {
php { echo "Hello";
php { }
php > test();
Hello

在 PHP 8.1 之前,即使没有启用 readline 扩展,您也可以使用 PHP CLI 打开交互式 shell。不出所料,shell 的交互特性没有起作用,使得-a选项变得毫无意义。

在 PHP 8.1 CLI 中,如果您还没有启用 readline 扩展,交互式 shell 会退出并显示一条错误消息。

php -a
Interactive shell (-a) requires the readline extension.

MySQLi 默认错误模式设置为异常

在 PHP 8.1 之前, MySQLi 默认沉默错误。这种行为经常导致代码不遵循严格的错误/异常处理。开发人员必须实现他们自己的显式错误处理功能。

PHP 8.1 通过将 MySQLi 的默认错误报告模式设置为抛出异常来改变这种行为。

Fatal error: Uncaught mysqli_sql_exception: Connection refused in ...:...

由于这是一个突破性的变化,对于 PHP <8.1 版本,您应该在建立第一个 MySQLi 连接之前使用mysqli_report函数显式设置错误处理模式。或者,您也可以通过实例化一个mysqli_driver实例来选择错误报告值。

RFC 遵循了 PHP 8.0 中引入的类似变化。

CSV 书写功能的可定制行尾

在 PHP 8.1 之前,PHP 内置的 CSV 编写函数fputcsvSplFileObject::fputcsv被硬编码为在每一行的末尾添加\n(或者换行符)。

PHP 8.1 为这些函数增加了对名为eol的新参数的支持。您可以使用它来传递可配置的行尾字符。默认情况下,它仍然使用\n字符。因此,您可以在现有代码中继续使用它。

标准字符转义规则适用于使用行尾字符。如果要使用\r\n\r\n作为 EOL 字符,必须用双引号将它们括起来。

下面是跟踪这一新变化的 GitHub 页面。

新的version_compare操作员限制

PHP 的version_compare()函数比较两个版本号字符串。这个函数接受可选的第三个参数operator来测试特定的关系。

虽然文档中没有明确介绍,但是在 PHP 8.1 之前,您可以将该参数设置为部分值(例如gln),而不会遇到错误。

PHP 8.1 对version_compare()函数的operator参数增加了更严格的限制来克服这种情况。您现在可以使用的唯一运算符是:

  • ===情商
  • !=< >ne
  • >gt
  • > =
  • <lt
  • < =

不再有部分运算符值

需要一个给你带来竞争优势的托管解决方案吗?Kinsta 为您提供了令人难以置信的速度、一流的安全性和自动伸缩功能。查看我们的计划

HTML 编码和解码函数现在使用ENT_QUOTES | ENT_SUBSTITUTE

HTML 实体是字符的文本表示,否则会被解释为 HTML。想想<>这样的字符用来定义 HTML 标签(比如<a><h3><script>)。

<的 HTML 实体是& lt;(小于符号)>& gt;(大于符号)。

注意:去掉“&和“amp”之间的空格

您可以在 HTML 文档中安全地使用这些 HTML 实体,而无需触发浏览器的呈现引擎。

例如,& lt;script& gt;将在浏览器中显示为<script>,而不是被解释为 HTML 标签。

在 PHP 8.1 之前, htmlspecialchars()htmlentities() 函数将类似于**"**<>&的符号转换成它们各自的 HTML 实体。但是默认情况下,他们没有将单引号字符(**'**)转换为 HTML 实体。此外,如果文本中有格式错误的 UTF-8,它们会返回一个空字符串。

在 PHP 8.1 中。,这些 HTML 编码和解码函数(以及它们的相关函数)也会在默认情况下将单引号字符转换成它们的 HTML 实体。

如果给定的文本包含无效字符,函数将使用 Unicode 替换字符(ᦅ)来替换它们,而不是返回空字符串。PHP 8.1 通过将这些函数的签名改为ENT_QUOTES | ENT_SUBSTITUTE而不是默认的ENT_COMPAT来实现这一点。

大多数框架已经使用ENT_QUOTES作为默认标志值。所以,你不会因为这个改变而看到太多的不同。然而,新的ENT_SUBSTITUTE标志并没有被广泛使用。PHP 8.1 将导致无效的 UTF-8 字符被替换为\u 字符,而不是返回一个空字符串。

关于非法压缩函数调用的警告

PHP 的compact()函数超级好用。您可以使用它来创建一个数组,数组中的变量使用它们的名称和值。

例如,考虑以下代码:

$animal = 'Cat';
$sound = 'Meow';
$region = 'Istanbul';
compact('animal', 'sound', 'region');
// ['animal' => "Cat", 'sound' => "Meow", 'region' => "Istanbul"]

compact 函数的文档声明它只接受字符串参数或带有字符串值的数组值。然而,在 PHP 7.3 之前,任何未设置的字符串都会被忽略。

PHP 7.3 修改了compact()函数,如果你使用了未定义的变量,它会给出提示。PHP 8.1 更进了一步,抛出了一个警告。

你可以阅读它的 GitHub 页面来了解这个变化是如何发生的。

从资源到类对象的新迁移

PHP 的长期目标之一是将从资源转移到标准类对象

由于历史原因,资源对象在 PHP 应用程序中被广泛使用。因此,资源向类对象的迁移需要尽可能少的中断。PHP 8.1 迁移了五种这样的资源:

file_info资源迁移到了finfo对象

PHP 的 finfo 类fileinfo函数提供了一个面向对象的接口。然而,使用finfo函数返回的是file_info类型的resource对象,而不是finfo类本身的一个实例。

PHP 8.1 修复了这个异常

IMAP 资源迁移到IMAP\Connection类对象

根据资源到对象的迁移目标,当 PHP 最终修改类的实现细节时,新的IMAP\Connection类最小化了潜在的破坏性变化。

这个新类也被声明为final,所以你不允许extend它。

在 GitHub 页面上阅读更多关于它的实现。

FTP 连接资源现在是FTP\Connection类对象

在带有ftp_connect()ftp_ssl_connect()函数的 PHP <8.1, if you create an FTP 连接中,你会得到一个 ftp 类型的资源对象。

PHP 8.1 增加了新的FTP\Connection类来纠正这个问题。和IMAP\Connection类一样,它也被声明为final以防止它被扩展。

在 GitHub 页面上阅读更多关于的实现

字体标识符迁移到GdFont类对象

PHP 的 GD 扩展提供了 imageloadfont()函数来加载用户定义的位图并返回其字体标识符资源 ID(一个整数)。

在 PHP 8.1 中,这个函数将返回一个 GdFont 类实例。此外,为了使迁移更容易,所有以前接受来自imageloadfont()的资源 ID 的函数现在将接受新的 GdFont 类对象。

在 GitHub 页面上阅读更多关于这次迁移的信息。

LDAP 资源迁移到对象

LDAP 或轻量级目录访问协议用于访问“目录服务器”像硬盘目录结构一样,它是一个独特的数据库,以树形结构保存数据。

在 PHP 8.1 之前,PHP 包含了一个接受或返回资源对象的 LDAP 扩展。然而,它们现在都无缝地迁移到了新的类实例中。已经过渡的资源类型有:

  • ldap link资源到\LDAP\Connection类对象
  • ldap result资源到\LDAP\Result类对象
  • ldap result entry资源到\LDAP\ResultEntry类对象

浏览它的 GitHub 页面来更好地理解这次迁移。

Pspell 资源现在是类对象

PHP 的 Pspell 扩展允许你检查拼写和单词建议。

PHP <8.1 使用了带有整数标识符的pspellpspell config资源对象类型。这两个资源对象现在被替换为PSpell\DictionaryPSpell\Config类对象。

像以前的迁移一样,以前接受或返回资源对象标识符的所有 Pspell 函数将接受新的类对象实例。

更多信息请参考其 GitHub 页面

php 8.1 中的解除

PHP 8.1 摒弃了之前的许多特性。以下列表简要概述了 PHP 8.1 不支持的功能:

无法将null传递给不可为空的内部函数参数

从 PHP 8.0 开始,它的内部函数默默地接受null值,即使是不可空的参数。这不适用于用户定义的函数——它们只接受可空参数的null

例如,考虑这种用法:

var_dump(**str_contains**("foobar", null));
// bool(**true**)

这里,null值被悄悄地转换成一个空字符串。因此,结果返回true

这个 RFC 旨在通过在 PHP 8.1 中抛出一个弃用警告来同步内部函数的行为。

var_dump(str_contains("foobar", null));
// Deprecated: Passing null to argument of type string is deprecated

弃用将成为下一个主要 PHP 版本(即 PHP >=9.0)中的 TypeError,使内部函数的行为与用户定义的函数保持一致。

受限使用

PHP 的$GLOBALS变量提供了对其内部符号表的直接引用。支持此功能非常复杂,并且会影响阵列操作性能。另外,它很少被使用。

根据RFC,不再允许间接修改$GLOBALS。这种变化是向后不兼容的。

这种变化的影响相对较小:

在排名前 2k 的 composer 包中,我发现了 [23 个使用\(GLOBALS*](https://gist.github.com/nikic/9fd95866f9811b349b947f63214ad7a9) *而没有直接删除它的例子。根据粗略的检查,只有两种情况下****\) GLOBALS**不是以只读方式使用的。

然而,$GLOBALS的只读用法仍然照常工作。不再支持的是整体写入$GLOBALS。因此,您可以预期会有轻微的性能提升,尤其是在使用普通 PHP 数组时。

内部函数的返回类型声明

PHP 8.0 允许开发人员为大多数内部函数和方法声明参数和返回类型。这要感谢各种 RFC,比如内部函数的一致类型错误联合类型 2.0混合类型 v2

但是,在许多情况下,类型信息可能会丢失。其中一些包括带资源的类型、 out 按引用传递参数、非最终方法的返回类型以及不根据一般规则解析参数的函数或方法。你可以在 its RFC 中读到确切的细节。

这个 RFC 只解决了非 final 方法的返回类型的问题。然而,PHP 团队并没有立即完全淘汰它,而是提供了一个渐进的迁移路径,用相关的方法返回类型更新您的代码库。

在 PHP 8.1 中,非最终的内部方法返回类型——如果可能的话——是暂时声明的,而在 PHP 9.0 中,它们将被强制执行。这意味着在 PHP 8.x 版本中,当一个内部方法以返回类型不兼容的方式被覆盖时,在继承检查期间会发出一个“不推荐使用”的通知,PHP 9.0 会使这些成为致命错误。

如果您在更新到 PHP 8.1 后看到这个反对通知,请确保更新您的方法的返回类型。

可序列化接口已弃用

PHP 7.4 引入了自定义对象序列化机制和两个新的神奇方法:__serialize()__unserialize()。这些新方法旨在最终取代破损的可串行化接口。

这个 RFC 提议通过制定一个最终移除 Serializable 的计划来最终决定。

在 PHP 8.1 中,如果实现了 Serializable 接口而没有实现__serialize()__unserialize()方法,PHP 将抛出“已弃用”警告。

Deprecated: The Serializable interface is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in ... on line ...

如果你正在支持 PHP < 7.4PHP > =7.4 ,你应该实现可串行化接口和新的魔法方法。在 PHP > =7.4 版本中,魔法方法将优先使用。

不兼容的floatint转换已弃用

PHP 是一种动态类型语言。因此,在许多情况下,类型强制会自然发生。这些强制手段大多无伤大雅,超级方便。

然而,当一个浮点数被转换成一个整数时,往往会涉及数据丢失。例如,当浮点数 3.14 转换为整数 3 时,它会丢失其小数值。

当浮点超出平台整数范围时,或者当浮点字符串被转换为整数时,也会发生同样的情况。

PHP 8.1 纠正了这种行为,并使其动态类型强制更符合大多数现代编程语言。目标是让这种胁迫变得可预测和直观。

在 PHP 8.1 中,当一个不兼容的 float 被隐式强制转换成一个 int 时,你会看到一个弃用通知。但是什么构成了整数兼容的浮点数呢?RFC这样回答:

如果一个浮点数具有以下特征,那么称它是整数兼容的:

  • 是一个数(即不是 NaN 或无穷大)
  • 在 PHP 整数的范围内(取决于平台)
  • 没有小数部分

这个弃用通知将在下一个主要 PHP 版本(即 PHP 9.0)中升级为 TypeError

不推荐使用mysqli::get_client_info方法和mysqli_get_client_info($param)

MySQL 客户端 API 定义了两个常量:client_info(一个字符串)和client_version(一个 int)。MySQL 本地驱动程序(MySQLnd)是官方 PHP 源代码的一部分,它将这些常量与 PHP 版本绑定在一起。在 libmysql 中,它们表示编译时的客户端库版本。

在 PHP 8.1 之前,mysqli 以 4 种方式公开这些常量:mysqli_driver属性、mysqli **properties**mysqli_get_client_info()函数和mysqli::get_client_info方法。尽管如此,client_version还是没有办法。

MySQLnd 以两种方式向 PHP 公开这些常量:常量和函数调用。为了用这两个选项统一 mysqli 访问方法,PHP 8.1 放弃了另外两个选项:

  • mysqli 类中的get_client_info方法。相反,您可以只使用mysqli_get_client_info()功能。
  • mysqli_get_client_info()带参数的函数。调用不带任何参数的函数以避免不推荐通知。

在 GitHub 页面上阅读更多关于这种反对的信息。

所有的mhash*()函数(散列扩展)都被否决

PHP 5.3 将mhash*()函数集成到ext/hash中,作为ext/mhash的兼容层。后来 PHP 7.0 去掉了ext/mhash

hash_*()函数不同,mhash*()函数并不总是可用的。在配置 PHP 时,您必须分别启用它们。

在 PHP 7.4 中,hash 扩展与 PHP 捆绑在一起,成为 PHP 的默认扩展。然而,出于兼容性原因,它仍然支持启用--enable-mhash选项。

PHP 团队已经决定在 PHP 8.1 中弃用 mhash*()函数,并在 PHP 9.0 中将其全部移除。不推荐使用的功能有mhash()mhash_keygen_s2k()mhash_count()mhash_get_block_size()mhash_get_hash_name()。您可以使用标准的ext/hash功能来代替它们。

不推荐使用filter.defaultfilter.default_options INI 设置

PHP 的filter.default INI 设置允许您将过滤器应用于所有 PHP 超级全局变量——即 GPCRS 数据($_GET$_POST$_COOKIE$_REQUEST$_SERVER)。

比如可以设置filter.default=magic_quotes或者filter.default=add_slashes(基于 PHP 版本)复活 PHP 的有争议且不安全的魔语录功能(在 PHP 5.4 中已移除)。

INI 设置通过允许更多的过滤器来提供额外的功能,使它变得更糟。例如,它的另一个选项——filter.default=special_chars——只为 HTML 启用魔术引号。人们对这些环境的意识要少得多。

如果filter.default被设置为除了unsafe_raw(默认值)之外的任何值,PHP 8.1 将抛出一个反对警告。你不会看到单独的反对filter.default_options的通知,但是 PHP 9.0 会删除这两个 INI 设置。

或者,您可以开始使用 filter_var() 函数。它用指定的过滤器过滤变量。

反对上的autovivification

PHP 允许自动验证(从假值自动创建数组)。如果变量未定义,这个特性非常有用。

尽管如此,当值为 false 或 null 时,自动创建数组并不理想。

RFC 不允许自动验证为假值。但是,请注意,来自未定义变量和 null 的自动验证仍然是允许的。

在 PHP 8.1 中,向 false 类型的变量追加将发出一个反对通知:

Deprecated: Automatic conversion of false to array is deprecated in

PHP 9.0 将抛出一个致命错误,这与其他标量类型相同。

mysqli_driver->driver_version属性已被否决

MySQLi 扩展的MySQLi _ driver->driver _ version属性已经 13 年没有更新了。尽管此后对驱动程序进行了许多更改,但它仍然返回旧的驱动程序版本值,使该属性变得毫无意义。

在 PHP 8.1 中,mysqli _ driver->driver _ version 属性被弃用

其他小改动

PHP 8.1 中还有多得多的弃用。把它们都列在这里将是一项令人疲惫的工作。我们建议您直接检查 RFC 中的这些次要折旧。4

PHP 的 GitHub 页面还包括一个 PHP 8.1 升级说明指南。它列出了在升级到 PHP 8.1 之前你应该考虑的所有重大变化。

Are you excited for PHP 8.1? 👀 Check out all the new features in this post 🚀Click to Tweet

摘要

PHP 8.1 比它的前任更好,这是一个不小的成就。我们认为 PHP 8.1 最令人兴奋的特性是枚举、纤程、纯交集类型以及它的许多性能改进。此外,我们迫不及待地想测试 PHP 8.1,并对各种 PHP 框架CMSs 进行基准测试。

请确保将这篇博客文章加入书签,以供将来参考。

你最喜欢 PHP 8.1 的哪个特性?请在下面的评论区与社区分享您的想法。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。**********

PHP 8.2 的新特性——新特性、弃用、变化等等

原文:https://kinsta.com/blog/php-8-2/

PHP 8.2 建立在由 PHP 8.0PHP 8.1 提出的更新基础之上。既然 PHP 8.2 已经发布,让我们详细介绍一下 PHP 8.2 中的新特性——从它的新特性和改进到弃用和小改动,我们将一一介绍。

随着 PHP 8.2 于 2022 年 7 月 19 日进入特性冻结期,你可以预期这个列表不会有重大的增加。

激动吗?我们也是。

我们开始吧!

PHP 8.2 的新特性和改进

让我们从探索所有最新的 PHP 8.2 特性开始。这是一个很长的列表:

新的readonly

PHP 8.1 为类属性引入了 readonly特性。现在,PHP 8.2 增加了对声明整个类为readonly 的支持。

如果你声明一个类为readonly,它的所有属性将自动继承readonly特性。因此,声明一个类readonly等同于将每个类属性声明为readonly

例如,在 PHP 8.1 中,您必须编写这段冗长的代码来将所有类属性声明为readonly:

class MyClass
{
public readonly string $myValue,
public readonly int $myOtherValue
public readonly string $myAnotherValue
public readonly int $myYetAnotherValue
}

想象一下更多的属性也是如此。现在,有了 PHP 8.2,你可以这样写:

readonly class MyClass
{
public string $myValue,
public int $myOtherValue
public string $myAnotherValue
public int $myYetAnotherValue
}

也可以将抽象类或最终类声明为readonly。在这里,关键字的顺序并不重要。

abstract readonly class Free {}
final readonly class Dom {}

也可以声明一个没有属性的readonly类。这有效地防止了动态属性,同时仍然允许子类显式声明它们的readonly属性。

接下来,readonly类只能包含类型化属性——声明单个只读属性的规则相同。

如果不能声明严格类型属性,可以使用mixed类型属性。

试图声明一个没有类型化属性的readonly类将导致致命错误:

readonly class Type {
    public $nope;
}
Fatal error: Readonly property Type::$nope must have type in ... on line ... 

此外,您不能为某些 PHP 特性声明readonly:

试图将这些特性中的任何一个声明为readonly都会导致解析错误。

readonly interface Destiny {}
Parse error: syntax error, unexpected token "interface", expecting "abstract" or "final" or "readonly" or "class" in ... on line ...

和所有 PHP 关键字一样,readonly关键字不区分大小写。

PHP 8.2 也不赞成动态属性(稍后会详细介绍)。但是您不能阻止将动态属性添加到类中。然而,对一个readonly类这样做只会导致致命的错误。

Fatal error: Readonly property Test::$test must have type in ... on line ...

允许truefalsenull作为独立类型

PHP 已经包含了标量类型,如intstringbool。这在 PHP 8.0 中得到了扩展,增加了联合类型,允许不同类型的值。同一个 RFC 还允许使用falsenull作为联合类型的一部分——但是不允许它们作为独立类型。

如果您试图将falsenull声明为独立类型——而不是联合类型的一部分——就会导致致命错误。

function spam(): null {}
function eggs(): false {}

Fatal error: Null can not be used as a standalone type in ... on line ...
Fatal error: False can not be used as a standalone type in ... on line ...

为了避免这种情况,PHP 8.2 增加了对使用 falsenull 作为独立类型的支持。有了这个补充,PHP 的类型系统更有表现力,也更完整。现在,您可以精确地声明返回、参数和属性类型。

此外,PHP 仍然没有包含一个true类型,它似乎是false类型的自然对应。PHP 8.2 修复了这个问题,也增加了对true类型的支持。它不允许强制,就像false类型的行为一样。

truefalse类型本质上都是 PHP 的bool类型的联合类型。为了避免冗余,不能在一个联合类型中同时声明这三种类型。这样做会导致编译时致命错误。

析取范式(DNF)类型

析取范式(DNF) 是组织布尔表达式的标准化方式。它由连接词的析取组成——用布尔术语来说,就是一个或 and

将 DNF 应用于类型声明允许以一种标准的方式编写解析器可以处理的联合和交集类型。如果使用得当,PHP 8.2 的新 DNF 类型特性简单而强大。

RFC 给出了下面的例子。它假设下列接口和类定义已经存在:

interface A {}
interface B {}
interface C extends A {}
interface D {}

class W implements A {}
class X implements B {}
class Y implements A, B {}
class Z extends Y implements C {}

使用 DNF 类型,可以对属性、参数和返回值执行类型声明,如下所示:

// Accepts an object that implements both A and B,
// OR an object that implements D
(A&B)|D

// Accepts an object that implements C, 
// OR a child of X that also implements D,
// OR null
C|(X&D)|null

// Accepts an object that implements all three of A, B, and D, 
// OR an int, 
// OR null.
(A&B&D)|int|null

在某些情况下,属性可能不是 DNF 形式。这样声明它们会导致解析错误。但是您总是可以将它们重写为:

A&(B|D)
// Can be rewritten as (A&B)|(A&D)

A|(B&(D|W)|null)
// Can be rewritten as A|(B&D)|(B&W)|null

您应该注意,DNF 类型的每个段必须是唯一的。例如,声明(A&B)|(B&A)无效,因为两个 ed 段在逻辑上是相同的。

除此之外,作为另一个段的严格子集的段也是不允许的。这是因为超集已经拥有了子集的所有实例,所以使用 DNF 是多余的。

修订回溯中的敏感参数

像几乎所有的编程语言一样, PHP 允许在代码执行的任何时候跟踪它的调用栈。堆栈跟踪使得调试代码以修复错误和性能瓶颈变得容易。它构成了像 Kinsta APM ,我们为 WordPress 站点定制的性能监控工具这样的工具的主干。

Tracking slow WooCommerce transactions through the Kinsta APM tool.

Tracking slow WooCommerce transactions with Kinsta APM.

执行堆栈跟踪不会停止程序的执行。通常情况下,大多数堆栈跟踪在后台运行,并被静默记录,以便日后需要时进行检查。

然而,如果您与第三方服务共享这些详细的 PHP 堆栈跟踪,其中一些可能是一个缺点——通常用于错误日志分析,错误跟踪等。这些堆栈跟踪可能包括敏感信息,如用户名、密码和环境变量。

RFC 提案给出了一个这样的例子:

一个常见的“违规者”是 PDO,它将数据库密码作为构造函数参数,并立即尝试在构造函数中连接到数据库,而不是拥有一个纯构造函数和一个 separate - > connect() 方法。因此,当数据库连接失败时,堆栈跟踪将包括数据库密码:

PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/html/test.php:3

Stack trace: #0 /var/www/html/test.php(3): PDO->__construct('mysql:host=loca...', 'root', 'password')

#1 {main}

PHP 8.2 允许你用一个新的\SensitiveParameter属性标记这些敏感参数。任何标记为敏感的参数都不会在回溯中列出。因此,您可以与任何第三方服务共享它们。

这里有一个简单的例子,只有一个敏感参数:

<?php

function example(
    $ham,
    #[\SensitiveParameter] $eggs,
    $butter
) {
    throw new \Exception('Error');
}

example('ham', 'eggs', 'butter');

/*
Fatal error: Uncaught Exception: Error in test.php:8
Stack trace:
#0 test.php(11): test('ham', Object(SensitiveParameterValue), 'butter')
#1 {main}
thrown in test.php on line 8
*/

当您生成一个回溯时,任何带有\SensitiveParameter属性的参数都将被替换为一个\SensitiveParameterValue对象,并且它的真实值永远不会存储在跟踪中。SensitiveParameterValue对象封装了实际的参数值——如果你出于任何原因需要它的话。

新的mysqli_execute_query功能和mysqli::execute_query方法

您是否曾经使用带有危险转义用户值的mysqli_query()函数来运行一个参数化的 MySQLi 查询?

PHP 8.2 通过新的mysqli_execute_query($sql, $params)函数和mysqli::execute_query方法使得运行参数化 MySQLi 查询变得更加容易

本质上,这个新函数是mysqli_prepare()mysqli_execute()mysqli_stmt_get_result()函数的组合。有了它,MySQLi 查询将在函数本身中准备、绑定(如果传递任何参数)和执行。如果查询成功运行,它将返回一个mysqli_result对象。如果不成功,它将返回false

RFC 提案给出了一个简单而有力的例子:

foreach ($db->execute_query('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)', [$name, $type1, $type2]) as $row) {
print_r($row);
}

获取const表达式中的enum属性

这个 RFC 提议允许->/?->操作符在const表达式中获取 enum 属性。

这个新特性的主要原因是你不能在某些地方使用enum对象,比如数组键。在这种情况下,您必须重复enum case 的值才能使用它。

允许在不允许使用enum对象的地方获取enum属性可以简化这个过程。

这意味着以下代码现在有效:

const C = [self::B->value => self::B];

为了安全起见,这个 RFC 还包括对 nullsafe 操作符?->的支持。

特征中允许常量

PHP 包含了一种重用代码的方法,称为 Traits。它们非常适合跨类重用代码。

目前,Traits 只允许定义方法和属性,而不允许定义常量。这意味着您不能在特征本身中定义特征所期望的不变量。为了绕过这个限制,您需要在它的组成类或由它的组成类实现的接口中定义常量。

该 RFC 提议允许在特征中定义常数。可以像定义类常量一样定义这些常量。这个直接取自 RFC 的例子澄清了它的用法:

trait Foo {
    public const FLAG_1 = 1;
    protected const FLAG_2 = 2;
    private const FLAG_3 = 2;

    public function doFoo(int $flags): void {
        if ($flags & self::FLAG_1) {
            echo 'Got flag 1';
        }
        if ($flags & self::FLAG_2) {
            echo 'Got flag 2';
        }
        if ($flags & self::FLAG_3) {
        echo 'Got flag 3';
        }
    }
}

Trait 常量也被合并到构成类的定义中,就像 Trait 的属性和方法定义一样。它们也有类似的限制作为性状的属性。正如 RFC 中所提到的,这个提议——虽然是一个好的开始——需要进一步的工作来充实这个特性。

php 8.2 中的解除

我们现在可以开始研究 PHP 8.2 中所有的不赞成之处。这个列表没有它的新特性那么大:

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now ### 弃用动态属性(和新的#[AllowDynamicProperties]属性)

在 PHP 8.1 之前,您可以在 PHP 中动态设置和检索未声明的类属性。例如:

class Post {
    private int $pid;
}

$post = new Post();
$post->name = 'Kinsta';

这里,Post类没有声明name`属性。但是因为 PHP 允许动态属性,所以可以在类声明之外设置它。这是它最大的——也可能是唯一的——优势。

动态属性允许代码中突然出现意想不到的错误和行为。例如,如果您在类外声明类属性时犯了任何错误,很容易就会失去对它的跟踪——尤其是在调试该类内的任何错误时。

从 PHP 8.2 开始,动态属性被弃用。为未声明的类属性设置值将在第一次设置该属性时发出反对通知。

class Foo {}
$foo = new Foo;

// Deprecated: Creation of dynamic property Foo::$bar is deprecated
$foo->bar = 1;

// No deprecation warning: Dynamic property already exists.
$foo->bar = 2;

然而,从 PHP 9.0 开始,同样的设置会抛出一个ErrorException`错误。

如果您的代码充满了动态属性——有很多 PHP 代码就是如此——并且如果您想在升级到 PHP 8.2 后停止这些反对通知,您可以使用 PHP 8.2 的新#[AllowDynamicProperties]属性来允许类上的动态属性。

#[AllowDynamicProperties]
class Pets {}
class Cats extends Pets {}

// You'll get no deprecation warning
$obj = new Pets;
$obj->test = 1;

// You'll get no deprecation warning for child classes
$obj = new Cats;
$obj->test = 1;

根据 RFC,标记为#[AllowDynamicProperties]的类及其子类可以继续使用动态属性,而不会被弃用或删除。

您还应该注意到,在 PHP 8.2 中,唯一标记为#[AllowDynamicProperties]的绑定类是stdClass。此外,通过__get()__set() PHP 魔法方法访问的任何属性都不被视为动态属性,因此它们不会抛出反对通知。

不推荐使用的部分支持的可调用程序

PHP 8.2 的另一个变化是不支持部分支持的可调用函数,尽管影响更小。

这些可调用程序被称为部分支持,因为您不能通过$callable()直接与它们交互。您只能通过call_user_func($callable)功能来访问它们。这种可调用的列表并不长:

"self::method"
"parent::method"
"static::method"
["self", "method"]
["parent", "method"]
["static", "method"]
["Foo", "Bar::method"]
[new Foo, "Bar::method"]

从 PHP 8.2 开始,任何调用此类可调用函数的尝试——比如通过call_user_func()array_map()函数——都会抛出一个不赞成警告。

最初的 RFC 给出了支持这种反对意见的可靠理由:

除了最后两种情况,所有这些调用都是上下文相关的。"self::method"引用的方法取决于从哪个类执行调用或可调用性检查。实际上,当以[new Foo, "parent::method"]的形式使用时,这通常也适用于后两种情况。

减少可调用程序的上下文依赖是这个 RFC 的次要目标。在这个 RFC 之后,唯一剩下的作用域依赖就是方法可见性:"Foo::bar"可能在一个作用域中可见,但在另一个作用域中不可见。如果将来可调用的方法被限制为公共方法(而私有方法将必须使用一级可调用的方法或Closure::fromCallable()来独立于范围),那么可调用的类型将被很好地定义,并可以被用作属性类型。但是,不建议将可见性处理的变更作为 RFC 的一部分。

按照最初的 RFC,is_callable()函数和callable类型将继续接受这些可调用的异常。但是直到 PHP 9.0 以后对它们的支持被完全移除。

为了避免混淆,这个弃用通知的范围被一个新的 RFC 扩展了——它现在包括了这些例外。

很高兴看到 PHP 朝着定义良好的callable类型发展。

弃用#utf8_encode()utf8_decode()功能

PHP 的内置函数utf8_encode()utf8_decode()将 ISO-8859-1(“latin1”)编码的字符串与 UTF-8 进行相互转换。

然而,它们的名字暗示了比它们的实现所允许的更广泛的用途。“Latin 1”编码通常会与其他编码混淆,如“Windows 代码页 1252”

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

此外,当这些函数不能正确转换任何字符串时,您通常会看到 Mojibake 。缺少错误信息也意味着很难发现它们,尤其是在大量清晰易读的文本中。

PHP 8.2 不赞成#utf8_encode()utf8_decode()函数。如果您调用它们,您将看到这些弃用通知:

Deprecated: Function utf8_encode() is deprecated
Deprecated: Function utf8_decode() is deprecated

RFC 建议使用 PHP 支持的扩展,比如mbstringiconvintl

反对${}字符串插值

PHP 允许以几种方式在带双引号(")和 heredoc ( <<<)的字符串中嵌入变量:

  1. 直接嵌入变量— “$foo”
  2. 变量外有大括号— “{$foo}”
  3. 美元符号后有大括号— “${foo}”
  4. 可变变量— “${expr}” —相当于使用(string) ${expr}

前两种方法各有利弊,后两种方法的语法复杂且相互冲突。PHP 8.2 不赞成最后两种字符串插值方式

你应该避免以这种方式插入字符串:

"Hello, ${world}!";
Deprecated: Using ${} in strings is deprecated

"Hello, ${(world)}!";
Deprecated: Using ${} (variable variables) in strings is deprecated

从 PHP 9.0 开始,这些弃用将被升级为抛出异常错误。

不推荐 Base64/QPrint/Uuencode/HTML 实体使用 mbstring 函数

PHP 的 mbstring(多字节字符串)函数帮助我们处理 Unicode、HTML 实体和其他遗留文本编码。

然而,Base64、Uuencode 和 QPrint 不是文本编码,仍然是这些函数的一部分——主要是由于传统原因。PHP 还包括这些编码的单独实现。

至于 HTML 实体,PHP 有内置函数——htmlspecialchars()htmlentities()——来更好地处理这些。例如,与 mbstring 不同,这些函数也将转换<>&字符转换为 HTML 实体。

而且 PHP 一直在改进内置函数——就像 PHP 8.1 有 HTML 编码解码函数一样。

因此,记住所有这些,PHP 8.2 是反对使用 mbstring 作为这些编码(标签不区分大小写):

  • BASE64
  • 哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜哇呜
  • HTML-实体
  • HTML(HTML 实体的别名)
  • 报价-可打印
  • qprint(报价-可打印的别名)

从 PHP 8.2 开始,使用 mbstring 编码/解码上述任何一种都会发出一个弃用通知。PHP 9.0 将完全移除对这些编码的 mbstring 支持。

PHP 8.2 中的其他小变化

最后,我们可以讨论 PHP 8.2 的微小变化,包括它移除的特性和功能。

从 mysql 中移除对 libmysql 的支持

截至目前,PHP 允许mysqliPDO_mysql驱动程序构建mysqlndlibmysql库。然而,从 PHP 5.4 开始,默认和推荐的驱动程序是mysqlnd

这两种驱动程序都有许多优点和缺点。然而,移除对其中一个的支持——理想情况下,移除libmysql ,因为它不是默认的——将简化 PHP 的代码和单元测试。

为了证明这一点,RFC 列出了mysqlnd的许多优点:

  • 它与 PHP 捆绑在一起
  • 它使用 PHP 内存管理来监控内存使用情况
    提高性能
  • 提供生活质量功能(如get_result())
  • 使用 PHP 原生类型返回数值
  • 它的功能不依赖于外部库
  • 可选插件功能
  • 支持异步查询

RFC 还列出了libmysql的一些优势,包括:

此外,RFC 列出了libmysql的许多缺点——与 PHP 内存模型不兼容、许多失败的测试、内存泄漏、不同版本之间的不同功能等等。

记住这一点,PHP 8.2 移除了对针对libmysql构建mysqli的支持。

如果你想添加任何只有libmysql才有的功能,你必须把它作为一个特性请求明确地添加到 mysqlnd。此外,您不能添加自动重新连接。

独立于区域设置的大小写转换

PHP 8.0 之前,PHP 的区域设置是从系统环境继承的。但是在某些边缘情况下,这可能会导致问题。

安装 Linux 时设置您的语言将会为的内置命令设置合适的用户界面语言。然而,它也意外地改变了 C 库的字符串处理功能的工作方式。

例如,如果您在安装 Linux 时选择了“土耳其语”或“哈萨克语”,您会发现调用toupper('i')来获得它的大写字母将获得点状大写 I (U+0130,İ)。

PHP 8.0 通过将默认语言环境设置为“C”来阻止这种异常,除非用户通过setlocale()明确更改它。

PHP 8.2 走得更远,通过去除了大小写转换的地区敏感性。本 RFC 主要更改strtolower()strtoupper()及相关功能。阅读 RFC 以获得所有受影响的函数的列表。

作为替代,如果您想使用本地化的大小写转换,那么您可以使用mb_strtolower()

随机延伸改进

PHP 正计划彻底检查其随机功能

到目前为止,PHP 的随机功能严重依赖于 Mersenne Twister 状态。然而,这种状态被隐式地存储在 PHP 的全局区域中——用户无法访问它。在初始播种阶段和预期用途之间添加随机化函数会破坏代码。

当您的代码使用外部包时,维护这样的代码会更加复杂。

因此,PHP 当前的随机功能不能一致地再现随机值。它甚至无法通过均匀随机数生成器的经验统计测试,如 TestU01 的 Crush 和 BigCrush 。Mersenne Twister 的 32 位限制进一步加剧了这种情况。

因此,如果你需要加密的安全随机数,不推荐使用 PHP 的内置函数——shuffle()str_shuffle()array_rand()。在这种情况下,您需要使用random_int()或类似的函数实现一个新的函数。

然而,在投票开始后,该 RFC 出现了几个问题。这一挫折迫使 PHP 团队在一个单独的 RFC 中记录所有问题,并为每个问题创建一个投票选项。只有在达成共识后,他们才会决定进一步行动。

PHP 8.2 中的附加 RFC

PHP 8.2 还包括许多新功能和微小的变化。我们将在下面提到它们,并提供附加资源的链接:

  1. 新的curl_upkeep函数 : PHP 8.2 在其 Curl 扩展中增加了这个新函数。它调用 libcurl 中的curl_easy_upkeep()函数,libcurl 是 PHP Curl 扩展使用的底层 C 库。
  2. ini_parse_quantity函数 : PHP INI 指令接受带乘数后缀的数据大小。例如,你可以把 25 兆字节写成25M,或者把 42 千兆字节写成42G。这些后缀在 PHP INI 文件中很常见,但在其他地方并不常见。这个新函数解析 PHP INI 值,并以字节为单位返回它们的数据大小。
  3. 新增memory_reset_peak_usage函数:该函数重置memory_get_peak_usage函数返回的内存使用峰值。当您多次运行同一个操作,并希望记录每次运行的内存使用峰值时,这非常方便。
  4. 支持preg_*函数中的无捕获修饰符(/n):在 regex 中,()元字符表示一个捕获组。这意味着括号内的表达式的所有匹配都被返回。PHP 8.2 增加了一个 no-capture 修饰符(/n)来阻止这种行为。
  5. iterator_*()家族接受所有可迭代的:截至目前,PHP 的iterator_*()家族只接受\Traversables(即不允许使用普通数组)。这是不必要的限制,这个 RFC 解决了这个问题。

摘要

PHP 8.2 建立在 PHP 8.0 和 PHP 8.1 的巨大改进之上,这绝非易事。我们认为 PHP 8.2 最令人兴奋的特性是它新的独立类型、只读属性和大量的性能改进。

我们迫不及待地想用各种 PHP 框架CMSs 对 PHP 8.2 进行基准测试。

请确保将这篇博客文章加入书签,以供将来参考。

你最喜欢 PHP 8.2 的哪些特性?哪些贬低是你最不喜欢的?请在评论中与我们的社区分享你的想法!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。``

PHP 8 的新特性(特性、改进和 JIT 编译器)

原文:https://kinsta.com/blog/php-8/

PHP 8 已经正式发布到 2020 年 11 月 26 日全面上市!

这一新的重大更新为该语言带来了许多优化和强大的功能。我们很高兴向您介绍最有趣的变化,这些变化将允许我们编写更好的代码并构建更健壮的应用程序。

PHP 8 released

PHP 8.0 Announcement Addendum

你准备好了吗?让我们开始吧!

PHP JIT(实时编译器)

PHP 8 最受欢迎的特性是实时(JIT)编译器。JIT 到底是什么?

RFC 建议书对 JIT 的描述如下:

“PHP JIT 是作为 OPcache 的一个几乎独立的部分实现的。它可以在 PHP 编译时和运行时启用/禁用。启用时,PHP 文件的本机代码存储在 OPcache 共享内存的附加区域,op_array→opcodes[]。处理程序保存指向 JIT 代码入口点的指针。

那么,我们是怎么到 JIT 的,JIT 和 OPcache 有什么区别?

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

为了更好地理解 PHP 的 JIT 是什么,让我们快速看一下 PHP 如何执行源代码得到最终结果。

PHP 的执行分为 4 个阶段:

  • 词法分析/标记化:首先,解释器读取 PHP 代码并构建一组标记。

  • 解析:解释器检查脚本是否匹配语法规则,并使用令牌构建抽象语法树(AST)源代码结构的分层表示

  • 编译:解释器遍历树,将 AST 节点翻译成低级 Zend 操作码,这是确定由 Zend VM 执行的指令类型的数字标识符。

  • 解释:操作码在 Zend VM 上被解释并运行。

下图显示了基本 PHP 执行过程的可视化表示。

Basic PHP execution process

Basic PHP execution process

那么,OPcache 是如何让 PHP 更快的呢?而 JIT 在执行过程中有哪些改变?

OPcache 扩展

PHP 是一种解释型语言。这意味着,当 PHP 脚本运行时,解释器对每个请求一遍又一遍地解析、编译和执行代码。这可能导致浪费 CPU 资源和额外的时间。

这就是 OPcache 扩展发挥作用的地方:

OPcache 通过在共享内存中存储预编译的脚本字节码来提高 PHP 性能,从而使 PHP 无需在每次请求时加载和解析脚本

启用 OPcache 后,PHP 解释器只有在脚本第一次运行时才会经历上面提到的 4 个阶段。由于 PHP 字节码存储在共享内存中,它们可以作为底层的中间表示立即使用,并且可以立即在 Zend VM 上执行。

PHP execution process with OPcache enabled

PHP execution process with OPcache enabled

从 PHP 5.5 开始,Zend OPcache 扩展是默认可用的,你可以通过简单的从你的服务器上的脚本调用phpinfo() 或者检查你的 php.ini 文件来检查你是否正确配置了它(参见 OPcache 配置设置)。

建议阅读:如何在 WordPress 中提高 PHP 内存限制。

Zend OPcache section in a phpinfo page

Zend OPcache section in a phpinfo page

预加载

OPcache 最近随着预加载的实现得到了改进,这是 PHP 7.4 增加的一个新的 OPcache 特性。预加载提供了一种在运行任何应用程序代码之前将一组指定的脚本存储到 OPcache 存储器中的方法。“尽管如此,它并没有为典型的基于 web 的应用程序带来切实的性能提升。

你可以在我们的 PHP 7.4 简介中阅读更多关于预加载的内容。

有了 JIT,PHP 向前迈进了一步。

JIT——实时编译器

即使操作码是低级的中间表示,仍然要编译成机器码。JIT“没有引入任何额外的 IR(中间表示)形式”,而是使用 DynASM (代码生成引擎的动态汇编器)直接从 PHP 字节码生成原生代码。

简而言之, JIT 将中间代码的热部分翻译成机器码。绕过编译,它将能够在性能和内存使用方面带来相当大的改进。

PHP JIT 提案的合著者 Zeev Surasky 展示了使用 JIT 可以加快多少计算速度:

但是,JIT 能有效地提高 WordPress 的性能吗?

实时 Web 应用的 JIT

根据 JIT RFC,实时编译器的实现应该可以提高 PHP 的性能。但是我们真的会在像 WordPress 这样的现实生活应用中体验到这样的改进吗?

早期测试表明,JIT 将使 CPU 密集型工作负载运行得更快。然而,RFC 警告:

“……就像以前的尝试一样——它目前似乎没有显著改善 WordPress 等现实生活中的应用程序(op cache . JIT = 1235 326 req/sec vs . 315 req/sec)。

它计划提供额外的努力,改善现实生活中应用程序的 JIT,使用剖析和推测性优化。"

启用 JIT 后,代码将不会由 Zend VM 运行,而是由 CPU 本身运行,这将提高计算速度。像 WordPress 这样的网络应用也依赖于其他因素,如 TTFB数据库优化HTTP 请求等。

PHP 8 performance diagram

Relative JIT contribution to PHP 8 performance (Image source: PHP 8.0 Announcement Addendum)

所以,我们不应该期望在 WordPress 和类似的应用上 PHP 的执行速度会有显著的提升。然而,JIT 可以为开发者带来几个好处。

据尼基塔·波波夫:

“JIT 编译器的好处大致如下(如 RFC 中所述):

  • 数字代码的性能显著提高。
  • “典型”PHP web 应用程序代码的性能稍好。
  • 将更多代码从 C 转移到 PHP 的潜力,因为 PHP 现在已经足够快了。"

因此,尽管 JIT 很难给 WordPress 的性能带来巨大的改进,但它将 PHP 升级到一个新的水平,使它成为一种可以直接编写许多函数的语言。

不利的一面是更大的复杂性,这会增加维护成本、稳定性和 T2 调试成本。根据德米特里·斯托戈夫的说法:

“JIT 非常简单,但无论如何,它增加了整个 PHP 的复杂性,新类型错误的风险以及开发和维护的成本。”

在 PHP 8 中包含 JIT 的提案以 50 比 2 的票数通过。

PHP 8 来了!🚀请查看我们对新功能的深入了解! 点击推文

PHP 8 的改进和新特性

除了 JIT,我们可以期待 PHP 8 的许多特性和改进。下面的列表是我们精心挑选的即将到来的增加和改变,它们将使 PHP 更加可靠和高效。

构造函数属性提升

作为正在进行的关于在 PHP 中改进对象人机工程学的讨论的结果,构造函数属性提升 RFC 提出了一种新的更简洁的语法,它将简化属性声明,使其更短、更少冗余。

该建议仅涉及提升参数,即那些以公共保护私有可见性关键字为前缀的方法参数。

目前,所有的属性都必须重复几次(至少四次)才能用于对象。考虑来自 RFC 的以下示例:

class Point {
    public int $x;
    public int $y;
    public int $z;

    public function __construct(
        int $x = 0,
        int $y = 0,
        int $z = 0,
    ) {
        $this->x = $x;
        $this->y = $y;
        $this->z = $z;
    }
}

根据 RFC 作者 Nikita Popov 的说法,我们必须在三个不同的地方至少写四次属性名:属性声明、构造函数参数和属性赋值。这种语法不是特别有用,尤其是在具有许多属性和更多描述性名称的类中。

这个 RFC 建议合并构造函数和参数定义。因此,从 PHP 8 开始,我们有了一种更有用的声明参数的方式。上面看到的代码可以如下所示进行更改:

class Point {
    public function __construct(
        public int $x = 0,
        public int $y = 0,
        public int $z = 0,
    ) {}
}

仅此而已。因此,我们有了一种新的方法来提升更短、更易读、更不容易出错的属性。据尼基塔:

这是我们正在做的一个简单的句法转换。但是这减少了您必须为值对象编写的样板代码的数量…

属性声明被转换为我们显式声明的那些属性,我们可以使用反射 API 在执行前自省属性定义(参见去糖):

反射(和其他内省机制)会观察去糖后的状态。这意味着提升的属性将以与显式声明的属性相同的方式出现,而提升的构造函数参数将以普通构造函数参数的形式出现。

// before desugaring
class Point {
    public function __construct(public int $x = 0) {}
}

// after desugaring
class Point {
    public int $x;

    public function __construct(int $x = 0) {
        $this->x = $x;
    }
}

遗产

我们在结合提升参数使用继承时没有任何限制。无论如何,父类构造函数和子类构造函数之间没有特定的关系。据尼基塔:

通常,我们说方法总是必须与父方法兼容。[……]但是这个规则并不适用于构造函数。因此,构造函数实际上属于一个类,父类和子类之间的构造函数不必以任何方式兼容。

这里有一个例子:

class Test {
    public function __construct(
        public int $x = 0
    ) {}
}

class Child extends Test {
    public function __construct(
        $x, 
        public int $y = 0,
        public int $z = 0,
    ) {
        parent::__construct($x);
    }
}

提升的属性不允许什么

非抽象构造函数和特征中允许提升属性,但是这里有几个限制值得一提。

抽象构造函数

抽象类和接口中不允许提升的属性:

abstract class Test {
    // Error: Abstract constructor.
    abstract public function __construct(private $x);
}

interface Test {
    // Error: Abstract constructor.
    public function __construct(private $x);
}
可空性

最显著的约束之一与可空性有关。以前,我们使用的是不可显式为空的类型。但是如果缺省值为空,则该类型可以隐式为空。但是对于属性类型,我们没有这种隐式行为,因为提升的参数需要属性声明,并且可空类型必须显式声明。请参见 RFC 中的以下示例:

class Test {
    // Error: Using null default on non-nullable property
    public function __construct(public Type $prop = null) {}

    // Correct: Make the type explicitly nullable instead
    public function __construct(public ?Type $prop = null) {}
}
可调用类型

由于 callable 不是属性的支持的类型,我们不允许在提升的属性中使用 callable 类型:

class Test {
    // Error: Callable type not supported for properties.
    public function __construct(public callable $callback) {}
}
不允许使用 var 关键字

只有 visibility 关键字可以用于提升的参数,因此不允许用var关键字声明构造函数属性(参见 RFC 中的以下示例):

class Test {
    // Error: "var" keyword is not supported.
    public function __construct(var $prop) {}
}
不允许重复

我们可以在同一个类中组合提升属性和显式属性,但是属性不能声明两次:

class Test {
    public string $prop;
    public int $explicitProp;

    // Correct
    public function __construct(public int $promotedProp, int $arg) {
        $this->explicitProp = $arg;
    }

    // Error: Redeclaration of property.
    public function __construct(public string $prop) {}
}
不允许变量参数

这里的原因是声明的类型不同于变量参数,变量参数实际上是一个数组:

class Test {
    // Error: Variadic parameter.
    public function __construct(public string ...$strings) {}
}

进一步阅读

为了更近距离地了解建筑商地产推广,请听听尼基塔·波波夫的采访。要深入了解 PHP 中的对象人体工程学,请看这篇文章和下面的对拉里·加菲尔德的采访

抽象特征方法的验证

Traits 被定义为“PHP 等单一继承语言中的代码重用机制。”通常,它们用于声明可在多个类中使用的方法。

特征也可以包含抽象方法。这些方法只是声明方法的签名,但是方法的实现必须在使用 trait 的类中完成。

根据 PHP 手册

"特征支持使用抽象方法,以便对展示类施加要求."

这也意味着方法的签名必须匹配。换句话说,所需参数的类型和数量需要相同。

总之,根据 RFC 的作者尼基塔·波波夫的说法,签名验证目前只是断断续续地实施:

  • In most cases, it is not mandatory, and the method implementation is provided by the usage class:
  • If the implementation comes from the parent class, force:
  • If the implementation comes from a subclass, force:

Nikita 的以下示例与第一种情况有关(非强制签名):

trait T {
	abstract public function test(int $x);
}

class C {
	use T;

	// Allowed, but shouldn't be due to invalid type.
	public function test(string $x) {}
}

也就是说,这个 RFC 建议,如果实现方法与抽象特征方法不兼容,无论其来源如何,总是抛出致命错误:

Fatal error: Declaration of C::test(string $x) must be compatible with T::test(int $x) in /path/to/your/test.php on line 10

此 RFC 已获得一致批准。

不兼容的方法签名

在 PHP 中,由于不兼容的方法签名导致的继承错误要么抛出致命错误,要么抛出警告,这取决于导致错误的原因。

如果一个类正在实现一个接口,不兼容的方法签名将引发致命错误。根据对象接口文档:

实现接口的类必须使用与 LSP (Liskov 替换原则)兼容的方法签名。否则将导致致命错误。

下面是一个接口的继承错误的例子:

interface I {
	public function method(array $a);
}
class C implements I {
	public function method(int $a) {}
}

在 PHP 7.4 中,上面的代码会抛出以下错误:

Fatal error: Declaration of C::method(int $a) must be compatible with I::method(array $a) in /path/to/your/test.php on line 7

具有不兼容签名的子类中的函数将抛出警告。请参见来自 RFC 的以下代码:

class C1 {
	public function method(array $a) {}
}
class C2 extends C1 {
	public function method(int $a) {}
}

在 PHP 7.4 中,上面的代码只会抛出一个警告:

Warning: Declaration of C2::method(int $a) should be compatible with C1::method(array $a) in /path/to/your/test.php on line 7

现在,这个 RFC 建议对于不兼容的方法签名总是抛出一个致命错误。对于 PHP 8,我们前面看到的代码会提示如下:

Fatal error: Declaration of C2::method(int $a) must be compatible with C1::method(array $a) in /path/to/your/test.php on line 7

从负索引开始的数组

在 PHP 中,如果一个数组以一个负的索引(start_index < 0)开始,后面的索引将从 0 开始(在 array_fill文档中有更多关于这个的内容)。请看下面的例子:

$a = array_fill(-5, 4, true);
var_dump($a);

在 PHP 7.4 中,结果如下:

array(4) {
	[-5]=>
	bool(true)
	[0]=>
	bool(true)
	[1]=>
	bool(true)
	[2]=>
	bool(true)
}

现在,这个 RFC 提议改变事情,这样第二个索引将是start_index + 1,无论start_index的值是什么。

在 PHP 8 中,上面的代码会产生下面的数组:

array(4) {
	[-5]=>
	bool(true)
	[-4]=>
	bool(true)
	[-3]=>
	bool(true)
	[-2]=>
	bool(true)
}

在 PHP 8 中,以负索引开始的数组会改变它们的行为。在 RFC 中阅读更多关于向后不兼容的内容。

联合类型 2.0

联合类型接受不同类型的值。目前,PHP 不支持联合类型,除了?Type语法和特殊的iterable类型。

在 PHP 8 之前,联合类型只能在 phpdoc 注释中指定,如 RFC 中的以下示例所示:

class Number {
	/**
	 * @var int|float $number
	 */
	private $number;

	/**
	 * @param int|float $number
	 */
	public function setNumber($number) {
		$this->number = $number;
	}

	/**
	 * @return int|float
	 */
	public function getNumber() {
		return $this->number;
	}
}

现在,Union types 2.0 RFC提议在函数签名中增加对联合类型的支持,这样我们就不再依赖内联文档,而是用T1|T2|...语法定义联合类型:

class Number {
	private int|float $number;

	public function setNumber(int|float $number): void {
		$this->number = $number;
	}

	public function getNumber(): int|float {
		return $this->number;
	}
}

正如尼基塔·波波夫在 RFC 中解释的那样,

“语言中对联合类型的支持允许我们将更多的类型信息从 phpdoc 转移到函数签名中,这通常会带来以下好处:

  • 类型实际上是强制执行的,因此可以及早发现错误。
  • 因为它们是强制的,所以类型信息不太可能变得过时或错过边缘情况。
  • 在继承过程中检查类型,执行 Liskov 替换原则。
  • 通过反射可以获得类型。
  • 语法比 phpdoc 少了很多样板。"

联合类型支持所有可用的类型,但有一些限制:

  • 类型void不能是联合的一部分,因为void意味着函数不返回任何值
  • null类型仅在联合类型中受支持,但不允许将其用作独立类型。
  • 可空类型符号(?T)也是允许的,意思是T|null,但是我们不允许在联合类型中包含?T符号(?T1|T2是不允许的,我们应该使用T1|T2|null)。
  • 尽可能多的功能(即strpos()strstr()substr()等)。)在可能的返回类型中包含false,也支持false伪类型。

你可以在 RFC 中阅读更多关于联盟类型 V2 的信息。

内部函数的一致类型错误

当传递非法类型的参数时,内部用户自定义函数表现不同。

用户定义的函数抛出一个TypeError,但是内部函数有不同的行为方式,这取决于几个条件。反正典型的行为就是抛出警告返回null。请参见 PHP 7.4 中的以下示例:

var_dump(strlen(new stdClass));

这将导致以下警告:

Warning: strlen() expects parameter 1 to be string, object given in /path/to/your/test.php on line 4
NULL

如果启用了strict_types,或者参数信息指定了类型,那么行为会有所不同。在这种情况下,类型错误被检测到并导致一个TypeError

这种情况会导致许多问题,这些问题在 RFC 的问题章节中有很好的解释。

为了消除这些不一致,这个 RFC 建议让内部参数解析 API 在参数类型不匹配的情况下总是生成一个ThrowError

在 PHP 8 中,上面的代码抛出以下错误:

Fatal error: Uncaught TypeError: strlen(): Argument #1 ($str) must be of type string, object given in /path/to/your/test.php:4
Stack trace:
#0 {main}
  thrown in /path/to/your/test.php on line 4

抛出表达式

在 PHP 中,throw是一个语句,所以不可能在只允许使用表达式的地方使用它。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

这个 RFC 提出将 throw语句转换成一个表达式,这样它就可以在任何允许表达式的上下文中使用。比如箭头函数null coalesce 运算符三元和 elvis 运算符等。

参见 RFC 中的以下示例:

$callable = fn() => throw new Exception();

// $value is non-nullable.
$value = $nullableValue ?? throw new InvalidArgumentException();

// $value is truthy.
$value = $falsableValue ?: throw new InvalidArgumentException();

弱映射

弱映射是数据(对象)的集合,其中键被弱引用,这意味着它们不会被阻止进行垃圾收集。

PHP 7.4 增加了对弱引用的支持,这是一种保留对象引用的方式,不会阻止对象本身被销毁。正如尼基塔·波波夫指出的那样,

原始弱引用本身只有有限的用处,而弱映射在实践中更常用。不可能在 PHP 弱引用之上实现有效的弱映射,因为没有提供注册销毁回调的能力。

这就是为什么这个 RFC 引入了一个WeakMap类来创建用作弱映射键的对象,如果没有任何对键对象的进一步引用,这些对象可以被销毁并从弱映射中删除。

在长时间运行的流程中,这将防止内存泄漏并提高性能。请参见 RFC 中的以下示例:

$map = new WeakMap;
$obj = new stdClass;
$map[$obj] = 42;
var_dump($map);

使用 PHP 8,上面的代码会产生以下结果(参见这里的代码运行):

object(WeakMap)#1 (1) {
	[0]=>
	array(2) {
		["key"]=>
		object(stdClass)#2 (0) {
		}
		["value"]=>
		int(42)
	}
}

如果取消设置对象,该键将自动从弱贴图中移除:

unset($obj);
var_dump($map);

现在,结果将如下:

object(WeakMap)#1 (0) {
}

要更仔细地查看弱映射,请参见 RFC 。这项提议被一致通过。

参数列表中的尾随逗号

尾随逗号是附加到不同上下文中的项目列表的逗号。PHP 7.2 在列表语法中引入了尾随逗号,PHP 7.3 在函数调用中引入了尾随逗号。

PHP 8 现在在函数、方法和闭包的参数列表中引入了尾随逗号,如下例所示:

class Foo {
	public function __construct(
		string $x,
		int $y,
		float $z, // trailing comma
	) {
		// do something
	}
}

这项提案以 58 票对 1 票获得通过。

对象上的 Allow ::class 语法

要获取类名,我们可以使用Foo\Bar::class语法。这个 RFC 提议将相同的语法扩展到对象,这样现在就可以获取给定对象的类名,如下例所示:

$object = new stdClass;
var_dump($object::class); // "stdClass"

$object = null;
var_dump($object::class); // TypeError

在 PHP 8 中,$object::class提供与get_class($object)相同的结果。如果$object不是一个对象,它抛出一个TypeError异常。

这项提议获得一致通过。

属性 v2

属性也称为注释,是结构化的元数据,可用于指定对象、元素或文件的属性。

在 PHP 7.4 之前,文档注释是向类、函数等声明中添加元数据的唯一方式。Attributes v2 RFC 引入了 PHP 属性,将它们定义为一种结构化的语法元数据,可以添加到类、属性、函数、方法、参数和常量的声明中。

属性被添加到它们所引用的声明之前。参见 RFC 中的以下示例:

<<ExampleAttribute>>
class Foo
{
	<<ExampleAttribute>>
	public const FOO = 'foo';

	<<ExampleAttribute>>
	public $x;

	<<ExampleAttribute>>
	public function foo(<<ExampleAttribute>> $bar) { }
}

$object = new <<ExampleAttribute>> class () { };

<<ExampleAttribute>>
function f1() { }

$f2 = <<ExampleAttribute>> function () { };

$f3 = <<ExampleAttribute>> fn () => 1;

可以在 doc-block 注释之前或之后添加属性:

<<ExampleAttribute>>
/** docblock */
<<AnotherExampleAttribute>>
function foo() {}

每个声明可以有一个或多个属性,每个属性可以有一个或多个关联值:

<<WithoutArgument>>
<<SingleArgument(0)>>
<<FewArguments('Hello', 'World')>>
function foo() {}

参见 RFC 以获得 PHP 属性、用例以及替代语法的更深入的概述。

命名参数

命名参数提供了一种在 PHP 中将参数传递给函数的新方法:

命名参数允许根据参数名而不是参数位置向函数传递参数。

我们可以通过简单地在参数值前添加参数名来将命名参数传递给函数:

callFunction(name: $value);

我们也可以使用保留关键字,如下例所示:

callFunction(array: $value);

但是我们不允许动态传递参数名。参数必须是标识符,并且不允许使用以下语法:

callFunction($name: $value);

根据 RFC 的作者尼基塔·波波夫(Nikita Popov)的说法,命名论证有几个优点。

首先,命名参数将帮助我们编写更容易理解的代码,因为它们的含义是不言自明的。RFC 中的以下示例不言自明:

array_fill(start_index: 0, num: 100, value: 50);

命名参数与顺序无关。这意味着我们不必按照与函数签名相同的顺序向函数传递参数:

需要一个非常快速、安全、开发者友好的网站托管吗?Kinsta 是为 WordPress 开发者设计的,提供了大量的工具和强大的仪表板。查看我们的计划

array_fill(value: 50, num: 100, start_index: 0);

还可以将命名参数与位置参数结合起来:

htmlspecialchars($string, double_encode: false);

命名参数的另一个很大的优点是,它们允许只指定那些我们想要改变的参数。如果我们不想覆盖默认值,就不必指定默认参数。来自 RFC 的以下示例说明了这一点:

htmlspecialchars($string, default, default, false);
// vs
htmlspecialchars($string, double_encode: false);

重要的

如果你是一个 WordPress 开发者,请注意在撰写本文时,命名参数可能会导致向后兼容问题。没有经过深思熟虑的测试,不要在生产中使用它们。

命名参数可以与 PHP 属性一起使用,如 RFC 的以下示例所示:

<<MyAttribute('A', b: 'B')>>
class Test {}

但是,不允许在命名参数后传递位置参数,这将导致编译时错误。当您两次传递相同的参数名时,也会发生同样的情况。

命名参数在类声明中很方便,因为构造函数通常有许多参数,命名参数提供了一种更“符合人体工程学”的方法来声明类。

关于命名参数、约束、向后不兼容性和几个例子的更详细的视图,请参见命名参数 RFC

空安全运算符

这个 RFC 引入了具有完全短路评估的空安全操作符$->

在短路评估中,只有当第一个操作符没有评估到null时,才评估第二个操作符。如果一个链中的一个操作符评估为null,整个链的执行停止并评估为null

考虑来自 RFC 的以下示例:

$foo = $a?->b();

如果$a为空,则不调用方法b(),并将$foo设置为null

参见 nullsafe 操作符 RFC ,了解更多示例、异常和未来范围。

比较字符串和数字

在以前的 PHP 版本中,当在字符串和数字之间进行非严格比较时,PHP 首先将字符串转换为数字,然后执行整数或浮点数之间的比较。即使这种行为在某些情况下非常有用,它也可能产生错误的结果,从而导致错误和/或安全问题。

考虑来自 RFC 的以下示例:

$validValues = ["foo", "bar", "baz"];
$value = 0;
var_dump(in_array($value, $validValues));
// bool(true)

PHP 8 引入了更合理的字符串到数字的比较,旨在使字符串到数字的比较更加合理。用尼基塔·波波夫的话说,

这个 RFC 旨在给字符串与数字的比较一个更合理的行为:当与数字字符串比较时,使用数字比较(和现在一样)。否则,将数字转换为字符串,并使用字符串比较。

下表比较了 PHP 早期版本和 PHP 8 中字符串与数字比较的行为:

Comparison    | Before | After
------------------------------
 0 == "0"     | true   | true
 0 == "0.0"   | true   | true
 0 == "foo"   | true   | false
 0 == ""      | true   | false
42 == "   42" | true   | true
42 == "42foo" | true   | false

在尼基塔·波波夫的官方 RFC 中,阅读更多关于这一变化的含义以及 PHP 8 中字符串和数字比较的变化。

Saner 数字字符串

在 PHP 中,包含数字的字符串分为三类:

  • 数字字符串:包含一个数字的字符串,前面可以有空格。
  • 前导数字串:起始字符为数字串,尾随字符为非数字串。
  • 非数字字符串:不属于上述两个类别的字符串。

根据所执行的操作,数字字符串和前导数字字符串的处理方式不同。例如:

  • 显式字符串到数字的转换(即(int)(float)类型转换)转换数字和前导数字字符串。将非数字字符串显式转换为数字会产生 0。
  • 隐式字符串到数字的转换(即没有strict_type声明)导致数字和非数字字符串的结果不同。非数字字符串到数字的转换抛出一个TypeError
  • is_numeric()仅对数字字符串返回

字符串偏移量、算术运算、递增和递减运算、字符串之间的比较以及按位运算也会导致不同的结果。

本 RFC 提议:

将各种数字字符串模式统一到一个概念中:数字字符只允许有前导和尾随空格。任何其他类型的字符串都是非数字的,在数字上下文中使用时会引发 TypeErrors。

这意味着,所有当前发出 E_NOTICE “遇到格式不正确的数值”的字符串将被重新分类到 E_WARNING “遇到非数值”中,除非前导数字字符串仅包含尾随空格。并且当前发出 E_WARNING 的各种情况将被提升到TypeError s。

关于 PHP 8 中数字字符串的更深入的概述,包括代码示例、异常和向后兼容性问题,请参见 RFC

匹配表达式 v2

新的match表达式与switch非常相似,但是具有更安全的语义并允许返回值。

为了理解这两种控制结构之间的区别,考虑下面来自 RFCswitch示例:

switch (1) {
	case 0:
		$result = 'Foo';
		break;
	case 1:
		$result = 'Bar';
		break;
	case 2:
		$result = 'Baz';
		break;
}

echo $result;
//> Bar

我们现在可以用下面的match表达式得到与上面代码相同的结果:

echo match (1) {
	0 => 'Foo',
	1 => 'Bar',
	2 => 'Baz',
};
//> Bar

使用新的match表达式的一个显著优点是,虽然switch松散地比较值(==)可能会导致意想不到的结果,但是使用match进行比较是一种身份检查(===)。

match表达式也可以包含多个逗号分隔的表达式,以允许更简洁的语法(来源):

$result = match ($x) {
	// This match arm:
	$a, $b, $c => 5,
	// Is equivalent to these three match arms:
	$a => 5,
	$b => 5,
	$c => 5,
};

如需更多使用示例和案例,请参见匹配表达式 v2 RFCPHP 文档

算术/按位运算符的更严格的类型检查

在以前的 PHP 版本中,允许对数组、资源或非重载对象应用算术按位运算符。无论如何,行为有时是不一致的。

在这个 RFC 中,尼基塔·波波夫用一个简单的例子展示了这种行为是多么不合理:

var_dump([] % [42]);
// int(0)

Nikita 解释了如何将算术或按位运算符应用于数组、资源或非重载对象会导致不同的结果:

运算符+、-、*、/、**:

  • 对数组操作数抛出错误异常。(如果两个操作数都是数组,则不包括+。)
  • 静默地将资源操作数转换为整数形式的资源 ID。
  • 将一个对象操作数转换为整数 1,同时抛出一个通知。

运算符%,<>,&,|,^:

  • 如果为空,则静默地将数组操作数转换为整数零,如果为非空,则转换为整数一。
  • 静默地将资源操作数转换为整数形式的资源 ID。
  • 将一个对象操作数转换为整数 1,同时抛出一个通知。

操作员~:

  • 引发数组、资源和对象操作数的错误异常。

运算符++和-:

  • 如果操作数是数组、资源或对象,则不执行任何操作。

在 PHP 8 中,事情发生了变化,所有算术和位运算符的行为都是一样的:

**为数组、资源和对象操作数抛出一个TypeError异常。【T2
**

新的 PHP 函数

PHP 8 为该语言带来了几个新功能:

str _ 包含

在 PHP 8 之前, strstrstrpos开发者在给定字符串中搜索指针的典型选项。问题是这两个函数都不太直观,它们的用法可能会让新的 PHP 开发人员感到困惑。请参见以下示例:

$mystring = 'Managed WordPress Hosting';
$findme = 'WordPress';
$pos = strpos($mystring, $findme);

if ($pos !== false) {
	echo "The string has been found";
} else {
	echo "String not found";
}

在上面的例子中,我们使用了!==比较操作符,它检查两个值是否属于同一类型。这防止我们在指针位置为 0 时得到错误:

该函数可能返回布尔值,但也可能返回评估为的非布尔值。[…]使用===运算符测试此函数的返回值。

此外,一些框架提供了助手函数来搜索给定字符串中的值(例如,参见 Laravel 助手文档)。

现在,这个 RFC 提议引入一个新的函数,允许在字符串内部进行搜索:str_contains

str_contains ( string $haystack , string $needle ) : bool

它的用法非常简单。str_contains检查$needle是否在$haystack中找到,并相应返回truefalse

所以,多亏了str_contains,我们可以编写以下代码:

$mystring = 'Managed WordPress Hosting';
$findme   = 'WordPress';

if (str_contains($mystring, $findme)) {
	echo "The string has been found";
} else {
	echo "String not found";
}

这样可读性更好,也不容易出错(见这里中的这段代码)。
在撰写本文时,str_contains区分大小写,但将来可能会改变。

提案以 43 票对 9 票通过。

str_starts_with()和 str_ends_with()

除了str_contains函数之外,两个新的函数允许在给定的字符串中搜索针:str_starts_withstr_ends_with

这些新函数检查一个给定的字符串是以另一个字符串开始还是结束:

str_starts_with (string $haystack , string $needle) : bool
str_ends_with (string $haystack , string $needle) : bool

如果$needle$haystack长,两个函数都返回false

根据 RFC 的作者威尔·哈金斯的说法,

“对str_starts_withstr_ends_with功能的需求如此普遍,以至于许多主流 PHP 框架都支持它,包括 SymfonyLaravelYiiFuelPHPPhalcon 。”

多亏了它们,我们现在可以避免使用次优和不太直观的函数,比如substrstrpos。两个函数都区分大小写:

$str = "WordPress";
if (str_starts_with($str, "Word")) echo "Found!";

if (str_starts_with($str, "word")) echo "Not found!";

你可以在这里看到这段代码的运行

该 RFC 以 51 票对 4 票获得批准。

获取调试类型

get_debug_type是一个新的 PHP 函数,它返回变量的类型。新函数的工作方式与 gettype函数非常相似,但是get_debug_type返回本机类型名并解析类名。

这对语言来说是一个很好的改进,因为gettype()对类型检查没有用。

RFC 提供了两个有用的例子来理解新的get_debug_type()函数和gettype()函数之间的区别。第一个例子显示了gettype在起作用:

$bar = [1,2,3];

if (!($bar instanceof Foo)) { 
	throw new TypeError('Expected ' . Foo::class . ', got ' . (is_object($bar) ? get_class($bar) : gettype($bar)));
}

在 PHP 8 中,我们可以使用get_debug_type来代替:

if (!($bar instanceof Foo)) { 
	throw new TypeError('Expected ' . Foo::class . ' got ' . get_debug_type($bar));
}

下表显示了get_debug_typegettype的返回值:

价值 gettype() get_debug_type()
one 整数 (同 Internationalorganizations)国际组织
Zero point one 两倍 漂浮物
真实的 布尔型 弯曲件
错误的 布尔型 弯曲件
" WordPress " 线 线
[1,2,3] 排列 排列
名为“Foo\Bar”的类 目标 阿宽
匿名班级 目标 【电子邮件保护】

附加 RFC

下面是 PHP 8 中额外批准的改进的快速列表:

  1. Stringable 接口 : 这个 RFC 引入了一个 Stringable 接口,它被自动添加到实现 __to String()方法的类中。这里的主要目标是使用string|Stringable联合类型。
  2. ext/DOM 中新的 DOM live Standard API:这个 RFC 提出通过引入新的接口和公共属性来实现当前的DOM live StandardPHP DOM 扩展
  3. 静态返回类型 : PHP 8 在selfparent类型旁边介绍了static作为返回类型的用法。
  4. 变量语法调整 : 这个 RFC 解决了 PHP 变量语法中一些残留的不一致。

PHP 8 性能基准

如果你想知道 PHP 8 有多快,我们有答案。我们在 7 个不同的 PHP 版本(5.6、7.0、7.1、7.2、7.3 和 8.0)上对 20 个 PHP 平台/配置进行了基准测试。

PHP 8.0 在大多数支持它的平台上脱颖而出,包括 WordPress 和 Laravel。

Compiled PHP benchmarks of the top platforms

Compiled PHP benchmarks of the top platforms

例如,PHP 8.0 上的 WordPress 每秒可以处理比 PHP 7.4 多 18.4%的请求。同样,PHP 8.0 上的 Laravel 每秒可以比 PHP 7.3 多运行 8.5% 个请求。

如果你的网站或应用完全兼容 PHP 8.0,你应该计划尽快将你的服务器环境更新到 PHP 8.0 。您(和您的用户)一定会欣赏它的性能优势。但是,请在更新前彻底测试您的网站。

您可以阅读我们的 PHP 基准测试文章以获得更多信息,例如详细的性能数据、见解和漂亮的图表!

PHP 8 has been released to the GA and brings lots of optimizations and features to the language. 🚀 Check out our deep dive into PHP 8!Click to Tweet

摘要

多好的旅程啊!在这篇文章中,我们介绍了 PHP 8 最有趣的优化和特性。最令人期待的当然是即时编译器,但是 PHP 8 还有更多。

请确保将这篇博客文章加入书签,以供将来参考。🤓

现在轮到你了:你准备好测试新的 PHP 特性了吗?你最喜欢哪一个?在下面的评论栏里写一行。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

最终的 PHP 7.2、7.3、7.4、8.0 和 8.1 基准测试(2022)

原文:https://kinsta.com/blog/php-benchmarks/

对于 PHP 来说,2021 年是多事之秋。PHP 8.0 已经一岁了,备受期待的 PHP 8.1 于 2021 年 11 月 25 日发布,带来了许多令人兴奋的特性。你可以在我们的深度文章中了解所有最新的 PHP 8.1 特性

每年,我们都会发布针对各种 PHP 平台的深入性能基准,以了解不同 PHP 版本之间的对比情况。今年,我们14 个独特的 PHP 平台/配置中对 5 个不同的 PHP 版本进行了基准测试,包括 WordPressDrupalJoomlaLaravel 、Symfony 等等。我们还测试了其他流行的 PHP 平台,如 WooCommerce、Easy Digital Downloads 和 Grav。

在 Kinsta,我们总是鼓励使用最新的支持的 PHP 版本。它们不仅是最安全的,而且还提供了许多性能改进。今天,我们将向你展示 PHP 8.0 和 8.1 是如何对抗几乎所有我们让它们对抗的东西的。

你兴奋吗?开始吧!

PHP 的现状

PHP(PHP:Hypertext Preprocessor 的递归首字母缩写)是使用最广泛的服务器端脚本和编程语言之一。它是开源的,主要用于 web 开发。由于 PHP 驱动了大量的核心 WordPress 软件,它是 WordPress 社区非常重要的语言。

PHP Logo

PHP logo.

虽然有些人可能认为 PHP 已经死了,但事实远非如此。根据 W3Techs 的调查, 78.1% 的网站使用 PHP,这些网站的服务器端编程语言都是他们知道的。这几乎是 5 个网站中的 4 个!

PHP 比以往任何时候都更活跃、更快、更好。

Server-side languages chart showing PHP at the very top.

PHP sits at the very top of server-side programming languages.

如果你觉得那是死的,我们想知道什么是活的!甚至当与 JavaScript 及其新的服务器端实现相比时,PHP 在它面前依然傲视群雄。

然而,PHP 社区有一个大问题。许多网站仍在使用过时的版本和不受支持的 PHP 安装根据 W3Techs29.9% 的网站还在 PHP 5.6 及以下。

Pie chart showing WordPress PHP versions in use as of 01 February, 2022.

WordPress PHP versions (as of February 01, 2022).

说到 WordPress 统计,只有 50.6% 的网站运行在支持的 PHP 版本上。更糟糕的是,所有 WordPress 网站中有 10.2% 运行在 PHP 5.6 或更低版本上。它比整个 PHP 社区要好,但是许多网站的后门都是敞开的。

我们认为这个难题有很多原因:

  • WordPress 社区缺乏关于 PHP 及其在 WordPress 中的关键作用的教育。
  • 在较新的 PHP 版本(尤其是 PHP 8.0 及以上)上运行的插件和主题的兼容性问题。
  • WordPress 主机提供商不愿意推出新的 PHP 版本,因为害怕给他们的客户带来问题。

Kinsta 遵循与 PHP 相同的寿命终止(EOL)时间表来解决这个令人困扰的问题。它有助于让我们托管的所有 WordPress 网站尽可能的快速和安全。

Kinsta 的客户与一般的 WordPress 社区相比如何?我们自己也很好奇,就看了一下数字。

以下是概要:

  • Kinsta 有 62.22% 的 WordPress 网站运行的是 PHP 7.4。
  • Kinsta 的 WordPress 网站中有 27.27% 在运行 PHP 8.0。
  • Kinsta 有 10.51% 的 WordPress 网站运行的是 PHP 8.1

**截至 2022 年 12 月 1 日*。

我们为这些数据感到骄傲和兴奋。这意味着 Kinsta 客户中 PHP 的采用率远高于一般的 WordPress 和 PHP 社区。这让我们非常高兴!

注: PHP 8.0 带来了很多突破性的变化,所以很多用户还没有转向它。然而,我们预计更多的网站将很快转向它。

如果你想学习 PHP ,我们已经整理了一些优秀的 PHP 教程(免费和付费)。

PHP 基准测试(2022)

尽管 PHP 7.2、7.3 和 7.4 没有得到积极的支持,但是许多网站仍然在它们上面运行。因此,我们决定测试五个不同的 PHP 版本,这样您就可以看到新的 PHP 版本在性能方面是多么令人印象深刻。

今年的热门当然是新发布的 PHP 8.1。这是 PHP 世界中最新也是最激动人心的发展,这是有原因的。并非所有基于 PHP 的框架和 CMS 都完全支持它,但是我们已经对尽可能多的框架和 CMS 进行了测试。

我们在每次测试中使用了每个平台的最新版本,并针对的 1000 个请求15 个并发用户对其中一个 URL 进行了基准测试。我们进行了多次基准测试,以确保结果一致。此外,我们只考虑了前 3 个结果的平均值。

您可以在下面找到我们测试环境的详细信息:

  • 机器:英特尔至强(30 核 CPU),120GB 内存,1TB 硬盘。这是一个由谷歌云平台驱动的计算优化(C2) 虚拟机,运行在一个隔离的容器中。所有金斯塔托管计划有 C2 机器可用。
  • OS: Ubuntu 20.04.1 LTS(焦点窝)
  • Web 服务器:Nginx1 . 21 . 6(Nginx/1 . 21 . 6)
  • 数据库: 玛利亚 DB 10.6.7(玛利亚 db-1:10 . 6 . 7+玛利亚~焦点)
  • PHP 版本: 7.2,7.3,7.4,8.0,8.1
  • 页面缓存:在所有平台和配置上禁用。
  • OPcache: 使用推荐的 php.ini 设置在所有平台和配置上启用 OPcache,除了我们从 4000 提高到 50000**opcache.max_accelerated_files**值。使用的 OPcache 设置有:
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=50000
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.enable_cli=1

由于 OPcache 通过将预编译的脚本字节码存储在服务器的共享内存中提高了 PHP 的性能,它消除了 PHP 为每个请求加载和解析脚本的需要。

测试 PHP 平台和配置

我们的基准测试包括以下 14 个 PHP 平台/配置。点击下面的任何一项,直接跳到测试结果和注释。我们以每秒的个请求来度量数据。要求越多越好。

由于每个平台上的演示内容可能会有很大差异,我们测试了它们的准系统安装的原始性能。这里的目标是对各种 PHP 版本进行基准测试 CMSs 和框架只是作为一种工具。您不应该使用这些基准测试结果来衡量一个平台与另一个平台的优劣,而应该衡量它在不同 PHP 版本上的竞争情况。

我们还包括了它们的大小和截图,让你对测试的页面有更好的了解。有些很小,有些很大。

事不宜迟,我们开始吧!

RC2

WordPress 是我们测试的第一个平台。毕竟,它为你正在阅读的博客和互联网上 43.3%的网站提供动力。这是一个免费的开源软件,你可以用它来创建漂亮的网站、博客和应用程序。

WordPress logo

我们从 WordPress 5.9-RC2(Release Candidate 2)开始,这是本文基准测试的最新版本。它带有新安装的 222 主题。我们用 15 个并发用户1000 个请求的 URL 进行了基准测试。所有其他测试都使用了相同的方法。

WordPress 5.9-RC2 test page for PHP benchmarks.

The tested WordPress page.

被测网址: **/hello-world/**

  • 主题:二十二十二
  • 注意:博客页面包括一个带有文本徽标的页眉、导航菜单、文章正文、一条评论和页脚小部件,如搜索、最近的帖子和最近的评论。
  • 图片来源:【WordPress.org T2】

信息

基准数据以每秒请求数来衡量。要求越多越好。

PHP Benchmarks Graphs for WordPress 5.9-RC2 version.

WordPress 5.9-RC2 PHP Benchmarks.

基准测试结果

  • WordPress 5.9-RC2 PHP 7.2 基准测试结果:106.56 请求/秒
  • WordPress 5.9-RC2 PHP 7.3 基准测试结果:108.45 请求/秒
  • WordPress 5.9-RC2 PHP 7.4 基准测试结果:110.24 请求/秒
  • WordPress 5.9-RC2 PHP 8.0 基准测试结果:111.10 请求/秒
  • WordPress 5.9-RC2 PHP 8.1 基准测试结果:163.43 请求/秒🏆

PHP 8.1 显然是赢家,证明了比 PHP 8.0 快 47.10%。考虑到所有其他结果是如此接近,这是一个令人惊讶的突出。如果你将它与 PHP 7.2 相比,它每秒可以处理超过 50% 的请求(或事务)。

重要的

PHP 8.1 在更广泛的 WordPress 生态系统中的支持状态(插件、主题、开发工具等)。)几乎不可能知道。如果你计划将一个生产或关键任务站点的环境升级到 PHP 8.1,请预先彻底测试以确保它不会崩溃。

WordPress on PHP 8.1 can handle 47.10% more requests per second than PHP 8.0. Make sure you update today! 🤘🏽🚀Click to Tweet

RC2 + WooCommerce

WooCommerce 是一个为 WordPress 开发的开源电子商务解决方案。与其他流行的电子商务平台不同,它是完全可定制和可扩展的。WooCommerce 也是 WordPress 社区中最受欢迎的电子商务插件之一,为互联网上 14%的电子商务网站提供支持。

WooCommerce logo

对于我们的下一个测试,我们在 WordPress 上安装了 WooCommerce。我们使用免费的店面主题和 WooCommerce 的默认数据来设置测试站点。测试的 URL 是单个产品页面。

A screenshot of the tested WooCommerce page.

The tested WooCommerce page.

  • 测试的网址: **/product/hoodie/**
  • 主题:店面 3.9.1
  • 注意:单个产品页面包括一个带有徽标的标题、标语、导航菜单、搜索小部件和购物车。主体有一个产品,包括图像、描述、添加到购物车按钮、评论和多个侧栏小部件。底部是包含三种产品的相关产品小部件。它还包括一个展示更多产品的侧面拉出部件。
  • 图片来源: WordPress 插件库

Graphs for WordPress 5.9-RC2 + WooCommerce 6.1.1 PHP Benchmarks.

WordPress 5.9-RC2 + WooCommerce 6.1.1 PHP Benchmarks.

基准测试结果

  • WordPress 5.9-RC2+woo commerce 6 . 1 . 1 PHP 7.2 基准测试结果:130.73 请求/秒
  • WordPress 5.9-RC2+woo commerce 6 . 1 . 1 PHP 7.3 基准测试结果:137.52 请求/秒
  • WordPress 5.9-RC2+woo commerce 6 . 1 . 1 PHP 7.4 基准测试结果:141.48 请求/秒
  • WordPress 5.9-RC2+woo commerce 6 . 1 . 1 PHP 8.0 基准测试结果:141.71 请求/秒
  • RC2 + WooCommerce 6.1.1 PHP 8.1 基准测试结果:147.67 请求/秒🏆

PHP 8.1 也是 WooCommerce 的明显赢家。它以微弱优势击败了 PHP 8.0。

Your WooCommerce store running on PHP 7.2 is 11.47% slower than your competitor's store on PHP 8.1! Make sure you upgrade ASAP! 🛒🚀Click to Tweet

2.11.4.1 RC2+简易数字下载

轻松数字下载是 WordPress 的免费电子商务插件。由 Pippin 的插件(现在归 Awesome Motive 所有)创建,它完全专注于帮助你销售数字产品(例如电子书、软件、视频游戏)。

Easy Digital Downloads Logo

为了方便数字下载,我们使用了免费的主题和默认内容来建立测试网站。测试的页面是单一产品页面。

The tested page for WordPress 5.9-RC2 + Easy Digital Downloads 2.11.4.1-PHP Benchmarks

The tested Easy Digital Downloads page.

  • 测试的网址: **/downloads/money-buys-happiness/**
  • 主题:主题
  • 注意:EDD 的单个产品页面是轻量级的,包含图片、描述、购买按钮和一些类别链接。页眉有徽标、标语和购物车,而页脚有基本的版权文本。
  • 图片来源: 轻松数码下载官方网站

Graphs for WordPress 5.9-RC2 + Easy Digital Downloads 2.11.4.1 PHP Benchmarks.

WordPress 5.9-RC2 + Easy Digital Downloads 2.11.4.1 PHP Benchmarks.

基准测试结果

  • 2.11.4.1 PHP 7.2 基准测试结果:352.87 请求/秒
  • 2.11.4.1 PHP 7.3 基准测试结果:382.17 请求/秒
  • 2.11.4.1 PHP 7.4 基准测试结果:392.07 请求/秒
  • 2.11.4.1 PHP 8.0 基准测试结果:407.59 请求/秒🏆
  • 2.11.4.1 PHP 8.1 基准测试结果:不支持🚫

在基准测试时,最新的 EDD 版本还不支持 PHP 8.1。像前一年的基准测试一样,PHP 8.0 凭借 WordPress 和简单的数字下载使所有其他 PHP 版本一枝独秀。

信息

事实证明,PHP 8.0 和 8.1 在 WordPress、WooCommerce 和简单的数字下载方面速度更快。如果你正在使用 WordPress 运行你的任何网站,你应该计划尽快转移到 PHP 8.0 及以上版本。

Drupal 9.3

Drupal 是一个免费的开源内容管理软件。它因其灵活和模块化的特性而广受欢迎。根据 W3Techs 的数据,1.3%的网站使用 Drupal,其中包括 2.0%使用内容管理系统的网站。

Drupal logo

我们用它的鲜味安装配置文件安装了 Drupal,这是一个演示食品杂志网站,展示了 Drupal 的核心特性。

A screenshot of the tested Drupal page.

The tested Drupal page.

  • 测试的网址: **/en/articles/dairy-free-and-delicious-milk-chocolate/**
  • 主题:鲜味美食杂志
  • 注意:测试页面是一篇文章,包括许多功能,如搜索部件、语言转换器部件、登录模块、面包屑、特色文章侧栏部件、食谱收藏部件、注册表单。
  • 图片来源:【Drupal.org T2】

The graph for Drupal 9.3.3 PHP Benchmarks.

Drupal 9.3.3 PHP Benchmarks.

基准测试结果

  • Drupal 9.3.3 PHP 7.2 基准测试结果:不支持🚫
  • Drupal 9.3.3 PHP 7.3 基准测试结果:267.62 请求/秒
  • Drupal 9.3.3 PHP 7.4 基准测试结果:268.84 请求/秒
  • Drupal 9.3.3 PHP 8.0 基准测试结果:289.04 请求/秒
  • Drupal 9.3.3 PHP 8.1 基准测试结果:302.27 req/sec🏆

自从我们上次对 Drupal 9.x.x 进行基准测试以来,它已经取得了很大的进步。它不仅与较新的 PHP 版本兼容,而且性能非常好。我们很高兴看到它如何向前发展!

珠姆拉。4.0.6

Joomla!是另一个免费开源的内容管理系统。它于 2005 年首次发布,是当今第二大流行的开源 CMS。据 W3Techs 报道,Joomla!被追踪的所有网站中的 1.7%使用。

Joomla! logo

为了 Joomla!基准测试,我们使用了所有 Joomla 附带的免费仙后座模板!4.x 发行版。

A screenshot of the tested Joomla page.

The tested Joomla page.

  • 测试网址: **/**(首页)
  • 主题:仙后座
  • 备注: Joomla!与“默认英语(GB)示例数据”一起安装,这为站点添加了重要内容。主页包含几段内容、一个搜索小部件和边栏上的其他基本小部件,如登录表单、流行标签和最新文章。
  • 图片来源:【Joomla.org T2】

Graphs for the Joomla 4.0.6 PHP Benchmarks.

Joomla! 4.0.6 PHP Benchmarks.

基准测试结果

  • 珠姆拉。4.0.6 PHP 7.2 基准测试结果:38.18 请求/秒
  • 珠姆拉。4.0.6 PHP 7.3 基准测试结果:39.41 请求/秒
  • 珠姆拉。4.0.6 PHP 7.4 基准测试结果:39.57 请求/秒
  • 珠拉。4.0.6 PHP 8.0 基准测试结果:39.84 请求/秒
  • Joomla!4.0.6 PHP 8.1 基准测试结果:41.97 请求/秒🏆

有些打嗝之后,Joomla!已经回到正轨。结果遵循一个预期的模式——PHP 8.1 是无可争议的冠军,紧随其后的是 PHP 8.0,然后是其他。

重力 1.7.29

Grav 是一个开源的平面文件 CMS。它不需要数据库来操作,但是它有丰富的特性。Grav 从文本文件中查询内容。这使得它重量轻,易于安装在几乎任何服务器上。

Grav CMS logo

在执行这个测试时,Grav 需要 PHP 7.3 和更高版本才能工作。我们使用了为测试提供默认登录页面的基础 Grav 包。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

A screenshot of the tested Grav page.

The tested Grav page.

  • 测试网址: **/**(首页)
  • 主题:夸克
  • 注意:测试页面是一个简单的页面,有很多内容,包括页眉、徽标、导航菜单和页脚。 Grav 核心缓存已经被禁用来测试 PHP 的原始性能。
  • 图片来源: Grav 官方网站

Graphs for Grav 1.7.29 PHP Benchmarks.

Grav 1.7.29 PHP Benchmarks.

基准测试结果

  • Grav 1.7.29 PHP 7.2 基准测试结果:不支持🚫
  • Grav 1.7.29 PHP 7.3 基准测试结果:1800.07 请求/秒
  • Grav 1.7.29 PHP 7.4 基准测试结果:1848.02 请求/秒
  • Grav 1.7.29 PHP 8.0 基准测试结果:1931.72 请求/秒
  • Grav 1.7.29 PHP 8.1 基准测试结果:2137.43 请求/秒🏆

PHP 8.1 是 Grav 无可争议的赢家,紧随其后的是 PHP 8.0 和其他版本。

作为一个相对较新的内容管理系统,它的市场份额比 WordPress 小。因此,它可以很快放弃对旧版本 PHP 的支持。这是现代 CMS 最显著的优势之一。

10 月 1 日

OctoberCMS 是一个基于 Laravel PHP 框架的 CMS。OctoberCMS 最初是免费和开源的,在于 2021 年改变其许可模式后,现在是一个付费平台。利用 Laravel 的力量制作动态网站在开发人员中很流行。根据 W3Techs 的数据,OctoberCMS 只占网站的 0.1%

October

我们为测试站点使用了 OctoberCMS 的默认演示主题。这是一个具有明确布局的响应主题。

A screenshot of the tested OctoberCMS page.

The tested OctoberCMS page.

  • 测试的网址: **/**
  • 主题:演示主题
  • 注意:测试的页面有很多元素,包括 Logo、导航菜单、文本部分、代码嵌入等。我们遵循了关于提高性能的文档,以确保它尽可能高效地运行。在撰写本文时,OctoberCMS 需要 PHP 7.2+ 才能运行,还不支持 PHP 8.1。
  • 图片来源: OctoberCMS 官方网站

Graphs for OctoberCMS 1.3.1 PHP Benchmarks.

OctoberCMS 1.3.1 PHP Benchmarks.

基准测试结果

  • 10 月 CMS 1.3.1 PHP 7.2 基准测试结果:417.13 请求/秒
  • 10 月 CMS 1.3.1 PHP 7.3 基准测试结果:458.63 请求/秒
  • 10 月 CMS 1.3.1 PHP 7.4 基准测试结果:532.65 请求/秒
  • OctoberCMS 1.3.1 PHP 8.0 基准测试结果:640.08 请求/秒🏆
  • OctoberCMS 1.3.1 PHP 8.1 基准测试结果:不支持🚫

PHP 8.0 显然是这里的赢家。OctoberCMS 在 PHP 8.0 上每秒处理的请求比在 PHP 7.4 上多 20.16% 。我们渴望看到它的下一个主要更新在 PHP 8.1 上的表现。

Laravel 8.80.0

Laravel 是目前最流行的 PHP 框架。由泰勒·奥特威尔创作,于 2011 年 6 月发行。您可以使用 Laravel 开发几乎任何 web 应用程序,包括 CMS、电子商务网站、应用程序等等。

Laravel logo

我们使用默认的 Laravel 登录页面对 Laravel 进行基准测试。

正如 Laravel 创始人 Taylor Otwell 在之前指出的,你不应该用这些基准测试结果来比较 Laravel 和其他 PHP 框架。这里的目标是看看当一切都不变时,Laravel 在不同 PHP 版本上的表现如何。

A screenshot of the tested Laravel page.

The tested Laravel page.

  • 被测网址: **/** (主页)
  • 主题:普通 HTML
  • 注意:被测试的页面有很多必不可少的 HTML 元素。虽然它不是一个成熟的 web 应用程序,但它的目标是对 PHP 而不是 Laravel 进行基准测试。
  • 图片来源: Laravel 官方知识库

Graphs for Laravel 8.80.0 PHP Benchmarks.

Laravel 8.80.0 PHP Benchmarks.

基准测试结果

  • Laravel 8.80.0 PHP 7.2 基准测试结果:不支持🚫
  • Laravel 8.80.0 PHP 7.3 基准测试结果:2278.86 请求/秒
  • Laravel 8.80.0 PHP 7.4 基准测试结果:2303.23 请求/秒
  • Laravel 8.80.0 PHP 8.0 基准测试结果:2376.40 请求/秒🏆
  • Laravel 8.80.0 PHP 8.1 基准测试结果:2002.94 请求/秒

很高兴看到 Laravel 支持最新的 PHP 版本。PHP 8.0 和 Laravel 是毫无争议的冠军,而 PHP 8.1 排在最后。这里还有改进的余地。也许刚刚发布的 Laravel 9 可能会产生有趣的结果,但那是我们下一个基准测试的结果。

5.4.2 号交响曲

Symfony 是一套可重用的 PHP 组件和 PHP 框架,用于构建 web 应用、API、微服务和 web 服务。这是一个免费的开源软件,于 2005 年 10 月 22 日发布。

Symfony

虽然 Symfony 已经发布了 6.x 版本,但它只支持 PHP 8.0 及以上版本。因此,我们决定使用它最新的 5.4.2 版本来测试 PHP。

你可以用一个演示应用来安装 Symfony。这是一个参考 CMS 应用程序,演示了如何最好地使用 Symfony 及其各种功能。我们使用这个演示应用程序的主页来测试 Symfony。

A screenshot of the tested Symfony page.

The tested Symfony page.

  • 测试网址: **/**(首页)
  • 主题: Symfony 演示
  • 注意:测试的页面包含一个带有 Logo 的页眉,主页链接,搜索小部件,语言转换器小部件,以及有很多帖子的 blogroll。还有一个侧边栏,上面有小文本框、“显示代码”和“博客帖子 RSS”等小部件。
  • 图片来源: Symfony 官方知识库

A graph of the Symfony 5.4.2 PHP Benchmarks.

Symfony 5.4.2 PHP Benchmarks.

基准测试结果

  • Symfony 5.4.2 PHP 7.2 基准测试结果:不支持🚫
  • Symfony 5.4.2 PHP 7.3 基准测试结果:416.18 请求/秒
  • Symfony 5.4.2 PHP 7.4 基准测试结果:434.95 请求/秒
  • Symfony 5.4.2 PHP 8.0 基准测试结果:443.79 请求秒
  • Symfony 5.4.2 PHP 8.1 基准测试结果:524.78 请求/秒🏆

使用 Symfony,PHP 8.1 和其他版本有很大的不同。例如,Symfony 在 PHP 8.1 上的运行速度比 PHP 7.4 快 20.65%。

厌倦了慢热的主持人?Kinsta 的设计考虑了速度和性能。查看我们的计划

Symfony on PHP 8.1 can handle 20.65% more requests per second than PHP 7.4 ⏩⚡Click to Tweet

代码点火器 4.1.8

CodeIgniter 是一个占用空间很小的 PHP 框架。例如,它的最新版本是 1.2 兆下载。它由埃利斯拉普创造,由不列颠哥伦比亚理工学院培养。尽管 CodeIgniter 很大,但您仍然可以使用它来开发功能全面的 web 应用程序。

CodeIgniter logo

为了对 CodeIgniter 进行基准测试,我们使用他们的官方教程建立了一个演示应用程序。它使用一个基本的 HTML 主题,并输出许多“新闻”项目。

A screenshot of the tested CodeIgniter page.

The tested CodeIgniter page.

  • 测试的网址: **/news/**
  • 主题:普通 HTML
  • 注意:被测试的页面包含一个新闻条目列表,包括标题、内容和到主要内容的链接。该数据库包括 1 表“新闻”与 1000 行新闻项目,列- > id,标题,鼻涕虫,身体。该页面连接到数据库,并显示了表上的所有帖子。CodeIgniter 应用程序包含 1 个路由和 1 个控制器来显示这些内容。
  • 图片来源:CodeIgniter.com 官方网站

Graphs for CodeIgniter 4.1.8 PHP Benchmarks.

CodeIgniter 4.1.8 PHP Benchmarks.

基准测试结果

  • CodeIgniter 4.0.4 PHP 7.2 基准测试结果:不支持🚫
  • CodeIgniter 4.0.4 PHP 7.3 基准测试结果:不支持🚫
  • CodeIgniter 4.0.4 PHP 7.4 基准测试结果:1907.33 请求/秒
  • CodeIgniter 4.0.4 PHP 8.0 基准测试结果:1770.33 请求/秒
  • CodeIgniter 4.0.4 PHP 8.1 基准测试结果:1920.51 请求/秒🏆

PHP 8.1 是使用 CodeIgniter 最快的,每秒执行的请求比 PHP 8.0 多 8.48% 。然而,令人惊讶的是,发现 PHP 7.4 的性能比 PHP 8.0 好得多——它几乎与 PHP 8.1 不相上下。

CakePHP 4.3.4

CakePHP 是一个开发 PHP 应用的开源 web 框架。它有望使构建 web 应用程序更简单、更快、代码更少。

CakePHP logo

为了对 CakePHP 进行基准测试,我们使用了它的默认登录页面。在基准测试之前,我们将它连接到一个数据库。

The tested CakePHP page.

The tested CakePHP page.

  • 测试网址: **/**(首页)
  • 主题:普通 HTML
  • 注意:测试的页面是一个简单的 HTML 登陆页面,有一些样式。它给出了当前 CakePHP 安装的简要信息。
  • 图片来源: CakePHP 官方知识库

Graphs for the CakePHP 4.3.4 PHP Benchmarks.

CakePHP 4.3.4 PHP Benchmarks.

基准测试结果

  • CakePHP 4.2.2 PHP 7.2 基准测试结果:743.46 请求/秒
  • CakePHP 4.2.2 PHP 7.3 基准测试结果:874.69.28 请求/秒
  • CakePHP 4.2.2 PHP 7.4 基准测试结果:954.30 请求/秒
  • CakePHP 4.2.2 PHP 8.0 基准测试结果:973.02 请求/秒🏆
  • CakePHP 4.2.2 PHP 8.1 基准测试结果:918.21 请求/秒

令人惊讶的是,PHP 8.0 与 CakePHP 旗鼓相当。然而,所有的基准测试结果都非常接近,无法称之为绝对的赢家。PHP 8.1 只比 PHP 8.0 慢 5.6% 。CakePHP 4.3.x 的未来更新可能会解决这个问题。

工艺 CMS 3.7.30.1

Craft CMS 是一个专注于用户友好的开源内容管理系统。它的后端是完全可定制的。Craft CMS 有一个内置的工具,可以为不同的内容类型设计定制字段布局,这使得使用定制内容类型变得非常简单。

如果你打算创建一个定制的电子商务商店,可以去看看 T2 的手工艺品商店。对于一个本地开发环境来说,也有 Craft Nitro

Craft CMS logo

对于 Craft CMS 基准,我们使用其默认的管理员登录页面。这是一个简单的登录页面,包括一个登录表单来访问网站的后端。

Screenshot of the tested Craft CMS page.

The tested Craft CMS page.

  • 测试的网址: **/admin/login/**
  • 主题:默认
  • 注意:测试的页面是一个简单的带有表单的登录页面。
  • 图片来源: Craft CMS 官方知识库

Graphs for Craft CMS 3.7.30.1 PHP Benchmarks.

Craft CMS 3.7.30.1 PHP Benchmarks.

基准测试结果

  • craft CMS 3.5.17.1 PHP 7.2 基准测试结果:75.32 请求/秒
  • craft CMS 3.5.17.1 PHP 7.3 基准测试结果:74.69 请求/秒
  • craft CMS 3.5.17.1 PHP 7.4 基准测试结果:81.68 请求/秒
  • craft CMS 3.5.17.1 PHP 8.0 基准测试结果:417.21 请求/秒
  • Craft CMS 3.5.17.1 PHP 8.1 基准测试结果:443.18 请求/秒🏆

PHP 8.1 凭借 Craft CMS 拔得头筹。与我们之前的基准不同,Craft CMS 现在同时支持 PHP 8.0 和 PHP 8.1——这太棒了!

科比·3.6.1.1

Kirby 是一个专注于内容创建和发布的平面文件 CMS。虽然它的源代码是公开的,但它不能在公共服务器上免费使用。您可以使用 Kirby 定制您的表单、文章、图库、电子表格等编辑界面。

Kirby logo

您可以用 Starterkit 安装 Kirby,它会建立一个功能齐全的演示站点。我们使用它的关于我们的页面作为基准。

Screenshot of the tested Kirby page.

The tested Kirby page.

  • 被测网址: **/about/**
  • 主题: Starterkit
  • 注意:测试页面是一个关于我们的页面,有特色图像、文本、小部件、页眉、导航菜单、社交媒体图标和页脚。
  • 图片来源: 柯比官网

Graphs for the Kirby 3.6.1.1 PHP Benchmarks.

Kirby 3.6.1.1 PHP Benchmarks.

基准测试结果

  • 科比·3.6.1.1 PHP 7.2 基准测试结果:不支持🚫
  • 科比·3.6.1.1 PHP 7.3 基准测试结果:不支持🚫
  • 柯比 3.6.1.1 PHP 7.4 基准测试结果:3326.72 请求/秒
  • 科比·3.6.1.1 PHP 8.0 基准测试结果:3514.96 请求/秒🏆
  • 柯比 3.6.1.1 PHP 8.1 基准测试结果:3922.77 请求/秒🏆

PHP 8.1 在 Kirby 的基准测试中表现出色。值得一提的是,在我们测试的所有 PHP 平台中,Kirby 每秒处理的请求最多。尽管这是一个苹果和橘子的比较,但仍然值得一试。它的主要缺点是不能免费使用。

Flarum 1.2.0

Flarum 是一款免费开源的在线讨论论坛软件。

Flarum Logo

你可以用一个演示网站来安装 Flarum。我们还添加了三个线程和几段文本。

Screenshot of the tested Flarum page.

The tested Flarum page.

  • 已测试网址: **/**(首页)
  • 主题:默认主题
  • 注意:测试的页面是论坛主页,有一个页眉、一个徽标、搜索小部件、特色文本块、导航菜单、通知图标、侧菜单、讨论线程列表、其他小部件和页脚。最新的 Flarum 版本还不支持 PHP 8.1,所以我们无法进行基准测试。
  • 图片来源: Flarum 官网

Graph for the Flarum 1.2.0 PHP Benchmarks.

Flarum 1.2.0 PHP Benchmarks.

基准测试结果

  • Flarum 1.2.0 PHP 7.2 基准测试结果:不支持🚫
  • Flarum 1.2.0 PHP 7.3 基准测试结果:120.21 请求/秒
  • Flarum 1.2.0 PHP 7.4 基准测试结果:122.06 请求/秒🏆
  • Flarum 1.2.0 PHP 8.0 基准测试结果:119.67 请求/秒
  • Flarum 1.2.0 PHP 8.1 基准测试结果:不支持🚫

Flarum 是我们 PHP 基准测试的新成员。由于这是一个流行的 PHP 论坛软件,我们很高兴能测试它,看看它的表现如何。虽然 PHP 7.4 在 Flarum 上表现最好,但在我们进行基准测试的所有其他 PHP 版本上几乎都是一样的。

在 Kinsta 更新到 PHP 8.1

PHP 8.1 引入了许多令人兴奋的特性。其中一些是激进的,打破了与以前的 PHP 版本(主要是< PHP 8.0)不兼容的改变。

如果你的网站的所有功能都可以很好地运行,你没有理由不升级到 PHP 8.1。如果以上结果还不能说服你,我们不确定还有什么能说服你!

作为一个友好的提醒,所有的 Kinsta 客户端都可以使用 PHP 8.0、8.1 和我们定制的自我修复数据库配置

Kinsta supports PHP 8.0 and 8.1.

Kinsta supports PHP 8.0 and 8.1.

如果你担心由于与第三方插件不兼容而破坏你的网站(这是可能发生的),我们有暂存站点👍

您可以使用我们的临时站点功能进行无休止的测试,而不必担心破坏您的生产站点。一旦你确定一切都运行良好,你就可以按下一个按钮来进行实时修改。

PHP 基准测试结果总结

Graphs of the compiled PHP Benchmarks.

The compiled PHP Benchmarks.

从上面的基准测试结果中,您可以看到 PHP 8.1 在大多数 PHP 平台和配置中领先,紧随其后的是 PHP 8.0。

以下是我们对 2022 年 PHP 基准测试结果的扩展总结:

  • 对于 WordPress,PHP 8.1 是所有基准测试中最快的(股票 WordPress 5.6 和 WooCommerce)。轻松数字下载还不支持 PHP 8.1,但我们可以期待类似的性能改进。
  • 如果你正在使用 WordPress,并且你所有的主题和插件都与 PHP 8.1 兼容,你没有理由不把你的 PHP 版本升级到 PHP 8.1。您将会体会到它带来的性能优势。
  • PHP 8.0 最快的是 Laravel framework,这是构建 web 应用程序最流行的 PHP 框架。在基准测试时,Laravel 9 还没有发布。我们将在下面的基准测试中使用它。
  • 如果你使用的任何插件或主题与 PHP 8.0 不兼容,更不用说 PHP 8.1 了,我们建议你联系他们的开发者并告知他们。
  • 随着对 PHP 7.4 的支持在 2022 年末即将结束,你应该计划尽快将你的站点迁移到 PHP 8.0 和更高版本。
  • PHP 8.0 预示着 PHP 的新黎明,就像 PHP 5.6 独领风骚时的 PHP 7.0 一样。PHP 8.1 将火炬向前推进了一大步。我们希望以后的 PHP 8.x 版本在性能和安全性方面得到进一步优化。
  • 我们没有在启用 JIT 的情况下测试 PHP 8.x。虽然 PHP 的新 JIT 编译器不会给 WordPress 等真正的应用程序带来任何显著的性能优势,但看看它在实际使用中的表现会很有趣。
  • 如果你的主机提供商跟不上新的 PHP 版本,重新考虑一下他们。
  • 如前所述,在将你的网络服务器环境升级到 PHP 8.0 和 PHP 8.1 之前,请彻底测试你的网站。
  • 除了升级到最新的 PHP 版本之外,WordPress 用户还可以通过其他网络性能增强技术来进一步提高他们网站的速度。我们已经将它们全部编入了关于如何加速你的 WordPress 站点的终极指南中。

这是一次对各种 PHP 平台的基准测试。我们对 PHP 8.1 非常兴奋。我们希望你也是!

如果你对我们升级 PHP 版本的基准或体验有任何想法,我们很乐意倾听。把它们放在评论里吧!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 开发人员平均工资是多少?深入研究 2022 年的数据

原文:https://kinsta.com/blog/php-developer-salary/

PHP 开发:一些人认为它是一种前景光明的流行语言,另一些人认为它是一种过时的技术,不值得花时间去学习。但是这些数字说明了什么,尤其是当你看一看 PHP 开发人员的工资时?

虽然肯定有许多更新、更炫、更令人兴奋的语言,但 PHP 仍然是后端 web 开发的可靠工具,也是许多雇主仍在寻找的技能。

有兴趣成为一名 PHP 开发人员吗?我们已经讨论了 web 开发人员的平均工资,现在让我们来看看 PHP 的收入情况。

快速提示:我们在这里四舍五入数字,所以请确保检查原始来源,以获得更准确的值。

PHP 开发员是个好工作吗?

所以你正在考虑成为一名 PHP 开发人员。但这真的是你的工作吗?除了薪水的问题,这是一个值得追求的好职业吗?

关于 PHP,有一些事情需要记住。像任何其他编程语言一样,它有其优点和缺点。如果这是你要从事的职业,你会发现有很多理由去尝试。

第一: PHP 是一门非常容易学的语言。其他编程语言在您习惯之前可能会令人困惑,它们使用晦涩的命名约定或难以记忆的高级编码标准。

但是 PHP 清晰、易读、易于理解,这使得它成为学习最好的编程语言之一。如果你有任何编程背景,甚至对 web 开发是如何工作的有一点模糊的了解,你只要看一下就能大致了解一个 PHP 字符串在做什么。这是最好的语言之一。

不过,这种简单性确实意味着更多的竞争。所以刚开始,你的工资可能会低一些。但是高度熟练的 PHP 开发人员很受欢迎,所以如果你能掌握它,你就有可能赚很多钱。这种受欢迎程度意味着有大量的职业机会。

学习 PHP 的另一个好理由是:它可以与其他技能和语言完美结合。你可以学习 HTML/CSS 和 JavaScript,成为一名全栈开发人员,或者使用 SQL 进入数据库管理。C/C++程序也可以与 PHP 交互。有了PHP’s exec()功能,它可以和几乎任何东西一起工作。

与新的语言不同,PHP 不是一场赌丨博。它经过了尝试和测试,像 WordPress 这样的主要项目甚至在 2022 年也保持了它的相关性。你的工作短期内不会有任何进展,这就是为什么这么多开发人员继续从事这项工作的原因。
T3】

一个 PHP 开发人员是做什么的?

作为一名 PHP 开发人员,你的日常任务是什么?为此,我们需要回答什么是 PHP以及如何使用它。

PHP 是一种通用的脚本语言。这意味着它实时执行脚本(不像“编译编程语言”在启动时一次运行),并且可以用于创建任何类型的应用程序——尽管它更经常用于 web 开发。

它也是一种服务器端语言,这意味着它的代码是在你的服务器上执行的,而不是在访问者的浏览器上,不像客户端语言,如 JavaScriptCSS 。这使得更加安全,并且适用于向你的服务器发送数据等不易被操控的任务。

这通常就是 PHP 的用途:动态任务需要改变 web 服务器或数据库中的文件。虽然 JavaScript 和其他客户端语言可以动态地影响你的网站的外观和行为,而不会让你的服务器因请求而陷入困境,但 PHP 在后台执行关键任务。

作为一名 PHP 开发人员,你将负责网站的后端开发,为基于网络的应用程序和幕后工作打下基础。你可以制作安全的表单和其他用户输入区域,与前端开发人员一起工作,并将数据库与你的 PHP 应用挂钩。

当然,您需要想出创造性的方法来解决问题,并使用 PHP 实现您的客户想要的特性。

初始设置期结束后,您需要继续进行维护。这意味着当不兼容出现时要修复,在 PHP 新版本发布时更新你的代码,维护数据库和表格。

做一个 PHP 开发人员需要什么?

进入任何开发领域都需要一套类似的技能,尽管后端开发和 PHP 确实有其独特的要求。

首先是教育。如今,技术工作的雇主更关心经验而不是学位,尤其是初级职位和像 PHP 这样简单易学的语言。自由职业者、实习和初级工作可能是一个很好的方式来提升自己,获得找到一份好工作所需的经验。

然而,成为一名优秀的开发人员确实需要一系列的核心技能:

此外,知道如何使用数据库几乎是必须的。即使您不是全栈开发人员,您也应该了解 HTML/JavaScript 的基础知识以及它们如何与 PHP 交互,这样您就可以识别兼容性错误。

Want to make $81k/year? 💰 Check out this guide to PHP developer salaries to see how experience and location determine pay 🌎Click to Tweet

PHP 开发人员的平均工资

现在是你们期待已久的时刻:工资数字。

请记住,这些统计数据完全是自我报告的;只有在这些网站上注册并支付薪水的开发者才会对这个估价有所贡献。因此,这些数字不会十分准确,但它们可以让你大致了解你的预期收入。

如果你想要一个更官方的来源,美国劳动局报告称网络开发者在 2019 年每年赚 74k 美元。这是所有的 web 开发人员,而不仅仅是 PHP 开发人员,但它给了你一些东西来比较你的预期工资。

你也可以看看我们关于网络开发人员薪水的报告,看看 PHP 开发进展如何。

现在让我们来看看 PHP 开发人员的平均工资。

  • glass door:81k 美元/年,低的 55k 美元,高的 100k 美元。
  • zip recruiter:86k 美元/年,低的 16k 美元,高的 137k 美元。
  • 工资等级:64k 美元/年,最低 43k 美元,最高 94k 美元。
  • 实际上,根据网站上发布的招聘信息,年薪为 9.4 万美元。

PHP developer salary

PHP developer salary (avg.)

总体来说还不错!将所有这些平均起来,您会得到每年 81,000 美元的估算值。对于像 PHP 这样容易学习的语言来说,这已经很不错了;每天几个小时的学习可以让你从一个不熟练的工人变成一个有才华的开发者,拿着舒适的薪水。

请记住,对于计算机科学和编程领域,这实际上是一个相当低的工资。其他语言可以支付更好的,超过 10 万美元/年,特别是在美国。

PHP 开发人员的经验水平工资

开发人员的薪水因经验不同而差异很大。更多的经验意味着你可以独立处理更多的事情,帮助年轻的开发者,所以公司愿意支付额外的费用。

首先:初级或入门级的薪水。两者除了标题没有太大区别。这是你作为 PHP 开发人员的第一份工作所能期望得到的,你几乎没有经验,也许还受过一些教育。

作为一名初级 PHP 开发人员,你最多只有两三年的经验,你的任务是编写基本代码并完成大部分的错误修复

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

初级候选人的 PHP 开发人员平均薪资如下:

  • glass door:64k 美元/年,低的 45k 美元,高的 90k 美元。
  • zip recruiter:62k 美元/年,低的 26k 美元,高的 92k 美元。
  • Salary.com:63000 美元/年,典型的薪资范围是 56000-71000 美元。

正如你所看到的,这些数字变化不大,所以这可能是一个相当准确的估计。

接下来是高级 PHP 开发人员的工资。作为一个大四学生,你应该有 3-5 年的经验,可能十年甚至更久。

Senior PHP developer salary

Senior PHP developer salary (avg.)

你将被期望在没有监督的情况下工作,编写高质量的代码,并有可能监督和培训他人。伴随着所有这些责任而来的是更高的薪水。这就是进入 PHP 真正有回报的地方。

  • glass door:92k 美元/年,低的 68k 美元,高的 128k 美元。
  • zip recruiter:10.1 万美元/年,低的 4.4 万美元,高的 13.7 万美元。
  • 薪资等级:88k 美元/年,低的 61k 美元,高的 121k 美元。

代理与自由职业 PHP 开发人员的工资

自由职业是艰难的。你 100%负责挣你自己的工资,另外负责你所有的市场营销。你需要先被找到,然后才能挣到钱,而且很难起步。但是到底低了多少呢?

可能没有你想象的那么糟糕。事实上,自由职业的 PHP 开发人员有潜力赚很多钱。

根据 ZipRecruiter 的数据,自由职业的 PHP 开发人员平均年薪为 89k 美元,或 43 美元/小时。与 Glassdoor 报道的一般自由网页开发者 75000 美元(或约 36 美元/小时)的工资相比,这已经相当不错了。

CodeMentor 报告自由 PHP 开发人员平均每小时挣 61-80 美元。按照每周 40 小时的标准工作时间(请记住,你可能会工作得更少,尤其是刚开始的时候),那就是每年 12.7 万到 16.6 万美元。

Freelance PHP developer salary

Freelance PHP developer’s hourly rate (avg.)

这与机构工资相比如何?大多数自由职业者不会把自己描述为“初级”或“高级”PHP 开发人员,所以为了准确比较,回头看看这些薪水是个好主意。

平均所有来源的数据:

  • 初级 PHP 开发人员每年挣 6.3 万美元
  • 高级 PHP 开发人员的年薪约为 94k 美元

另一方面,自由职业的 PHP 开发人员有可能赚得更多。这完全取决于你设定的时薪,以及你向客户推销时薪的能力。

需要为您的客户站点提供一个非常快速、安全且对开发人员友好的托管服务吗?Kinsta 是为 WordPress 开发者设计的,提供了大量的工具和强大的仪表板。查看我们的计划

不同国家 PHP 开发人员的平均工资

很多这样的薪资报告可能有点偏向美国的开发者。

如果你住在美国以外的地方,作为一名 PHP 开发人员,你希望挣多少钱?下面是欧洲 PHP 开发者薪资;其余数据是从 Glassdoor 收集的。请注意,在此列表中,这些都已转换为美元。

  • 瑞士:8.3 万美元/年。
  • 美国:8.1 万美元/年。
  • 澳大利亚:7.3 万美元/年。
  • 丹麦:7.3 万美元/年。
  • 挪威:7 万美元/年。
  • 瑞典:58k 美元/年。
  • 德国:56k 美元/年。
  • 英国:52k 美元/年。
  • 荷兰:5.2 万美元/年。
  • 芬兰:5 万美元/年。
  • 法国:45000 美元/年。
  • 加拿大:47k 美元/年。
  • 西班牙:34k 美元/年。
  • 葡萄牙:22k 美元/年。
  • 印度:8k 美元/年。

international PHP developer salaries

DDI Development

查看你所在地区的工作列表,更准确地了解你的期望。

简而言之:美国肯定是收入最高的国家之一,这可能是因为需求以及与其他一些国家相比生活成本较高。你可能还想看看美国各州的 PHP 开发人员平均工资列表。纽约州排名最高,为每年 9.4 万美元,北卡罗来纳州排名最低,仅为每年 6.9 万美元。

全栈 PHP 开发人员工资

全栈开发人员拥有广泛的技能。您将使用 PHP 作为后端,同时用 HTML、CSS 和 JavaScript 维护前端。除此之外,您可能还会使用数据库代码。

这基本上是一个完整的网站,所以你会期望获得相当不错的薪水。

  • 玻璃门:10.6 万美元/年。
  • zip recruiter:8.5 万美元/年,最低 2.7 万美元,最高 13.7 万美元。
  • 实际上:11.3 万美元/年,基于超过 1.7 万的薪水。

Full stack PHP developer salary

Full stack PHP developer salary (avg.)

这是所有 PHP 开发人员中工资最高的,甚至与高级开发人员相比也是如此。足够的经验真的能有回报!

PHP 开发人员工资低吗?

现在你已经看到了数据,这些工资与其他开发语言相比如何?虽然高年级学生、全职员工和成功的自由职业者能挣不少钱,但对于普通的 PHP 开发人员来说,与他们的薪资预期相关的数据看起来并不那么令人兴奋:

programming language salaries

Programming language salaries

无论你使用从 Glassdoor、Payscale 和类似网站收集的我们的数据,还是的其他调查,PHP 一直都在垫底。唯一一种似乎更便宜的语言是 HTMLCSS

这是为什么呢?

学习这门语言的容易程度可能是原因之一。PHP 是一个很好的入门技能,很容易掌握,但这当然意味着你要与大量初级开发人员争夺客户和公司职位。

你可以在两周到一个月的学习和练习中学会 PHP。你不需要太多的技术专业知识就能进入其中:你可以在几周内从零编程技能到编写功能性 PHP 应用程序。

另一方面,当前顶级受薪语言之一 Scala 的创造者在 Coursera 上有一门课程。大约需要七个月才能完成!这也不仅仅是你可以作为你的第一个编程语言的东西。你需要过去的经验。

但是随着你的成长和通过低技能的竞争,学习如何用 PHP 编写更复杂的任务和处理更大的项目,你会发现你的工资变得比其他语言更有竞争力。

Let's talk salaries. 💸 Learn what factors determine your pay as a PHP developer (hint: in Switzerland, you could be earning $83k!)📈Click to Tweet

摘要

众所周知,与其他编程语言相比,PHP 的工资较低,数字也表明了这一点。除了 HTML 和 CSS,PHP 是报道最少的开发者之一。肯定有更多高薪的软件工作。

尽管如此,它仍然为你的职业发展提供了可观的收入和良好的机会。想想 WordPress 的生态系统,它充满了可以工作的主题插件以及总是要发布新产品的公司。

拥有多年各种语言经验和技能的高级和全栈 PHP 开发人员是收入最高的人。刚开始的时候,预计薪水会低一些,但是要知道随着你的成长,薪水只会越来越好。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

23 个最佳 PHP 编辑器和 ide(免费和付费)

原文:https://kinsta.com/blog/php-editor/

要编写高质量的 PHP 代码,你需要一个高质量的 PHP 编辑器,最适合你的编程需求、偏好和工作流程。市场上有许多可用的选项,虽然乍一看它们可能是一样的,但是每个 PHP 编辑器都有其独特的特性和最佳用例。

在本指南中,您可以找到最好的 PHP 编辑器和 ide,它们可以帮助您编辑 PHP 文件,开发、调试和测试 PHP 应用程序。

他们面向不同类型的用户,从需要开箱即用的无配置 PHP 编辑器的初学者到想要使用特定堆栈、框架或工具包的有经验的 PHP 程序员。虽然这个列表中的大多数工具都是免费的,但我也添加了一些附带技术支持和额外功能的高级工具。

PHP 编辑器与 PHP IDE

PHP 编辑器和 PHP IDEs 是两种可以用来编辑 PHP 文件的软件。两者的主要区别在于复杂性。如果您想要一个非常简短的定义,PHP IDE 是一个具有扩展功能的增强 PHP 编辑器。

如果你是初学者或者没有开发复杂的 PHP 应用程序,你最好使用 PHP 编辑器。它加载更快,有一个更简单的用户界面,更容易配置和设置,但仍然为您提供了编码时需要的所有编辑功能。

然而,如果你是一个经验丰富的 PHP 程序员,构建复杂的应用程序,并有特定的编码需求,PHP IDE 可能是一个更好的解决方案。

Find the perfect PHP editor for your programming needs, preferences, and workflow in this roundup ⬇️Click to Tweet

什么是 PHP 编辑器

从技术上讲,你可以用一个基本的文本编辑器来编辑 PHP 文件,比如 Windows 上的 Notepad 应用程序,但这并不是一件容易的事情。主要问题是,如果没有语法突出显示,源代码文件很难阅读,语法突出显示可以让你以不同的颜色字体看到不同的代码结构,如变量、关键字和参数。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

代码可读性差不仅会导致多个错误,还会降低你作为程序员的速度,因为这将花费更多的时间来浏览你的代码并找出下一步。为了有效地编辑 PHP 文件,你需要一个理解 PHP 语法的源代码编辑器,并根据它的意思高亮显示每一段代码。

尽管语法突出显示是每个 PHP 编辑器的首要特性,但它不是唯一的特性。最好的 PHP 编辑器具有多种附加功能,可以帮助你编写和编辑 PHP 代码,理解文件和项目的结构,并且减少错误。例如,换行符、缩进、自动完成、不同的视图和编辑模式、代码完成、搜索和比较功能以及智能代码提示都是这样的功能。

除了这些高级编辑功能,现代 PHP 编辑器还具有帮助您完成其他任务的功能,如调试版本控制、重构等等。

请注意,大多数 PHP 编辑器不仅仅是用来编辑 PHP 文件的,它们还是通用的文本编辑器,对许多其他源代码文件类型也有语法支持。例如,如果你以前编辑过 HTML 文件,并且已经有了一个的 HTML 编辑器,它很有可能也支持 PHP 语法,如果你愿意,你可以继续使用它。

什么是 PHP IDE

IDE 是代表集成开发环境的首字母缩写。PHP IDE 拥有 PHP 编辑器的所有语法突出显示和其他功能,以及许多其他有助于 PHP 开发的特性。

最好的 PHP ides 通常会为您提供预先制作的代码模板和详细的项目和类向导,有许多高度可定制的视图和面板,您可以按照自己的意愿进行排列,并附带集成的开发工具,例如内置的终端web 服务器web 浏览器,您可以在 IDE 界面中直接使用它们。它们还与众多第三方工具紧密集成,如调试器(如 PHPUnit 和 Xdebug)以及容器和虚拟机平台(如 Docker 和 vagger)。

还有一些云 PHP IDEs 可以让你在网络浏览器中建立一个高级的编码环境,并将你的文件保存到云服务器中。Cloud IDEs 还可以为你提供预构建的 PHP 栈,例如,一个容器化的 LAMP (Linux、 ApacheMySQLPHP )栈,允许你在一个活动的 Linux 服务器上工作,并在 web 浏览器中即时检查你的工作。

信息

寻找一个全新的 100%免费的本地 WordPress 开发工具?然后一定要去看看德夫金斯塔

尽管 PHP IDE 提供了比 PHP 编辑器更多的特性,但它也需要更多的专业知识来设置和配置环境。例如,您可能需要添加和配置 web 服务器,该服务器将执行您的代码、定义环境变量和 PHP 可执行文件,并执行其他高级开发任务。

所以,如果你不想使用 IDE 的额外功能,额外的工作量很可能是不值得的,即使你有做配置的专业知识。但是,如果您需要这样的特性,PHP IDE 可以显著加快您的编码、测试、调试和概要分析(程序分析)工作。

也就是说,目前 PHP 编辑器和 ide 之间的界限越来越模糊。PHP 编辑器已经开始整合以前只能在 ide 中找到的特性,比如内置调试器和终端、高度可定制的视图和面板等等。

10 个最好的免费 PHP 编辑器

让我们从最好的免费 PHP 编辑器开始,它们为您提供了读取、创建和编辑 PHP 文件的所有重要功能。

1.Visual Studio 代码

Visual Studio Code

Visual Studio Code

  • 支持的操作系统:Windows、Linux、macOS
  • 许可证:麻省理工学院许可证
  • 源代码:https://github.com/microsoft/vscode
  • 支持的语言:PHP,HTML,CSS,SCSS,Less,JavaScript,JSON,TypeScript,Markdown,PowerShell,C++,Java,Python,Go,T-SQL,C#。NET Core 等等

Visual Studio Code (简称 VS Code)是微软推出的免费开源代码编辑器,近年来广受欢迎。它默认支持 PHP 语法,你可以从 VS 代码市场下载进一步的 PHP 扩展 s,让它成为一个适合你特定编码需求的高级 PHP 编辑器。您可以定制 VS 代码的每个方面,从主题到关键绑定到集成和功能。

最佳特性:

  • 语法突出显示、自动完成和代码导航
  • 使用智能感知的智能代码完成
  • 颜色主题选择器
  • 内置的 Git 和 GitHub 集成
  • 内置 Emmet 支持
  • 可扩展性(您可以创建自己的扩展)
  • 林挺,调试,重构
  • 集成终端
  • 结对编程的实时共享(带扩展)

2.原子

Atom

Atom

  • 支持的操作系统:Windows、Linux、macOS、FreeBSD
  • 许可证:麻省理工学院许可证
  • 源代码:https://github.com/atom/atom
  • 支持的语言:PHP、HTML、CSS、JavaScript、Java、C、C#、Objective C、Perl、Python、Ruby、Go、XML 等等

根据 Atom 的口号,Atom 是“21 世纪可破解的文本编辑器”。本来是 GitHub 的内部工具,后来他们做了开源,但是项目还是由 GitHub 维护。之所以称之为 hackable,是因为您可以定制编辑器界面的每个方面,比如 UI 和语法主题、键绑定、格式、全局和特定于语言的设置等等。

除了核心编辑器的功能之外,你还可以下载将近 9000 个包,这些包允许你添加任何你需要的特性。要将 Atom 配置为 PHP 编辑器,可以添加 PHP 特定的包,用于调试、重构、注释、林挺和其他与开发相关的任务。

最佳特性:

3.括号

Brackets

Brackets

  • 支持的操作系统:Windows、Linux、macOS
  • 许可证:麻省理工学院许可证
  • 源代码:https://github.com/adobe/brackets
  • 支持的语言:HTML、CSS、LESS、SCSS、Sass、JavaScript、PHP、Java、Python、Perl、Ruby、C、C++、VBScript 等等

括号是 Adobe 创建并维护的开源代码编辑器。和 Adobe 的许多产品一样,它主要专注于前端开发,但也支持几种后端语言,包括 PHP。它因其 CSS 内联编辑特性而变得流行,该特性允许您查看属于特定 CSS 规则的所有选择器。

如果您同时进行前端和后端开发,括号可能是您理想的 PHP 编辑器——特别是如果您还使用 CSS 预处理程序,如 Sass 和 LESS。也就是说,括号并不是这个列表中最先进的 PHP 编辑器,但是它是免费的、轻量级的、易于使用的。

Brackets 也有一个扩展注册表,但是,它没有 Atom 或 Visual Studio 代码那么多扩展。

最佳特性:

  • 垂直和水平分割视图
  • 使用与 web 浏览器的实时连接进行实时预览
  • 轻量级(用 JavaScript 编写)
  • 内嵌编辑(用于 CSS)
  • 自定义主题可通过括号扩展注册表获得
  • 支持 CSS 预处理程序,包括快速编辑和实时高亮显示功能

4.GNU Emacs

GNU Emacs

GNU Emacs

  • 支持的操作系统:Windows、Linux、macOS、FreeBSD、NetBSD、OpenBSD、Solaris
  • 许可证:GNU GPL vs 3
  • 源代码:https://git . savannah . GNU . org/cgit/emacs . git
  • 支持的语言:Lisp、PHP、Python、Ruby、Java、JavaScript、Scala、Perl 和许多其他语言

GNU Emacs 是一个稳定且成熟的代码编辑器,自 1985 年就已经上市。它最初是为 GNU 操作系统创建的,但是它也支持许多其他操作系统。Emacs 的设计和功能都可以使用 Emacs Lisp 脚本语言完全定制。

Emacs 支持多种编程语言,包括 HTML 和 CSS,但是前端开发人员通常不使用它。这并不是说,如果你正在寻找一个前端和 PHP 编辑器,Emacs 不推荐给你。但是,请注意,它的学习曲线比这个列表中的大多数其他编辑器都要陡峭。

除了其令人敬畏的功能之外,使用 Emacs 在程序员社区中肯定有一个很酷的因素,因为你需要使用它的专业知识,它甚至出现在流行文化中,如 Tron: Legacy社交网络电影。

最佳特性:

  • 内容感知编辑模式
  • 完全 Unicode 支持
  • 可通过命令行(使用 Emacs Lisp)和图形用户界面定制
  • 开源包仓库来扩展编辑器
  • 内置文档
  • 其他功能,如调试器 UI、项目规划器、IRC 客户端、日历等

5.精力

Vim

Vim

  • 支持的操作系统:Linux、Windows、macOS、Android、iOS
  • 许可证: Vim 许可证
  • 源代码:https://github.com/vim/vim
  • 支持的语言:PHP、Python、Ruby、Java、Lua、JavaScript、Perl、C、C++和许多其他语言

Vim 代表 Vi 改进版,因为它是为 Unix 系统创建的 Vi 代码编辑器的改进版本。它为 Vi 增加了几个重要的特性,比如比较和合并文件、语法突出显示、搜索历史、拼写检查、拆分视图、支持诸如 HTTPFTPSSH 等协议。

您可以在六种基本模式下使用 Vim,分别是正常、可视、选择、插入、命令行和 ex(退出)模式——参见 FreeCodeCamp 的这篇文章,了解 Vim 模式之间的主要差异。Vim 有一个文本用户界面,您可以使用命令和键映射来管理它。然而,如果你更喜欢使用带有图形用户界面的 vim,你也可以下载的 Gvim(图形 Vim)版本

与 Emacs 类似,Vim 是高度可定制和可扩展的,支持数百种编程语言。有数以千计的 Vim 插件可用,但你也可以使用 Vim 脚本(也称为 VimL),Vim 的内部脚本语言,或另一种脚本语言来添加额外的功能。

Vim 是一个非常健壮的工具,但是如果你是初学者或者只是偶尔编写代码,它可能不是你的最佳选择,因为它的学习曲线很陡。但是,如果您想要灵活性和自定义功能,并且不介意学习,Vim 可能是您理想的 PHP 编辑器。如果你想走这条路,这里有一个由有价值的 Dev 博客提供的关于如何将 Vim 配置为 PHP 编辑器的教程。

最佳特性:

  • 6 种不同的编辑模式
  • 初学者的简易模式
  • Unicode 和多语言支持
  • 编辑功能,如高级搜索和替换、多级撤消树、拆分视图、代码完成等
  • 扩展插件系统
  • 内置手册

6.蓝鱼

Bluefish

Bluefish

  • 支持的操作系统:Linux、Windows、macOS、FreeBSD、OpenBSD、Solaris
  • 许可证:GNU GPL vs 3
  • 源代码:https://sourceforge.net/p/bluefish/code/HEAD/tree/
  • 支持的语言:HTML、CSS、XML、JavaScript、PHP、SQL、Perl、Python、Ruby、Java、C、C++等等

Bluefish 是一款高级源代码编辑器,支持多种编程语言。你可以在不同的操作系统上使用它,但是它也集成了 Gnome,所以如果你正在为你的 Linux 发行版寻找一个 PHP 编辑器,Bluefish 可能是你的一个很好的选择——它的 GUI 也是符合 Gnome 人机界面指南的,所以它甚至在 Gnome 桌面上看起来也不错。

因为 Bluefish 是为 web 开发人员设计的,所以它提供了一些有用的特性,比如 Emmet(以前的 Zen Coding)支持、HTML 标签的对话框和向导、Unicode 字符浏览器等等。它也有一个直观的用户界面,易于使用,所以如果你是一个初学者或者不想花很多时间学习如何使用 PHP 编辑器,你可以放心地选择它。

最佳特性:

  • 重量轻,装载速度快
  • 多文档界面(测试了 1000 多个打开的文档)
  • 全屏编辑和拆分视图
  • 编辑功能,如自动完成、内联参考信息、强大的和替换、片段侧栏等
  • 通过 FTP、SFTP、 HTTP 、HTTPS 和其他协议进行远程文件访问
  • 支持多种编码(默认为 UTF8)
  • 可通过插件扩展

第七个绝地武士

jEdit

jEdit

  • 支持的操作系统:Windows、macOS、Linux、BSD
  • 许可证:GNU GPL vs 2
  • 源代码:https://sourceforge.net/p/jedit/svn/HEAD/tree/
  • 支持的语言:HTML,CSS,XML,JavaScript,CoffeeScript,。htaccess、PHP、SQL、Perl、Python、Java、Scala 等等

jEdit 是为 Java 虚拟机编写的跨平台源代码编辑器,因此它可以在任何安装了 Java 运行时环境的操作系统上运行。它的目标是为程序员提供一个可以尽可能快速、轻松地安装和设置的编辑器。jEdit 有 200 多种编程语言的语法高亮显示模式。

尽管 jEdit 是一个稳定的工具,但在这个列表中,你会发现更多有趣的 PHP 编辑器。然而,如果你需要一个开箱即用的易用的免费 PHP 编辑器,还是值得一试。此外,如果你找到一个可以帮助你工作的 jEdit 插件,它也是一个很好的选择——它有一些很酷的插件,包括对版本控制的支持,而不是 Git 和项目及文件管理工具(但是,检查插件的年龄,因为有些插件已经很多年没有更新了)。

最佳特性:

  • 无限的撤销/重做功能
  • 通过无限的剪贴板复制和粘贴
  • 可以同时打开任意数量的编辑器窗口
  • 多重和矩形选择
  • 可以从用户操作中记录宏
  • 支持 Unicode 和 160+字符编码
  • 强大的搜索和替换工具
  • 可通过插件扩展

8.记事本++

Notepad++

Notepad++

Notepad++ 是一个老掉牙但很实用的 Windows 操作系统源代码编辑器。它是作为记事本的替代品而创建的,记事本是 Windows 操作系统预装的默认文本编辑器。Notepad++为非常基本的记事本编辑器增加了多种功能,因此它很快在 Windows 机器上的开发人员中流行起来。

它为近 80 种编程语言提供了语法高亮功能。它易于安装,开箱即用,并具有重要的编辑功能,如分割视图,多文档界面,撤消/重做功能,等等。因此,如果你需要一个易于使用且加载速度快的免费 PHP Windows 编辑器,Notepad++值得一看。

最佳特性:

  • 风格配置选项和预先设计的主题
  • 编辑功能,如代码折叠、自动完成、智能代码完成、语法检查等
  • 支持许多不同的字符集
  • 可通过插件扩展
  • 开源插件可用于 32 位和 64 位系统

9.RJ 发了短信

RJ TextEd

RJ TextEd

  • 支持的操作系统:Windows
  • 许可证:免费软件,但接受捐赠(没有特定的许可证是指定的)
  • 源代码:未发布
  • 支持的语言:HTML、CSS、Sass、LESS、Markdown、JavaScript、JSON、PHP、ASP、Java、Perl 等等

《RJ TextEd》是里卡德·约翰逊(RJ)的一个人项目,也是一个令人印象深刻的项目。它是 Windows 操作系统的全功能源代码编辑器,专门为 web 开发而创建。即使 RJ TextEd 的网站看起来有点基础,但这是一个文本编辑器,具有许多有趣的功能。

您可以通过选择和自定义主题来更改 UI 的各个方面,以不同的排列方式同时打开多个文档视图,并使用开发人员友好的工具,如颜色选择器、HTML 验证和修复工具、charmaps、文本到 HTML 转换等。RJ TextEd 还为 HTML 文件提供了嵌入式浏览器预览(Chrome 和 Internet Explorer)。

RJ TextEd 的授权有点不寻常。虽然它是免费软件,但它不是开源的,因为作者不想发布源代码。然而,您仍然可以通过创建扩展来扩展功能。如果你有任何问题要问,RJ TextEd 也有一个活跃用户论坛

最佳特性:

  • HTML 和 CSS 向导
  • HTML 文件的浏览器预览
  • 带有预设计主题的主题管理器
  • 内置项目管理器
  • 正则表达式创建者
  • 宏管理器
  • 带同步的 FTP/STFP 客户端
  • 编辑功能,如并排文件比较、高级排序、代码折叠、自动完成等

10.文字样式

TextMate

TextMate

  • 支持的操作系统:macOS
  • 许可证:GNU GPL vs 3
  • 源代码:https://github . com/text te/text te
  • 支持的语言:HTML、Markdown、CSS、XML、JavaScript、PHP、SQL、Perl、Python、Java 等等

TextMate 是 macOS 操作系统的高级源代码编辑器。因为它是专门为 Mac 设计的,所以它与底层的 Unix shell 集成在一起,因此您可以用任何编程语言编写定制的操作来处理 Unix 标准流(stdin 和 stdout)。

为了使定制简单明了,TextMate 使用了一个可扩展的捆绑系统。TextMate 捆绑包可以包括语言语法、代码片段、宏、命令、模板、工作流等等。您可以在方便的包编辑器的帮助下管理包。

TextMate 的第一个版本是专有软件,你必须购买许可证。然而,当前版本 TextMate 2.0 已经在 GPLv3+许可下开源,所以你可以免费下载(然而,TextMate 的许可政策页面提到,他们“可能会对 2.0 之后的更新收费”)。如果你正在寻找一个(目前)可以在 Mac 设备上运行的免费 PHP 编辑器,TextMate 2 绝对值得一看。

最佳特性:

  • 自定义主题
  • 实时 HTML/降价预览
  • 强大的搜索工具
  • 剪贴板历史
  • 易于管理的代码片段
  • 可折叠代码块、缩进式软包装、多个 carets、多个选项卡等等
  • 范围设置
  • 捆绑编辑器

4 个最佳 PHP 编辑器

尽管高级 PHP 编辑器价格不菲,但大多数都有免费试用期或评估期,因此您可以毫无风险地试用它们。如果你发现一个你想要使用或者需要技术支持的特性、集成或者插件,一个高级的 PHP 编辑器会是一个很好的解决方案。

1.崇高文本 3

Sublime Text 3

Sublime Text 3

  • 支持的操作系统:Windows、Linux、macOS
  • 价格:80 美元,带 3 年更新;下载免费
  • 执照:参见 EULA
  • 支持的语言:HTML、CSS、Sass、LESS、Markdown、JavaScript、PHP、Python、Perl、Ruby、Java 等等

Sublime Text 3 是著名的 Sublime Text 源代码编辑器的第三个主要版本。新版本为已经流行的编辑器增加了窗格管理和符号索引,并改善了速度问题,如启动时间慢。在插件的帮助下,Sublime Text 3 是完全可定制的——许多现成的插件可以通过编辑器的包管理器获得,但是你也可以创建自己的定制插件。

如果你使用 Sublime Text 3 作为你的 PHP 编辑器,它有许多插件可以用于 PHP 语言,比如评论生成、林挺、测试、美化、格式化等等。另外,它有一些用于 WordPress 开发的插件,可以帮助你编写 WordPress 代码。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

崇高文字 3 的授权有点诡异。尽管它是专有软件,但如果你不介意(经常显示的)弹出通知提醒你购买许可证,你可以免费使用它。

最佳特性:

  • 可定制的代码片段、菜单、宏、按键绑定(使用 JSON 文件)
  • 命令选项板
  • 使用项目范围的函数、类和方法索引转到定义
  • 高级编辑功能,如拆分视图、文档结构图、多重选择、自动完成等
  • 内置软件包管理器
  • 可通过插件扩展

2. UltraEdit

UltraEdit

UltraEdit

  • 支持的操作系统:Windows、Linux、macOS
  • 价格:79.95 美元/年(最多安装 5 次);30 天免费试用期
  • 执照:参见 EULA
  • 支持的语言:HTML、CSS、Markdown、XML、JavaScript、JSON、PHP、MySQL、Python、Perl、Ruby、C、C++等等

UltraEdit 是一款优质的源代码编辑器,自 1994 年就已经上市。这是一个稳定且经过充分测试的应用程序,拥有超过 400 万用户。UltraEdit 开箱即用,具有愉快且用户友好的入职体验。除了可定制的用户界面,它还具有强大的开发人员功能,可以帮助您在云中或远程服务器上工作,备份文件,管理项目,加密/解密文件,等等。

如果您处理的文件很大,导致其他代码编辑器崩溃,UltraEdit 可能是最适合您的 PHP 编辑器,因为它具有强大的文件处理功能——这也是它如此受程序员欢迎的原因之一。除了 UltraEdit,许可证还包括 UltraCompare Pro ,这是一个强大的文件比较工具,支持许多不同的文件类型,并与主要的版本控制系统集成,包括 Git、Subversion 和 CVS。

最佳特性:

  • 自定义主题和布局
  • 强大的搜索功能(在文件中或跨文件)
  • HTML 和 Markdown 的实时预览
  • 强大的命令面板
  • 多插入符号编辑,多选择,列模式,文件比较,可配置的标签选项,等等
  • 支持远程开发的 FTP/SFTP 和 SSH/Telnet 协议
  • 云同步
  • 支持视网膜和其他高分辨率屏幕

3.快速 PHP 编辑器

Rapid PHP Editor

Rapid PHP Editor

  • 支持的操作系统:Windows
  • 价格:非商业用途 49.95 美元;69.95 美元用于商业用途;前 30 次使用是免费的(评估期)
  • 执照:参见 EULA
  • 支持的语言:HTML,CSS,LESS,Sass,JavaScript,PHP,SQL,XML,Smarty,。htaccess

Rapid PHP 编辑器是一款针对 Windows 操作系统的商业代码编辑器。尽管它的名字中包含了“PHP”这个词,但它不仅仅是一个 PHP 编辑器,你还可以用它来编辑其他文件类型。快速 PHP 编辑器是产品线的一部分,该产品线的特色是具有增量特性的相同编辑器。这种设置的主要原因是尽可能保持编辑器的轻量级。例如,如果你只需要 HTMLCSS ,你可以使用快速 CSS 编辑器,但是如果你还需要 PHP 支持,你可以使用快速 PHP 编辑器,它本质上是具有额外功能的相同工具。

在其主页上,Rapid PHP Editor 声称是市场上最快的 PHP 编辑器——它的加载速度确实非常快。这是一个初学者友好的编辑器,带有易于理解的 onboarding 向导,有助于初始配置(如果您愿意,也可以选择退出)。在配置过程中,您可以将 Rapid PHP 编辑器与您的本地 web 服务器集成,这样您就可以在编辑器中预览您的 PHP 文件。

您可以配置快速 PHP 编辑器的任何方面,从设计到布局到功能。由于它包含了 HTML、CSS 和 JavaScript 的强大功能,如果您同时进行前端和后端开发,它可以显著加快您的工作流程。它也有一个友好的价格。你不必每年为许可证付费,只需一次性付费。

最佳特性:

  • 详细的定制选项
  • 内置 HTML/CSS 验证器
  • PHP 文件的预览(使用本地 web 服务器
  • 实时 PHP 语法检查器
  • 多浏览器预览
  • PHP 框架支持(WordPress,Laravel,CakePHP,CodeIgniter,Symfony,Yii,Nette,Prado)
  • 内置 PHP 调试器( Xdebug )和 PHP beautifier
  • 支持 Smarty 模板引擎
  • SVN 和 Git 集成
  • 可以直接通过 FTP/STFP/FTPS 保存文件
  • 可通过插件扩展

4.斯莫卡洛

Smultron

Smultron

  • 支持的操作系统:macOS
  • 价格:单机版许可证 7.99 美元;升级许可证 4.99 美元;免费评估
  • 执照:参见 EULA
  • 支持的语言:HTML、Markdown、LESS、Sass、JavaScript、CoffeeScript、PHP、XML、YAML、Swift、Go、Ruby、Java、Objective-C 等等

Smultron 是一款面向 macOS 设备的商业源代码编辑器,支持多种编程语言。它的名字在瑞典语中的意思是“野生草莓”,因为它是由瑞典程序员彼得·博格开发的。像大多数 Mac 专用应用程序一样,Smultron 具有时尚的设计、直观的用户界面和快速的启动时间。

它包含了你可以从一个高级 PHP 编辑器中得到的多种特性,比如可定制的设计和按键绑定、代码片段、分割文件视图、文件比较功能、HTML 预览、自动完成等等。Smultron 的创建者非常强调隐私,所以如果你想要一个不收集任何关于你的数据的 PHP 编辑器,Smultron 是一个很好的解决方案。

你可以从 Smultron 的网站或者苹果应用商店下载 Smultron。尽管创建者对许可证收取少量费用,但您可以在购买之前免费下载和试用 Smultron。

最佳特性:

  • 预先设计的主题
  • 支持竖排文本和 RTL(从右向左)语言
  • 从 iPhone/iPad 的摄像头扫描文本
  • 高级编码设置(包括对 UTF-8 BOM 的支持)
  • iCloud 支持
  • 无分心模式
  • 所有功能列表视图
  • 支持正则表达式的高级查找和搜索功能
  • 完全辅助功能支持

5 个最好的免费 PHP IDEs

现在,让我们来看看最好的免费 PHP IDEs,它们免费为您提供具有高级编程特性和高度可配置功能 — 的专业开发环境。

1.Eclipse PDT

Eclipse PDT

Eclipse PDT

Eclipse 是一个流行的 Java 虚拟机集成开发环境,但是它也支持其他几种编程语言。 Eclipse PDT 代表 PHP 开发工具。它是 Eclipse 平台的一个插件,但是如果您的机器上没有安装 Eclipse,您也可以在安装过程中选择“Eclipse IDE for PHP Developers”选项,它会自动添加 PHP 开发工具。

使用 Eclipse PDT,您可以访问 Eclipse 的高度可配置的用户界面,并且还可以与其他 Eclipse 插件一起使用。Eclipse PDT 使得常见的 PHP 相关任务,如调试、概要分析、测试、重构和语法检查变得更加容易和流畅。

您还可以添加您的 web 服务器,Eclipse 将使用它来调试和分析 PHP 文件。Eclipse PDT 也支持流行的 PHP 工具,比如 Xdebug、Zend Debugger、Composer 和 PHPUnit。

注意,为了运行 Eclipse,您必须在您的计算机上安装 Java 运行时环境(JRE)或 Java 开发工具包(JDK)。

最佳特性:

需要超快的、安全的、开发者友好的托管?Kinsta 是为开发人员设计的,提供了大量工具和强大的仪表板。查看我们的计划

  • 可定制的用户界面、视图和面板
  • 高级 PHP 代码格式
  • PHP 项目和类向导
  • 预制代码模板
  • 简单的代码导航和代码格式化
  • 支持远程项目
  • 内容辅助、自动完成、代码导航等等
  • 运行 PHP 文件的集成 web 服务器
  • Git 客户端

2. Komodo IDE

Komodo IDE

Komodo IDE

Komodo IDEActiveState 平台的一部分,这是一套开源编程语言的高级开发工具。它是一个跨平台的 IDE,包括对 PHP 的支持(除了其他语言)。Komodo IDE 是 Komodo Edit 源代码编辑器的扩展版本——你可以使用 Komodo Edit 的所有功能,以及更多功能,比如实时预览、单元测试、依赖检测器、Chrome 调试等等。

尽管 Komodo IDE 是免费提供的,但它是一种商业产品。这意味着您可以免费使用它,直到您对社区支持满意为止。要获得专业支持,您需要注册一个 ActiveState 定价计划,该计划可让您访问电子邮件、聊天支持和私人项目。

如果您不需要 IDE 特性,并且想要编辑和管理 PHP 文件而不必处理额外的混乱,您可以选择 Komodo Edit ,这是一个优秀的免费开源 PHP 编辑器应用程序。

最佳特性:

  • 自动完成、多重选择、小地图、变更跟踪、呼叫提示和其他高级编辑功能
  • 代码重构、代码浏览器、可视化调试、正则表达式工具包、数据库浏览器、HTTP 检查器等等
  • 码头工人和流浪者的融合
  • 支持许多版本控制系统(Git、Subversion、Mercurial、CVS、Perforce 和 Bazaar)
  • 入职和项目向导
  • DOM 查看器
  • 实时协作
  • 通过 Slack 共享
  • 内置教程

3.Apache NetBeans

Apache NetBeans

Apache NetBeans

  • 支持的操作系统:Windows、Linux、macOS、BSD
  • 许可证:Apache 许可证 vs 2.0
  • 源代码:https://github.com/apache/netbeans
  • 支持的语言:HTML、CSS、Sass、LESS、JavaScript、PHP、Java、C、C++等等

Apache NetBeans 是由 Apache 软件基金会维护的免费开源 IDE。它运行在 Java 虚拟机上(因此您需要在您的计算机上安装 Java 运行时环境),但是它带有针对多种编程语言的扩展。它的 PHP 运行时为您提供了一个全功能的 PHP IDE,允许您运行、重构、调试和分析 PHP 应用程序——此外还有 PHP 编辑器的典型功能,如语法突出显示、可定制的主题和视图、goto 定义等等。

安装 NetBeans 时,您可以选择要添加 IDE 的哪些部分。目前有五个选项:基础 IDE、Java SE、Java EE、HTML5/JavaScript 和 PHP。如果您愿意,您可以安装所有这些,但是要将 NetBeans 用作 PHP IDE,您无论如何都需要基本 IDE 和 PHP 运行时,另外,如果您想要支持前端语言(也包括 CSS、Sass 等),您还需要添加 HTML5/JavaScript 包。

NetBeans 是一个非常用户友好的工具。它有一个有用的入门过程,包括演示和工作 PHP 应用的样例项目:一个计算器和一个待办事项应用。另外,如果你还没有使用 IDE 进行 PHP 开发,Netbeans 有一个很棒的 PHP 和 HTML5 学习教程可以帮助你入门。

最佳特性:

  • 代码格式化、代码折叠、智能代码完成、错误突出显示、智能建议和其他高级编辑功能
  • 语义代码分析
  • 使用 Xdebug 调试
  • 使用 PHPUnit 和 Selenium 进行单元测试
  • 与版本控制系统的集成(Git、Subversion、Mercurial)
  • NetBeans 插件门户上有 1000 多个插件可用(PHP 有 130 多个插件,还有许多通用插件,如主题)
  • 支持 PHP 框架,如 WordPress、Symfony、Zend 和 Yii(找到它们作为插件)

4.Eclipse Che(云集成开发环境)

Eclipse Che

Eclipse Che

  • 支持的操作系统:任何(它在网络浏览器中运行)
  • 许可证:Eclipse 公共许可证 2.0
  • 源代码:https://github.com/eclipse/che
  • 支持的语言:PHP,Java,。NET Core、ASP.NET、Go、C、C++、NodeJS、Python、Rust、Scala 等等

Eclipse Che 是一个 Kubernetes-native cloud IDE,允许开发团队在预先配置的容器化工作空间中构建应用程序。这意味着您只需设置和配置项目所需的一切(如依赖项、运行时、IDE 和项目代码)一次,就可以在任何需要的地方运行现成的开发环境。

Eclipse Che 项目始于 2014 年,是一个Eclipse Cloud Development(ECD)项目,可以被认为是协作开发的未来。是 Codenvy 提供了原始的代码库,但是许多科技巨头也为这个项目做出了贡献——比如 IBM、Red Hat、三星、SAP、微软、Intuit 等等。Eclipse Che 最大的特点是数百名开发人员的实时协作能力、对运行在 web 浏览器中的在线 IDE 的访问,以及对基于容器的 PHP 开发的轻松访问。

你可以在你的 Kubernetes 或者 OpenShift 集群上安装 Eclipse Che ,或者在 OpenShift 的基于网络的 Che 平台上创建一个在线 Che 工作区(后者你需要一个红帽账号)。在线平台有几个示例项目可供您开始使用。对于 PHP 开发,您可以在四个选项中进行选择:Laravel 与 MySQL、Symfony 与 MySQL、plain PHP 与 MySQL 以及 plain PHP 与 Apache web 服务器(没有 MySQL)。只需轻轻一点,您就可以设置您的预配置工作区,并立即开始在您的 web 浏览器中使用云 IDE。

此外,您不仅可以配置堆栈,还可以在不同的编辑器界面之间进行选择。默认的是 Eclipse 忒伊亚,但是您也可以选择 Eclipse IDE、Eclipse Dirigible、IntelliJ IDEA (Community Edition)、Jupyter Notebook 和 Visual Studio 代码的开源发行版。PHP 编辑器界面的特性将取决于您选择的 IDE。

最佳特性:

  • 访问预建的 PHP 堆栈
  • 轻便
  • 使用您选择的编辑器界面
  • 从任何地方添加集装箱图像(Docker Hub、Quay.io、您自己的私人注册表等)
  • 设计文件模板
  • 现成的示例项目
  • 所有集装箱的码头通道
  • 多用户协作
  • 可通过插件扩展(可从 IDE 界面获得)
  • 所有的 Che 服务都可以通过 REST APIs 获得

5.代码石

CodeLite

CodeLite

  • 支持的操作系统:Windows、Linux、macOS、FreeBSD
  • 许可证:GNU GPL vs 2
  • 源代码:https://github . com/era if/code lite
  • 支持的语言:HTML,JavaScript,Node.js,PHP,C,C++

CodeLite 是一个免费的开源 IDE,主要用于 C++编程语言,但它也支持 PHP 和 Node.js(作为预装插件)。它并不是你能找到的最先进的 IDE,但是它是免费的,并且带有 PHP 所有重要的 IDE 特性,比如项目和工作区管理、内置调试器(Xdebug)、不同视图的窗格、任务管理、代码完成、项目执行等等。

当您第一次启动 CodeLite 时,它会启动一个安装向导,帮助您配置 IDE 以适应您的编码风格(如果您愿意,可以选择退出)。有一个选项允许你将它定制为一个用于 web 开发的 PHP 编辑器。请注意,您可能需要手动安装一个 C++编译器(如果您的机器上还没有的话)。要记住的另一件事是,尽管 CodeLite 有一个不错的 wiki 页面,但它并不像这个列表中的大多数其他 PHP IDEs 一样有那么多教程/入门项目。

然而,如果你想要一个免费的 PHP IDE,它不在 Java 上运行,有许多配置选项,并且不需要你注册帐户,CodeLite 可能是你最好的选择。

最佳特性:

  • 可定制的设计,有许多主题可供选择
  • 强大的查找、替换和定位功能
  • PHP 林挺、重构和调试
  • PHP 类向导
  • SFTP宋承宪客户经理一起提供支持
  • Git 集成
  • 文件和文件夹的比较工具

4 个最佳 PHP IDEs

最后,这里是用于企业级 PHP 开发的最好的 PHP IDEs,有技术支持,大量集成,支持不同的 PHP 框架和内容管理系统

1.喷射脑疱疹

JetBrains PhpStorm

JetBrains PhpStorm

  • 支持的操作系统:Windows、Linux、macOS
  • 价格:第一年 89 美元,第二年 71 美元,第三年起个人使用 53 美元,按年计费(商业使用 199-159-119 美元);自由/开源软件的免费许可程序;30 天免费试用
  • 许可证:参见 EULA
  • 支持的语言:HTML,CSS,Sass,LESS,Markdown,JavaScript,Node.js,React, Vue ,Angular,TypeScript,PHP,MySQL,XML,XSLT 等等

JetBrains PHPStorm 以“闪电智能 PHP IDE”为特色,它确实提供了与大多数其他 PHP IDE 不同的用户体验。它有一个简洁的用户界面和快速的启动时间——它的启动速度和没有任何 IDE 特性的简单 PHP 编辑器一样快。

在 PHPStorm 中,你只有在需要的时候才能看到一切。在第一次启动时,您将看到一个非常简单的视图,其中包含配置设置和启动新项目的三个选项。顶部菜单栏只有在您启动新项目时才可见。然后,你可以为许多东西(收藏夹、结构、待办事项、问题、终端、事件日志、数据库、调试等等)添加额外的窗口,但所有这些都是可选的,并且易于来回切换。

PHPStorm 最好的一点是它捆绑了 JetBrains 的 JavaScript IDEWebStorm。因此,如果你既做前端开发又做后端开发,并且需要 JavaScript 和 PHP IDE 的,这可能是你最好的选择。PHPStorm 还集成了 Composer 包管理器,因此您可以直接从 IDE 中管理您的依赖项。另外,它支持三种最流行的 PHP 内容管理系统:WordPress、Drupal 和 Joomla。

最佳特性:

  • 无需创建项目即可进行试验的草稿文件
  • 即时错误预防
  • 优先考虑编码问题
  • HTML5 大纲视图
  • 在不同的 PHP 版本之间轻松切换(对遗留项目有好处)
  • 高级重构
  • 使用其零配置可视化调试器进行调试(也支持 Xdebug 和 Zend 调试器)
  • 与版本控制系统集成(Git、Mercurial、Subversion)
  • 支持测试驱动开发(PHPUnit)和行为驱动开发(Behat)
  • 支持所有主要的 PHP 框架(Laravel、CakePHP、Magento、Yii、Zend Framework、WordPress 等等)

2.Zend 工作室

Zend Studio

Zend Studio

  • 支持的操作系统:Windows、Linux、macOS、IBM i
  • 价格:个人使用 89 美元,专业使用 189 美元(均为永久许可,1 年免费升级);30 天免费试用
  • 许可证: Zend Studio 许可证(pdf)
  • 支持的语言:HTML,CSS,Sass,LESS,Markdown,JavaScript,PHP

Zend Studio 是一款由“Zend by Perforce”开发的商业 PHP IDE,这是一家专注于企业级 PHP 解决方案的公司。它基于 Eclipse PDT IDE(见上文);你可以单独安装它,也可以通过 Eclipse Marketplace 将作为 Eclipse 插件安装。Zend Studio 为免费的 Eclipse PHP 开发工具添加了许多企业级特性。

它与 Zend 的其他产品无缝集成,即 Zend Server、Zend Debugger、Zend Guard、Laminas Framework ( 原名 Zend Framework )和 Laminas API Tools ( 原名 Apigility )。然而,您并不局限于 Zend 生态系统,因为 Zend Studio 还支持许多其他框架、调试器、web 服务器和工具。

尽管 Eclipse PDT 已经有了一个高级的 PHP 编辑器接口,但 Zend Studio 对其进行了进一步的扩展,增加了 PHP 特有的功能,如增强的代码辅助、不同关系数据库管理系统(MySQL、MSSQL、 PostgreSQL 、SQLite、Oracle 等)的数据库视图、内置的云部署(公共云和私有云)等等。

最佳特性:

  • PHP 智能代码助手
  • 自动化模块创建
  • Zend Debugger(默认)、Xdebug 或 Z-Ray 的高级调试选项
  • Docker 对容器化 PHP 应用程序的支持
  • 与版本控制系统(SVN、CVS、Git)和 Composer 集成
  • 支持 4K 和 HiDPi 显示器
  • 对主要云平台的支持(微软 Azure亚马逊 AWS 、红帽 OpenShift、IBM Cloud 等)
  • 几个教程、视频和 PHP 模板

3.Codeanywhere(云 IDE)

Codeanywhere

Codeanywhere

  • 支持的操作系统:任何网络浏览器、iOS、Android
  • 价格:2.50 美元/月起;7 天免费试用
  • 许可证:见 TOS
  • 支持的语言:HTML、CSS、Sass、LESS、Markdown、JavaScript、TypeScript、Node.js、PHP、Ruby、Python、Go、Ruby、Java 等等

Codeanywhere 是一个平台无关的云 IDE,你可以在网络浏览器中使用它,也可以将其作为一个移动应用程序使用。该项目最初是一个名为 PHPanywhere 的基于 web 的 PHP 编辑器和 FTP 客户端,但现在它支持 100 多种编程语言。它基于 CodeMirror ,这是一个开源的浏览器原生源代码编辑器,也可以处理大型文档(超过 20 万行)。

有了 Codeanywhere,你要么在一个 OpenVZ 容器(称为 DevBoxes)中运行你的编码环境,要么连接到你自己的服务器或第三方服务,比如 GitHubBitbucket亚马逊 S3Google DriveDigitalOcean 等等。Codeanywhere IDE 将在几秒钟后在 web 浏览器中启动,但是,您必须等待大约半分钟才能创建容器。

Codeanywhere 为您提供了一个连接向导,您可以在不同的堆栈之间进行选择,包括两个 LAMP 堆栈(Ubuntu 和 CentOS),这两个堆栈都添加了 phpMyAdmin 和 Composer。你也可以选择在预装 WordPress 和 WordPress CLI 的情况下启动这些 PHP 堆栈。或者,您也可以使用自己的自定义堆栈。使用 Codeanywhere,您可以在任何 web 浏览器上通过 HTTP 和 HTTPS 协议对您的 PHP 应用程序进行现场测试。

最佳特性:

  • 预配置的 PHP 和 WordPress 堆栈
  • 具有 sudo (root)访问权限的内置 Linux 终端
  • 智能代码编辑特性,如代码重构、自动完成、定位定义、小地图等
  • 支持 FTP、SFTP、FTPS 和 SSH 协议
  • 共享文件上的实时配对编程
  • Git 集成(通过终端)
  • 无分心模式
  • 多个布局选项(单个、网格、列、行、垂直拆分和水平拆分视图)
  • 集成调试器
  • 一键代码美化器
  • 浏览器预览

4.代码龙虾

Codelobster

Codelobster

  • 支持的操作系统:Windows、Linux、macOS
  • 价格:第一年 59.95 美元(最多三个设备);随后几年 19.95 美元/年;30 天免费试用
  • 执照:参见 EULA
  • 支持的语言:HTML,XML,CSS,Sass,LESS,JavaScript,TypeScript,Node.js,PHP,SQL

Codelobster 是一个免费的 PHP 编辑器和 IDE,也支持前端语言。支持 HTML、CSS、JavaScript 和 PHP 的代码编辑器部分是免费的,而 IDE 功能和对 Sass、LESS、Node.js 和 SQL 语法的支持是有代价的。

Codelobster 有一个相当复杂的用户界面,默认情况下,您可以看到所有可用的功能、面板和菜单,即使您可以隐藏不需要的面板。免费的 PHP 编辑器提供了编写 PHP 代码所需的所有特性,包括语法高亮、自动完成、上下文帮助和调试功能。

Codelobster IDE 最大的特点是它支持的 PHP(和 JavaScript)数量。它有插件用于 WordPressLaravelJoomlaDrupal 、CakePHP、Symfony、Yii、CodeIgniter、Phalcon 等等。另外,它还支持 Twig 和 Smarty 模板引擎。为了帮助你管理你的插件,Codelobster 包括一个易于使用的插件管理器,你可以在同一个地方看到所有可用和激活的插件。

如果你是一个 WordPress 开发者并且正在寻找一个 WordPress IDE,Codelobster 会是一个很好的解决方案。 Codelobster 的 WordPress 插件为你提供了高级功能,比如 WordPress 语法高亮和自动完成、WordPress 功能的工具提示、为主题开发者提供的内置 WordPress 主题编辑器、WordPress 项目设置向导等等。

最佳特性:

  • HTML/CSS 代码检查器(免费版)
  • 内置 PHP 调试器(免费版)
  • 预先设计的主题(免费版)
  • HTML、CSS 和 PHP 的代码验证
  • 预先编写的代码片段和代码模板
  • HTML 到 PHP 和 PHP 到 HTML 的转换
  • SQL 管理器(数据编辑、导出向导、自动完成等)
  • FTP/SFTP 客户端
  • 支持版本控制(Git、SVN、Mercurial)

Want to write high-quality PHP code? ✨ Then you need a high-quality PHP editor. Check out the options here to get started ✅Click to Tweet

摘要

在本指南中,我们详细介绍了最好的 PHP 编辑器和 ide——包括免费的和高级的。

如果你已经设法找到了一个你喜欢的,或者有一个对你来说很重要的特性或集成,你已经知道该选择哪个了。但是,如果您对哪个 PHP 编辑器或 IDE 最适合您还有任何疑问或疑问,这里有一些建议:

  • 如果你是一个初学者,或者不经常编辑 PHP 文件,或者不想在配置上花太多时间,可以使用免费的 PHP 编辑器,但不要使用 Emacs 或 Vim。
  • 反过来,如果你想获得死忠程序员的尊重,并且不介意陡峭的学习曲线,不妨试试 Vim 或者 Emacs。
  • 如果你想要一个巨大的生态系统,选择一个带有市场或插件/包存储库的 PHP 编辑器或 IDE,如 Visual Studio 代码、Atom、Sublime Text 3、Apache NetBeans 或 Eclipse。
  • 如果你关心启动时间并希望你的 PHP 编辑器加载速度快,选择一个特定于一个操作系统的,例如 Windows 的 NotePad++或 RJ TextEd 或 Mac 的 TextMate 或 Smultron。
  • 如果你已经使用了这些源代码编辑器或者 ide 和另一种编程语言,并且喜欢它,看看它是如何编辑 PHP 文件的。
  • 如果你需要特定框架或工具的支持,找一个有插件或集成的 PHP 编辑器或 IDE。
  • 如果您需要一个内置的 web 服务器,想要查看堆栈跟踪,或者执行其他复杂的任务,请使用 PHP IDE。
  • 如果您想在 web 浏览器中工作,并从任何地方访问您的 PHP 项目,请选择云 IDE。

您也可以为不同类型的项目安装多个编辑器。例如,您可以使用轻量级、快速加载的 PHP 编辑器来快速查看文件,但使用功能丰富的 PHP IDE 来开发、测试和调试更复杂的应用程序。

找到最好的开发工具是一个反复试验的过程,类似于编程本身。所以不要犹豫太多,只要安装一个有你需要的功能,如果你不喜欢它,你可以测试下一个,直到你找到最适合你的 PHP 编辑器。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

2022 年最流行的 PHP 框架

原文:https://kinsta.com/blog/php-frameworks/

当你想到 web 开发时,除了 HTML、CSS 和 JavaScript ,PHP 语言是想到的名字之一。

与普遍的看法相反, PHP 并没有死。它仍然被很多网站广泛使用,包括像脸书和维基百科这样的大网站。

根据 W3Techs 的数据,大约 79%的网站使用 PHP。它的受欢迎程度是 ASP.NET(T3)的八倍,后者是它在服务器端编程语言(T5)方面最接近的竞争对手

PHP 的使用份额在去年保持稳定。

Historical use of PHP

Historical use of PHP

PHP 程序员经常求助于 PHP 框架来编写他们的代码。让我们看看什么是 PHP 框架,为什么使用它们,并研究一些最流行的框架。

什么是 PHP 框架?

PHP 框架是一个创建 PHP web 应用程序的平台。PHP 框架提供了常用函数的代码库,减少了您需要编写的原始代码量。

为什么要使用 PHP 框架?

使用 PHP 框架有很多好的理由,而不是从零开始编码。

1.更快的发展

因为 PHP 框架有内置的库和工具,所以开发所需的时间更少。

例如,CakePHP 框架有 Bake 命令行工具,可以快速创建应用程序中需要的任何框架代码。

一些流行的 PHP 框架集成了 PHPUnit 库,以便于测试。

2.需要编写的代码更少

使用框架内置的函数意味着你不需要写那么多原始代码。

3.常见任务的库

开发人员需要在 web 应用程序中完成的许多任务都是常见的。例如表单验证、数据清理和 CRUD 操作(创建、读取、更新和删除)。不必为这些任务编写自己的函数,您可以简单地使用框架中的函数。

4.遵循良好的编码实践

PHP 框架通常遵循编码最佳实践。例如,他们根据功能将代码整齐地划分到多个目录中。

Symfony default directory structure (Image source: Symfony)

Symfony default directory structure

它们迫使你以一种更干净、更整洁、更易维护的方式组织代码。

框架也有自己的实体命名约定,您应该遵循。

5.比编写自己的应用程序更安全

PHP 安全威胁有很多,包括跨站脚本、 SQL 注入攻击,跨站请求伪造。除非你采取正确的措施来保护你的代码,否则你的 PHP 网络应用将会很容易受到攻击

使用 PHP 框架并不能代替编写安全代码,但是它将黑客利用 T1 的机会降到了最低。好的框架具有内置的数据净化和对上述常见威胁的防御。

6.更好的团队合作

如果不清楚以下几点,有多个开发人员的项目可能会出错:

使用框架为你的项目设定了清晰的基本规则。即使另一个开发人员不熟悉这个框架,他们也应该能够很快学会诀窍并协同工作。

7.更易于维护

PHP 框架鼓励代码重构,提倡干开发(不要重复自己)。由此产生的更精简的代码库需要更少的维护。

您也不必担心维护核心框架,因为这是由开发人员为您完成的。

PHP 远未消亡。💀事实上,大约 79%的网站都在使用它!🤯在本指南中了解更多关于 PHP 框架的信息⤵️ 点击推文

在使用 PHP 框架之前你需要知道什么

在使用一个 PHP 框架之前,你首先需要知道的是 PHP 本身!如果你没有很好地掌握这门语言,你将很难找到一个框架。大多数框架运行在 PHP 7.2 或更高版本上。

如果您需要复习 PHP,请阅读以下文章:

接下来,您应该已经构建了一些自己的 PHP 应用程序,因此您对前端和后端的需求有一个清晰的了解。

了解面向对象的 PHP 也是必须的,因为大多数现代 PHP 框架都是面向对象的。确保你理解像类、对象、继承、方法、特征和访问修饰符这样的概念。

由于许多 web 应用程序都连接到数据库,所以你应该知道数据库SQL 语法。每个 PHP 框架都有自己支持的数据库列表。

理解一个对象关系映射 (ORM)模型是很有用的。ORM 是一种使用面向对象的语法而不是使用 SQL 来访问数据库数据的方法。这意味着您可以用熟悉的 PHP 编写数据库查询,尽管有时您可能需要使用 SQL。

许多 PHP 框架都内置了自己的 ORM。例如, Laravel 使用雄辩的 ORM。其他人使用开源 ORM,如主义

理解像 Apache 和 Nginx 这样的 web 服务器是如何工作的是很有帮助的。您可能需要在服务器上配置文件,以便您的应用程序以最佳方式工作。

你可能会在本地完成大部分开发,所以你也需要了解本地主机。另一个选择是在虚拟环境中使用 vagger 和 VirtualBox 创建和测试你的应用程序。

模型视图控制器架构

PHP 框架通常遵循模型视图控制器 (MVC)设计模式。这个概念将数据的操作与数据的表示分离开来。

Model View Controller Process - PHP frameworks

Model View Controller Process (Image source: Wikimedia Commons)

模型存储业务逻辑和应用程序数据。它将数据传递给视图,即表示层。用户与视图交互,可以通过控制器输入指令。控制器向模型发出这些命令,循环继续。

简而言之,模型是关于数据的,视图是关于外观的,控制器是关于行为的。

MVC 模式的一个类比是在酒吧点一杯鸡尾酒。

用户是到达酒吧(风景)需要茶点的顾客。用户将他们的饮料订单交给酒保(控制器)。

控制器根据模型制定订单——配方、配料和设备。根据鸡尾酒的不同,他们可能会使用以下任何一种或其他物品:

  • 酒精
  • 果汁
  • 柠檬
  • 玻璃
  • 鸡尾酒摇壶
  • 橄榄
  • 搅拌器

成品鸡尾酒放在吧台上,供使用者享用。如果用户想要另一种饮料,他们必须首先与控制器通话。他们不允许接近模型和混合他们自己的饮料。

就 PHP 应用程序而言,MVC 可能对应于以下内容:

  • 型号:数据库
  • 视图:一个或多个 HTML 页面
  • 控制器:访问和更新数据库的功能

在使用 PHP 框架时,习惯使用命令行界面 (CLI)会有所帮助。Laravel 有自己的 CLI,Artisan 控制台。使用 Artisan 中的“制作”命令,可以为项目快速构建模型、控制器和其他组件。

熟悉命令行也是使用 Composer PHP 包管理器的关键。Yii 框架是使用 Composer 来安装和管理依赖关系的几个框架之一,这些依赖关系是应用程序运行所必需的包。

Packagist 是您可以用 Composer 安装的软件包的主要存储库。一些最受欢迎的 Composer 包运行在 Symfony 框架上。

Packagist popular packages

Packagist popular packages

你应该在 PHP 框架中寻找什么?

在为您的项目选择最佳 PHP 框架时,您需要考虑以下一些因素。

首先,如果你是 PHP 框架的新手,那么学习曲线不应该太陡。如果一个框架太难掌握,你就不想花宝贵的时间去学习它。幸运的是,PHP 是学习最好的编程语言之一。

接下来,你想要一个易于使用并且节省时间的框架。

一个 PHP 框架应该满足你对一个项目的技术需求。大多数框架都会有一个最低 PHP 版本和它们使用的某些 PHP 扩展。确保您的框架支持您选择的数据库,并且您可以将该框架用于您想要部署到的 web 服务器。

选择一个平衡了特性的框架。一个功能丰富的框架对一些项目来说是一个福音。另一方面,如果你不需要很多特性,选择一个精简的框架。

一些理想的特征是:

  • 测试
  • 缓存存储
  • 模板引擎:一种使用 PHP 类在 HTML 中输出 PHP 的方法
  • 安全

如果你需要构建一个可伸缩的应用,选择一个支持它的框架。

最后,好的文档和支持很重要,这样你就可以充分利用你的 PHP 框架。一个拥有大型且充满活力的社区的框架也更有可能经受住时间的考验,并且能够在你遇到困难时帮助你。

建议阅读:如何在 WordPress 中提高 PHP 内存限制。
T3】

2022 年最好的 PHP 框架有哪些?

很难获得 PHP 框架的明确列表。维基百科列出了 40 个 PHP 框架,但是其中一些被更好地描述为内容管理系统,无疑还有更多。

早期的 PHP 框架包括 PHPlib、Horde、Pear。大多数知名品牌都是在 2005 年或之后推出的。

这里有一些当今使用的最好的 PHP 框架。

拉勒韦尔

Laravel

Laravel

Laravel 被宣传为“Web 工匠的 PHP 框架”它是由 Taylor Otwell 开发的,他想要一个具有 CodeIgniter 所没有的元素的框架,比如用户认证。

快速规格

发布时间:2011 年 6 月

当前版本:8,2020 年 9 月 8 日发布。

技术要求:

Laravel 的优点

从 Laravel Homestead 开始很容易,这是一个为你做的虚拟开发环境。

Laravel Homestead 是一个官方的、预打包的流浪者盒子,它为您提供了一个美妙的开发环境,而不需要您在本地机器上安装 PHP、web 服务器和任何其他服务器软件。再也不用担心搞乱你的操作系统了!

如果你是 Mac 用户,你也可以选择使用 Laravel Valet 作为你的开发环境。顺便说一下,Laravel Valet 支持 Symfony、CakePHP 3、Slim 和 Zend,以及 WordPress。

Laravel 使用一个名为 Blade 的模板引擎。与其他模板引擎相比,它的一个优势是你可以在 Blade 中使用 PHP,这是其他引擎无法做到的。

Laravel 包的集合 Packalyst ,有超过 15,000 个包可以在你的项目中使用。

Laravel 提供了一系列安全特性和方法,包括以下内容:

  • 证明
  • 批准
  • 电子邮件验证
  • 加密
  • 散列法
  • 密码重置

Laravel 的雄辩的 ORM流畅的查询生成器使用 PDO 参数绑定来防范 SQL 注入攻击。默认情况下,使用隐藏的 CSRF 表单令牌的跨站点请求伪造(CSRF)保护也是启用的。

Laravel 拥有的 Artisan 控制台命令行工具允许开发人员自动执行重复任务并快速生成框架代码,从而加快了开发速度。

当我们进行 PHP 基准测试时, Laravel 是我们测试过的最快的 PHP 框架

Laravel 生态系统有几个有用的工具,比如用于编译 CSS 和 JS 资产的 Mix ,以及用于 OAuth 认证的sociate

Laravel 受益于一个庞大的开发者社区(像 WordPress 一样)。您可以在以下网址找到它们:

  1. Laracasts :一个学习门户,包含课程、博客、播客和论坛。
  2. Laravel.io :一个拥有超过 45000 名用户的社区门户网站。
  3. Laravel subreddit:5 万名 Laravel 工匠的家园。

谁用 Laravel?

symphony

Symfony

Symfony

Symfony 既是一个 PHP 框架,也是一个用于构建网站的 PHP 组件集合。

快速规格

发布时间:2005 年 10 月

当前版本:5.1.4

技术要求:

  • PHP >= 7.2.5
  • 已安装作曲家

Symfony 的优点

Symfony 是需要可扩展的网站和应用程序的绝佳选择。它的模块化组件系统非常灵活,可以让你选择项目所需的组件。

Symfony 支持流行的 PHP 框架中的大多数数据库:

  • 下毛毛雨
  • MySQL 的实现
  • 神谕
  • 一种数据库系统
  • SAP Sybase SQL Anywhere
  • SQLite
  • SQLServer

与数据库交互的最佳方式是通过教条 ORM。Symfony 使用数据映射器将对象映射到数据库。这使您的对象模型和数据库模式保持分离,这意味着如果您更改数据库列,您不需要在代码库中做很多更改。

使用内置工具栏调试 Symfony 项目非常简单。

Symfony 使用的是 Twig 模板引擎,易学、快速、安全。

Packagist 列出了超过 4000 个 Symfony 软件包供您下载和使用。

Symfony 有 Sensio Labs 的商业支持。这意味着有专业支持可用,不像大多数其他 PHP 开发框架。它还有长期支持版本,支持期为 3 年。

Symfony 开发人员可以通过多种渠道获得培训和帮助:

此外, Symfony 社区规模庞大,有超过 600,000 名开发者积极参与其中。

谁用 Symfony?

其他大公司在他们的项目中使用 Symfony 组件,包括 DrupalJoomlaMagento

代码点火器

CodeIgniter

CodeIgniter

CodeIgniter 框架帮助你快速构建网络应用,因为它只需要最少的配置。

快速规格

发布时间:2006 年 2 月

当前版本:4.0.3

技术要求:

  • PHP >= 7.2
  • 对 MySQL、PostgreSQL、SQLite3 的数据库支持

CodeIgniter 的优点

CodeIgniter 以速度著称。在我们的 PHP 基准测试中,它是四个 PHP 框架中速度第二快的

该框架的轻足迹(它是 1.2MB 的下载)意味着没有膨胀。您可以准确地添加您需要的组件。

CodeIgniter灵活:它鼓励使用 MVC 架构进行开发,但是您也可以编写非 MVC 应用程序。

该框架包括对 CSRF 和 XSS 攻击的防御,加上上下文敏感的转义和内容安全策略。

CodeIgniter 支持多种方式的缓存,加速你的应用程序。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

如前所述,与其他框架相比,CodeIgniter 有一个简单的学习曲线,并且非常具有可扩展性。

CodeIgniter 的社区由一个论坛Slack group 组成。

谁使用 CodeIgniter?

Zend 框架/层板项目

Zend Framework

Zend Framework

Zend 框架是一个历史悠久的 PHP 框架,现在正在向 T2 的 Laminas 项目过渡。强烈建议迁移到 Laminas,因为 Zend 不再更新。

Laminas 项目由 3 部分组成:

  1. 薄层组件和 MVC
  2. 女中音
  3. Laminas API 工具

快速规格

发布时间:2006 年 3 月

当前版本:3.0.0 (Zend)或 1.3.0 (Laminas)

技术要求:

  • PHP >= 5.6 (Zend)或> = 7.3(laminates)
  • 已安装作曲家
  • 对 MariaDB、MySQL、Oracle、IBM DB2、Microsoft SQL Server、PostgreSQL、SQLite 和 Informix Dynamic Server 的数据库支持。

Zend/lamps 的优点

Zend 框架已经安装了超过 5 . 7 亿次。它也是企业使用最多的 PHP 框架。

Zend 遵循 PHP Framework Interop Group(PHP-FIG)标准,这意味着它的代码可以毫无困难地移植到其他框架。

像 Symfony 一样,您可以只使用您需要的组件。

你可以使用 Zend 来构建 RESTful API。

lamps 社区有一个用于协作和支持的论坛和 Slack 组

谁用 Zend/Laminas?

根据 Zend 的主页,这个框架已经被很多大公司使用,包括

Yii(框架)

Yii Framework

Yii Framework

这个框架的名字 Yii ,中文意思是“简单进化”。它也代表“是的,它是!”

快速规格

发布时间:2008 年 12 月

当前版本:2.0.35

技术要求:

  • PHP >= 5.4.0,推荐 7+版本
  • 已安装作曲家
  • 数据库支持 SQLite、MySQL、PostgreSQL、MSSQL 或 Oracle 数据库

Yii 的优点

您可以在几分钟内启动并运行 Yii。文档写得很好,很容易理解。

Yii 框架有几个安全措施,比如 bcrypt 密码散列、加密、认证和授权。该文档提供了防止 T2、SQL 注入、XSS 和 CSRF 攻击的最佳实践。

Gii 代码生成器可以快速为你构建骨架代码,节省时间。

Gii code generator

Gii code generator

Yii 支持四种类型的缓存来加速 web 应用:数据缓存、片段缓存、页面缓存和 HTTP 缓存。

你可以在 Yii 项目中运行第三方代码。

Yii 社区通过 Slack 或 IRC 提供实时支持。还有一个论坛和社交媒体渠道。该社区奖励其活跃成员徽章和名人堂的条目。

谁用 Yii?

CakePHP

CakePHP - PHP frameworks

CakePHP

CakePHP 提供快速干净的 PHP 开发。

快速规格

启动时间:2005 年 4 月

当前版本:4.1.1

技术要求:

需要为您的客户站点提供一个非常快速、安全且对开发人员友好的托管服务吗?Kinsta 是为 WordPress 开发者设计的,提供了大量的工具和强大的仪表板。查看我们的计划

  • PHP 7.2(最低),推荐 7.4
  • 首选带有 mod_rewrite 的 HTTP 服务器
  • 数据库支持 MySQL 5.6+,MariaDB 5.6+,PostgreSQL 9.4+,SQLite 3.8,SQL Server 2012+。

CakePHP 的优点

配置最低。您不必摆弄 XML 或 YAML 文件。一旦你建立了你的数据库,你就可以开始编码

CakePHP 有自己的内置 ORM ,使用起来快捷简单。

安全特性包括加密、密码散列、保护表单数据和 CSRF 保护的方法。

CakePHP 的组件和助手简化了开发,减少了你必须做的日常工作。

Github 上有一个有用的 CakePHP 资源和插件列表。

你可以通过菜谱(文档)、在线培训和 CakeFest 会议来学习 CakePHP。

你可以通过他们的论坛、Stack Overflow、IRC 和 Slack 找到友好的 CakePHP 烘焙师。CakePHP 创始人拉里·马斯特斯经营的蛋糕 DC 也提供专业支持。

谁用 CakePHP?

微小的

Slim Framework

Slim Framework

Slim 是一个精简、敏捷的微型 PHP 框架,由 Josh Lockhart 创建。它主要接收一个 HTTP 请求,调用一个回调,并返回一个 HTTP 响应。

快速规格

发布时间:2010 年 9 月

当前版本:4.5.0

技术要求:

  • PHP 7.2 以上
  • 使用 URL 重写的 Web 服务器

苗条的优点

Slim 的代码库是精简的,因为它没有第三方依赖。因此,它的非常快

Slim 特别适合构建小型应用程序和 API。如果你需要更多的框架,Slim 集成了第一方和第三方组件。

Slim 是易学易懂。你可以在几分钟内运行一个“Hello World”应用程序。

Slim 在 Slant 比较网站上被开发者评为最佳 PHP 框架

What are the best PHP frameworks?

What are the best PHP frameworks?

Tidelift 可获得对 Slim 的专业支持。

谁用 Slim?

法尔孔

Phalcon

Phalcon

Phalcon 是一个为速度而构建的 PHP 框架。它是作为一个用 Zephir 和 C 语言编写的 web 服务器扩展交付的。开发人员使用框架生成的 PHP 类和名称空间。

快速规格

发布时间:2012 年 11 月

当前版本:4.0.6

技术要求:

  • PSR 扩展
  • PHP 7.2 +(推荐最新版本)

费尔康的优点

Phalcon 被设计为运行快速,因为它具有以下特性:

  • 底层架构。
  • Zephir、C 扩展和 PHP 的一次性加载。
  • 代码是编译的而不是解释的,所以速度更快。
  • 常驻内存,这意味着它可以在任何需要的时候被调用。
  • 与大多数其他 PHP 框架不同,它不使用文件读取和文件统计,从而提高了性能。

由于 Phalcon 是松散耦合的,您可以创建自己的目录结构。Phalcon 的代码不存在于项目目录中,这使得代码是轻量级的。

Phalcon 的安全组件有助于密码哈希和 CSRF 保护。

Phalcon 的模板引擎 Volt 非常快,并且附带了助手类,可以轻松创建视图。

你可以通过他们的文档论坛不和谐聊天栈溢出以及多个社交媒体平台来寻求对 Phalcon 的支持。

谁使用 Phalcon?

根据 Phalcon 建造的站点,Phalcon 的用途是:

燃料电池

FuelPHP

FuelPHP

FuelPHP 是一个社区驱动的 PHP 框架,在其生命周期中有超过 300 个贡献者。

快速规格

发布时间:2011 年 6 月

当前版本:1.8.2

技术要求:

  • PHP 5.4 以上
  • 任何 web 服务器

燃料的优点

FuelPHP 使用 MVC,但也支持 HMVC(层次模型视图控制器)。这在控制器和视图之间增加了另一层。HMVC 设计模式的优点是:

  • 更好的代码组织
  • 更大的模块化
  • 更具可扩展性
  • 鼓励代码重用

你可以为你的项目选择你想要的文件和文件夹结构,因为限制很少。FuelPHP 非常重视的安全性,具有以下特点:

  • 输出编码
  • CSRF 保护
  • 输入、URI 和 XSS 滤波
  • 传递给 SQL 语句的转义用户输入

FuelPHP 有自己的命令行实用程序oil ,可以用来运行任务、调试代码、生成通用组件。

FuelPHP ORM 功能强大,但很轻便。

你可以在他们的论坛以及脸书和推特上加入 FuelPHP 社区。

谁用 FuelPHP?

  • 万巫师——哈罗·弗顿,FuelPHP 的开发者之一
  • 前台–物业管理系统

无脂肪框架

Fat-Free Framework

Fat-Free Framework

和 Slim 一样,无脂框架 (F3)是微框架。它的目标是在有用的特性、简单性、易用性和速度之间取得平衡。

快速规格

发布时间:2009 年

当前版本:3.7.2

技术要求:

  • PHP 5.4 以上
  • 任何 web 服务器
  • 数据库支持 MySQL、SQLite、MSSQL/Sybase、 PostgreSQL 和 MongoDB

无脂肪框架的优点

代码库在 65Kb 左右,所以。然而 F3 仍然拥有你所期望的所有功能。你可以用可选插件扩展它。

用无脂肪框架很容易学会。开始时不需要使用 Composer、curl 或依赖注入器。您可以在几分钟内创建一个 Hello World 应用程序。

几乎所有的框架都是模块化的,所以你可以使用你需要的部分来构建你的网络应用。默认情况下,F3 不会添加您不需要的代码,从而保持您的应用程序最少。

文档清晰明了,易于理解,有大量的例子。Fat-Free Framework 提供了模板引擎的选择:你可以使用 PHP,F3 自带的模板引擎,或者其他的比如 Smarty 或者 Twig。

F3 开发人员在 Slack无脂肪框架 Google Group 上闲逛。

谁用无脂框架?

Want to cut down on the amount of code you need to write? 💡 A PHP framework could be just what you need. Learn more about the best ones in this guide!Click to Tweet

新手用哪个 PHP 框架最好?

对于初学者来说,最好的框架是那些更简单、更精简的框架。一旦你掌握了其中的一个,你就准备好升级到一个更有特色的了,如果你需要的话。

Yii 将是我为初学者设计的 PHP 框架的首选。Yii 的文档指导你制作一个查看国家的应用程序,教你 MVC 模式,以及如何在这个过程中使用数据库。

Yii Countries web app

Yii Countries web app

如果你犯了一个错误,错误是清楚的,帮助你调试并快速继续。

Yii error for undefined variable

Yii error for undefined variable

超薄框架安装快捷方便。Slim 有框架第 3 版的第一个应用教程。可惜还没有更新到 Slim 版本 4,也就是现在的版本。

Installing Slim 4 via Composer

Installing Slim 4 via Composer

对于 Fat-Free Framework ,你可以选择通过 Composer 安装或者简单地下载并解压一个 zip 文件。这个框架是用一个简单的“Hello,world”程序建立的。

用户指南带你一步一步地了解你需要知道的事情,从路由到单元测试。还有一个 CMS 演示,这样你就可以看到所有的部分是如何组合在一起的。

CodeIgniter 也有一个相当简单的设置和很好的文档。他们的第一个应用程序教程构建了一个简单的 CMS ,带有以新闻故事为特色的 CRUD 函数。

CodeIgniter news archive page

CodeIgniter news archive page

摘要

如果您想减少开发 PHP web 应用程序的时间,使用框架是一个明智的选择。

为了最大限度地利用 PHP 框架,并避免挫折,请确保您对 PHP 有足够的了解,并理解框架背后的基本概念:MVC 架构、面向对象的语法、数据库和 ORM 以及命令行。

你选择哪种框架将取决于你正在构建的应用程序的类型。有适合各种口味的 PHP 框架,从极简到“除了厨房水槽之外的一切”希望这篇文章能帮助你找到最适合你的 PHP 框架。

现在回到你的问题上:哪一个是你首选的 PHP 框架,为什么?请在下面的评论中告诉我们!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

WordPress 插件的 10 个 PHP 测试工具

原文:https://kinsta.com/blog/php-testing-tools/

没有一个软件是没有漏洞的。这是一个适用于所有编程语言和应用程序的公理。

当这些 bug 被部署到您的生产网站中时,您可能会遭受不同严重程度的不良后果。以下是一些例子,从恼人到经济损失不等:

  • 轻度:用户无法点击断开的链接。

  • 严重:联系人表单的“提交”按钮不起作用,用户只有在撰写完邮件后才发现这一点。

  • 严重:支付网关配置不当,导致用户无法在您的电子商务商店购买产品,从而放弃该网站。

  • 可访问性可用性

  • 可接受的性能

  • 交通和负载处理

在这篇文章中,我们将回顾开源社区创建的 10 个工具,它们可以帮助我们在 WordPress 插件中测试 PHP 代码。其中一些工具是专门为测试 PHP 代码而设计的;其他的是用来测试 WordPress 代码的;还创建了一些其他工具来处理一些对测试有用的通用功能。

1.德夫金斯塔

Details for a local WordPress site in DevKinsta.

Details for a local WordPress site in DevKinsta.

DevKinsta 是一个 WordPress 网站的本地开发套件。只需提供一些基本的细节,WordPress 站点的本地实例就会被立即安装,它还捆绑了一些有用的开发工具,如电子邮件收件箱、数据库管理器和日志,以便于故障排除。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

DevKinsta 通常由开发者和设计者在创建他们的 WordPress 主题和插件时使用。但是它也可以用作执行集成和功能测试的本地 web 服务器。这是通过一个 HTTP 工具来完成的,该工具可以帮助您验证您的响应内容和标题是否正确。

DevKinsta 的主要特点是:

  • 很容易建立一个新的 WordPress 环境,一旦不再需要就删除它
  • 允许测试 PHP 和 WordPress 的任何支持版本,以及它们的任何组合
  • 与 MyKinsta 无缝集成,用户可以为他们的站点和数据创建外部备份

2.PHPUnit

PHPUnit logo.

PHPUnit logo.

PHPUnit 是一个面向程序员的 PHP 测试框架。它是在 PHP 代码中执行单元测试最流行的框架,目标是验证源代码的单个单元。

PHPUnit 测试允许开发人员在开发周期中尽可能早地发现问题,有助于确保没有引入代码退化(例如,对某段代码的更改没有在其他地方引起问题)。

PHPUnit 的主要特性是:

  • 新功能测试
  • 新重构的代码验证
  • 可以完全自动化,并在选择的持续集成流程中执行
  • 排除故障
  • 通过功能调用和约束自动记录预期用途
  • 支持测试驱动的开发 (TDD)方法,开发人员首先创建第一个测试,然后创建功能

3.大脑猴

Brain Monkey logo.

Brain Monkey logo.

脑猴是 PHP 和 WordPress 的测试工具。它提供了与框架无关的工具,允许您重新定义 PHP 方法并测试任何 PHP 应用程序的行为。它还提供了专门测试 WordPress 代码的工具。

脑猴的顶级特征是:

  • 允许单元测试与外部未加载的库进行交互
  • 允许调用 WordPress 函数,而不需要加载 WordPress 环境
  • 可以断言 WordPress 函数(如add_filterdo_action)会按预期调用功能

4.大脑骗子

Brain Faker on GitHub.

Brain Faker on GitHub.

Brain Faker 使用 Faker (一个流行的用于生成假数据的 PHP 库)和 Brain Monkey 提供轻松生成假 WordPress 对象和相关功能供您测试,包括:

  • WP_Post实例,并模仿相关函数,如get_postget_post_field
  • WP_User实例,以及模拟相关函数,如get_userdataget_user_byuser_can等等
  • WP_Term实例,并模仿相关函数,如get_termget_term_by
  • WP_Comment实例
  • WP_Site实例,并模仿类似get_site的相关函数
  • WP_Post_Type实例,并模仿相关函数,如get_post_type_objectpost_type_exists
  • WP_Taxonomy实例,并模仿相关函数,如get_taxonomytaxonomy_exists
  • WP_Error实例

Brain Faker 的顶级特性是:

  • 将虚假但真实的 WordPress 数据注入到单元测试中——访问虚假帖子的修改日期将表现为日期(例如2022-04-17T13:06:58+00:00),用户名将是合适的(例如"John Smith"),虚假帖子实例由虚假用户实例创作,等等
  • 虚假数据可以是预先提供的或随机生成的
  • 可扩展——开发者可以模仿他们自己的 WordPress 插件中的类和函数

5.笑柄

Mockery on GitHub.

Mockery on GitHub.

mock 是一个简单而灵活的 PHP mock 对象框架,旨在与 PHPUnit、 PHPSpec 或任何其他单元测试框架一起使用。它提供了一个双重测试框架,能够使用人类可读的领域特定语言 (DSL)定义所有可能的对象操作和交互。

嘲弄的主要特点是:

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

  • 支持灵活生成模拟对象和存根(为测试期间的特定调用提供预定义的固定答案)
  • 增强 PHPUnit 的测试隔离能力
  • 灵活的 API 来表达被嘲笑的期望,尽可能模仿自然语言描述(例如$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');)
  • 使用内存中的模拟对象进行单元测试,以避免访问较慢的系统(如数据库、文件系统或外部服务)
  • 可以模仿确定性和非确定性行为

6.WordPress 本地导出工具

The WordPress export tool.

The WordPress export tool.

WordPress 的本地导出工具将网站的 WordPress 数据以 XML 文件的形式下载到你的设备上,包括帖子、页面、自定义帖子类型、评论、自定义字段、类别、标签、自定义分类、用户和媒体。XML 文件有一个自定义格式(称为 WordPress 扩展 RSS 或 WXR 文件),可以导入任何 WordPress 站点。
这个工具不是专门为测试而设计的。然而,它的用处在于能够创建包含合适数据集的 WordPress 数据库的快照,然后可以用于测试。这意味着包含真实数据的生产中的 WordPress 站点可以被导出并导入到一个开发或试运行实例中来测试新的功能。

WordPress 导出工具的主要特点是:

  • 使用实际的 WordPress 站点创建测试数据
  • 整个数据库的可共享导出文件
  • 对集成和单元测试都有用

7.狂饮

Guzzle logo.

Guzzle logo.

Guzzle 是一个 PHP HTTP 客户端,可以很容易地发送 HTTP 请求并与 web 服务集成。

Guzzle 是一个通用工具,所以测试只是它可能的用例之一。与 DevKinsta 等本地 web 服务器一起,Guzzle 使执行集成测试成为可能:您可以使用 Guzzle 发送针对开发 web 服务器的 HTTP 请求,然后将响应传递给 PHPUnit 中的单元测试,该单元测试验证内容和头是否按预期设置。

Guzzle 的主要特点是:

  • 满足 PHP 标准建议“PSR-7”(用于 HTTP 消息接口),排除供应商锁定
  • 简单快捷
  • 测试是在实际的 WordPress 站点上进行的,增加了可靠性
  • 可以在 PHPUnit 中轻松快速地执行
  • 集成测试可以自动化,并添加到持续集成过程中

8.WP-CLI

WP-CLI logo.

WP-CLI logo.

WP-CLI 是 WordPress 的命令行界面。有了它,你可以更新插件,配置多站点安装等等,而不需要使用网络浏览器

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

WP-CLI 不是一个专门的测试工具,但是测试是它的众多用例之一。例如,在启动一个新的开发 web 服务器之后,您可以执行一个包含 WP-CLI 命令的 bash 脚本,将测试数据导入 WordPress 站点,创建具有适当角色和能力的用户,安装所需的第三方插件,以及其他类似的任务。

由于带有 WP-CLI 命令的脚本可以存储在您的 Git 存储库中,因此执行集成测试的过程可以自动化并集成到您的持续集成过程中:

  1. 使用 WordPress 导出工具来生成真实的测试数据,并将其存储在 Git 存储库中。
  2. 使用 DevKinsta 启动一个带有新 WordPress 实例的 web 服务器。
  3. 使用 WP-CLI 将测试数据导入 WordPress 站点(DevKinsta 可以通过 WP-CLI 操作)。
  4. 在 PHPUnit 中创建一个单元测试,让 Guzzle 对 web 服务器执行一个 HTTP 请求,以验证您的响应内容和头。

WP-CLI 的主要功能有:

  • 允许通过命令行界面对 WordPress 实例远程执行命令
  • 可通过其他工具扩展
  • 增强测试堆栈的功能
  • 允许过程的完全自动化

9. XDebug

XDebug logo.

XDebug logo.

XDebug 是 PHP 的一个扩展,它提供了一系列特性来改善 PHP 的开发体验,包括调试、PHP 错误报告的改进、跟踪、剖析和代码覆盖分析。

XDebug 不会帮助你测试你的代码,但是会帮助你找出 bug 在哪里。将 XDebug 和 PHPUnit 结合使用特别有效:如果一个测试失败了,而你又找不到问题的根源,你可以使用 XDebug 在单元测试代码中添加断点。当再次运行单元测试时,PHP 脚本将在每个断点处暂停,允许您检查执行的当前状态(调用堆栈、属性和对象值等)。)并尝试发现问题所在。

XDebug 的主要特性是:

  • 为流行的 PHP 编辑器提供集成,包括 VS 代码、PHPStorm 和 Sublime
  • 分析每个函数调用花费的时间和消耗的内存
  • 比简单地使用var_dump来调试代码要强大得多
  • 允许在断点处暂停时动态修改变量值

10.PHPStan

PHPStan logo.

PHPStan logo.

PHPStan 是一个 PHP 的静态分析工具,设计用来在编写测试之前发现代码中的 bug。

PHPStan 的目标是减少开发人员必须编写的测试数量。这个工具是测试堆栈中执行的第一个工具,抢先捕捉尽可能多的 bug。只有那些不能从静态分析中推断出来的错误(例如,那些有缺陷的逻辑)必须通过单元测试来验证。

PHPStan 的工作原理是扫描整个代码库,寻找不匹配的地方。例如,不能将返回浮点数的函数的响应值赋给整数类型的函数参数。每当代码中出现这种情况时,这就是一个潜在的 bug,PHPStan 会在开发阶段提醒您,就在您编写应用程序代码的时候。

PHPStan 的主要特性是:

  • 现有持续集成流程中的自动化和集成
  • 定位许多棘手的错误,例如类型不匹配
  • 扫描整个代码库,在很少执行的代码部分查找 bug
  • 以越来越复杂的层次进行组织,以允许逐渐集成
  • 为最流行的 PHP 框架和 CMSs 提供扩展,包括 Symfony、 Laravel、Doctrine、Nette 和 WordPress

摘要

在生产环境中,不经意间将错误带入你的应用程序的代价可能会对你的声誉和收入造成损害,所以你必须在它们影响到你的用户之前尝试根除它们。
看看这 10 个有用的工具,它们可以帮助你在 WordPress 插件✨ 中构建一个强大的测试 PHP 代码的堆栈【点击发推
在复杂的应用程序中,几乎不可能有 100%的把握它不会包含 bug。因此,您必须建立一个流程,在最初的开发周期中找到并消除尽可能多的 bug。

有了一个设计良好的测试工具包,您可以极大地减少应用程序以意想不到的方式运行的可能性。开源社区已经创建并提供了大量工具来测试应用程序的不同方面,您可以这样做,也应该这样做!—利用生成全面的测试堆栈。
在这篇文章中,我们回顾了 10 个工具来帮助你完成在 WordPress 插件中测试 PHP 代码的目标。

你在最近的项目中使用了哪些工具?请在下面的评论区告诉我们你用它做了什么!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

2022 年学习 PHP 的 27 个最佳教程(免费和付费资源)

原文:https://kinsta.com/blog/php-tutorials/

对于初学程序员和那些刚刚进入 WordPress 开发的人来说, PHP 是你可以开始的最好的地方之一。这是一种超级简单明了的语言,使其成为学习的最佳编程语言之一,所以它相当容易上手,并且构成了在线开发的主干。另外,如果你想在 WordPress 后台工作,你肯定需要学习它。

但是如果你不想在昂贵的大学课程上花费几个月或几年呢?相反,你可以今天就迈出 web 开发的第一步。有数百个免费和付费的 PHP 教程可以帮助你深入学习,我们为你收集了 20 多个最好的教程。

这里有一些适合每个人的小东西,从老式的 DIY 文档到指导教程,再到带有游戏和练习的交互式课程,帮助您掌握技能。不管你的学习方法是什么,你都会找到合适的课程。

掌握 PHP 需要做大量的工作,但是只要有一点在线指导,你就可以练习你的技能,并且立刻开始编写你自己的代码。

为什么要学 PHP?

PHP 是一种服务器端的 T2 脚本语言,主要用于创建动态网页。您将看到 PHP 在做一些事情,比如生成交互式内容、收集表单数据、向访问者发送信息以及验证用户。它也是 WordPress 及其插件的支柱,为 CMS 增加了各种独特的功能。你可以用 PHP 做几乎任何事情。

它通常也很容易掌握,是新开发人员的良好入门语言。如果你有编程背景,你应该从头到尾读一遍。但是,即使是完全的初学者也不会在 PHP 的来龙去脉中挣扎太多。

如果你正在钻研 WordPress 开发,PHP 是必须的。它需要修改 WordPress 或者编写主题和插件,它是整个 CMS 的核心。HTML、、CSS 和 JavaScript 也是需要研究的语言,但是没有一种像 PHP 一样是 WordPress 不可或缺的。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

学习 PHP 的最后一个理由:就像其他编程语言一样,它有一个巨大的社区和大量免费资源。这意味着你有很多地方可以寻求帮助、交流想法、下载免费软件或寻找有用的指南。

在这一点上,让我们深入这些 PHP 教程,你可以在网上找到。

想开始做一名网站开发人员或用后端专业知识升级您的服务吗?学习 PHP 是你的下一步!查看这 25 个以上的免费和付费资源,找到最适合你的。📚🎓 点击推文
【CTA】

15 大免费 PHP 初学者教程

如果你负担不起付费课程,或者只是想尝试一下 PHP,看看你是否喜欢它,免费的 PHP 教程是一个很好的起点。免费并不总是意味着低质量,有很多免费教程和一些付费课程一样好(甚至更好)。许多开发者说免费的在线资源非常好,你甚至不需要购买高级课程!

这些网站都提供了学习 PHP 的独特方式。从这里开始,如果你需要更多的指导,你可以继续下面的付费 PHP 教程。

1。官方 PHP 手册

Best PHP tutorials - official php manual

Official PHP Manual

从 PHP 开发者的官方文档开始会更好吗?本指南将带你经历一切,从 PHP 简介到如何安装 PHP 并掌握基本语法。这是一个很好的第一次阅读,尤其是如果你已经习惯了编程文档。

这样做的一个问题是,虽然它确实涵盖了一些高级功能,但它只能带您到此为止。它也非常简单明了,对某些人来说很棒,但是完全的初学者可能会从指导教程中受益更多。

查看文档并通读几节内容。看看它是如何为你工作的。对许多人来说,参考手册和大量的自我指导练习是最好的学习方法。

2。W3Schools PHP 教程

Best PHP tutorials - w3Schools PHP

W3Schools PHP tutorial

W3Schools 对于任何年龄的初学者和 web 开发者来说都是一个很好的资源。它的指南非常简单易懂,另外还有大量的参考资料和例子,以及大量的练习和测验来帮助你记忆 PHP。甚至可以获得 W3Schools 在线认证。

如果你想学习一门新的编程语言,并且正在寻找有趣且操作简单的教程,请查阅 W3Schools 的文档。

3。PHP:正确的方法

Best PHP tutorials - PHP the right way

PHP the right way

像每一种编程语言一样,PHP 有你应该遵循的最佳实践。如果做不到这一点,你的代码将会又慢又笨拙,甚至可能完全崩溃。 PHP:正确的方式告诉你所有的编程标准,这些标准对于新开发者来说可能不太明显。

这不是一个初学者的教程,将带你一步一步地经历一切,但它仍然值得通读,这样你就可以创建高质量的代码。

4。FreeCodeCamp 的免费 PHP 教程

Best PHP tutorials - PHP video tutorial

FreeCodeCamp.org

如果你喜欢看视频教程,这个长达五个小时的非常适合你。整个课程深入涵盖了 PHP 的所有基础知识,向您展示了您需要从头开始了解的一切。

花一个下午的时间来做这件事,你会成为一个初学 PHP 的程序员。如果你已经学习了一点 PHP,并且想要跳过,你可以通过点击描述中的时间戳跳到任何部分。
【CTA】

5。用 Codeacademy 学习 PHP

Best PHP tutorials - codeacademy php

Codeacademy

你学习编程的最佳方式是什么?Codeacademy 是一个完全免费的资源,它通过代码而不仅仅是视频或文本教程来教学。虽然它主要由互动课程组成,但也有测验、文章和自由形式的项目。这就像一门自学的大学课程,你所需要做的就是记账。

6。PHP 学徒

php apprentice

PHP Apprentice

无论是初学者还是有经验的人, PHP 学徒都有好的建议给你。这本免费的在线书籍正在开发中,目前有 22 页,大部分都是 PHP 开发的例子。这有点像典型的编程文档,但是更简单,更容易掌握。

7。GeeksforGeeks PHP 教程

Best PHP tutorials - geeksforgeeks php

GeeksforGeeks

许多这些免费资源涵盖了基础知识,没有太多其他内容。这个庞大的教程集涵盖了 PHP 必须提供的所有函数和库。

这读起来不像是指南,更像是文档,所以如果你喜欢官方的 PHP 手册,但想要一些更实质性的东西,试试这个网站。

8。TutorialsPoint PHP 教程

tutorialspoint php

TutorialsPoint

这是另一个绝对庞大的 PHP 学习资源,但它不是非常简单的文档风格的页面,它的结构更像一系列教程。这里有很多内容,从基础到更高级的主题,加上使用 PHP 进行登录表单和 AJAX 的例子。

9。PHP 基础播放列表

php basics

Codecourse

如果你还在掌握基础知识,并且更喜欢视频演练,这些 PHP 教程正是你所需要的。35 个视频相对较短,从 5 分钟到 20 分钟不等,涵盖了很多不同的主题。五个小时左右就可以免费看完整个系列。

10。Y 分钟学会 PHP

learn php in y minutes

Learn X in Y Minutes

想学 PHP,快?这份文件简要回顾了一切,没有任何修饰,只有代码。没有手把手或冗长的解释,它设法将 PHP 压缩成一个页面。很好,如果你喜欢你的教程。

11。Learn-php.org 免费互动 PHP 教程

Best PHP tutorials - learn PHP interactive tutorial

Learn-php.org free interactive PHP tutorial

这篇 PHP 教程的独特之处在于,它是一组互动练习,鼓励你尝试编码,看看你是否能得到预期的输出。如果你失败了,它会让你知道哪里出错了,就像一个真正的代码编译器。如果您想通过引导式课程实时测试您的语法,请尝试一下。

12。网络忍者的 PHP 初学者教程播放列表

The Net Ninja's free PHP tutorial

The Net Ninja’s free PHP tutorial

如果你想从零开始建立自己的网站,这里有完美的视频播放列表。将 PHP 和 MySQL 结合使用,你可以建立一个带有数据库的全功能网站,并学习如何编写各种功能的代码,比如表单和数据验证。这些视频非常棒,你一定会从中学到很多东西。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

13。PHP5 教程

php5 tutorial

PHP5 tutorial

本文档通过大量有用的图片和简单易懂的指导,带你了解 PHP 和 MySQL。一个缺点是它专注于 PHP 5,而 PHP 5 已经到达了它的生命的终点。PHP 5.6 仍然在网络上广泛使用,但是如果可以的话,最好还是使用 PHP 7 。这个网站仍然很好地涵盖了 PHP 的基础知识,所以它仍然值得一读。

14。Traversy Media 的 PHP 前后播放列表

php front to back

Traversy Media’s PHP tutorial

看看这个播放列表:它将在 22 个视频教程中教会你所有关于 PHP 的知识。这将介绍安装和 PHP 语法等基础知识,然后介绍 MySQLi 集成和用 PHP 设置 cookies 的等高级实现。

15。SoloLearn PHP 教程

Best PHP tutorials - sololearn php

SoloLearn

SoloLearn 让他们的一系列课程变得有趣又吸引人。测验帮助你记住你学了什么,而成就和互动内容让你保持兴趣。你所需要做的就是创建一个帐户,你甚至可以在手机上和网上学习这门课程。这里有超过一百万的学生,很多开发者都是从这里起步的。

12 个面向严肃开发者的付费 PHP 教程

这些付费的 PHP 课程提供了对 PHP 的深入了解。它们中的许多都物有所值,提供多种学习方法:视频、文本教程和互动学习练习。他们可能还会提供一些免费教程所没有的关于 PHP 的见解。

如果你在类似在线大学的环境中学习得最好,这些付费课程可能只适合你。

1。Udemy PHP 教程

Best PHP tutorials - udemy php courses

PHP Tutorials on Udemy

Udemy 是一个非常受欢迎的在线平台,提供各种主题的各种课程。仅平台上就有 350 万学生在学习 PHP。有数百门 PHP 课程从各个可能的角度覆盖了这门语言,所以这里有适合每个人的东西。

一个缺点是:课程可能相当昂贵,通常在 50-200 美元之间。但这些通常包含数小时甚至数天的视频,以及互动课程和可下载资源,因此这可能是一项不错的投资。

2。PHP 初学者

Best PHP tutorials - php for beginners

PHP for Beginners

如果你想要一门课程带你从零到精通 PHP,试试这个吧。它教你如何将 PHP 与像 WordPress 这样的 CMSes 整合,如何使用 MySQL 数据库,以及如何创建交互式内容。除此之外,你还会学到编程的基础知识和调试你自己的代码。这里有绝对大量的内容,所以准备好一个漫长的过程。

3。Lynda PHP 教程

lynda php

PHP Tutorials on Lynda

Lynda 包含 55 门 PHP 课程和近 2000 个视频教程,通常长达数小时。像 Udemy 一样,这些是由许多不同的人制作的,涵盖了各种 PHP 相关的主题。你可以根据技能水平、主题甚至 PHP 版本对结果进行排序。

厌倦了体验你的 WordPress 网站的问题?通过 Kinsta 获得最好、最快的主机支持!查看我们的计划

另外,每个课程通常都有一些免费的视频,所以你可以看看它是否适合你。之后,您需要购买订阅才能看到其余的课程。

4。Coursera PHP 课程

Best PHP tutorials - coursera php

PHP Courses on Coursera

想在不上大学的情况下从大学学习吗?这些 Coursera 课程就是要走的路。有些是免费的,但很多是需要付费才能注册的。

有经济援助,所以这是一个负担得起的选择。你实际上参加了预定的课程,与同龄人一起工作,获得评分,并获得认证。

5。通过建立一个完整的网站学习面向对象的 PHP

learn-object-oriented-php

Object-Oriented PHP course

想从零开始建立自己的网站?这门课程教你关于面向对象编程的一切,以及在使用 PHP 时如何掌握它。你将有机会学习基础知识,到最后,你将拥有自己的功能性网站。学习几个月没什么意思,所以如果你想现在就开始创作,试试这门课。

6。从头开始克隆 Spotify:JavaScript PHP 和 MySQL

spotify clone php

How to make a Spotify clone tutorial

克隆人是掌握一项技能的最好方法之一。它可以教你模仿专家是如何做的,同时给你空间添加你自己的触摸和实验。这门课不仅教你PHP,还教你 JavaScript 和 MySQL,一切从零开始。您将使用您的新技能制作一个 Spotify 克隆,它将带您走过旅程的每一步。

7 .。拉拉卡斯特之旅:PHP

Best PHP tutorials - laracasts journey

Laracasts

Laracasts 是一个巨大的截屏或视频教程来源,它记录屏幕并向你展示老师正在做的一切。这里有数百门 PHP 课程,而且整个初级课程都是免费的。每月 15 美元,你就可以参加所有的高级课程。

8。树屋 PHP 课程

Treehouse php

Treehouse

Treehouse 在其网站上提供成千上万的课程,每月收费,有超过 30 门 PHP 课程可供学习。除了视频,每节课都有测验和目标来帮助你掌握所学内容。一些课程只有几分钟长,而另一些有几个小时的视频内容。如果你想尝试其他网络语言,订阅树屋也能让你接触到这些语言。

9。包含 5 个项目的完整 PHP MYSQL 专业课程

php mysql course

PHP MYSQL Professional Course on Udemy

PHP 和 MySQL 经常是齐头并进的。如果后端开发是你的目标,这门课程有五个项目帮助你在职业生涯中进步。148 次讲座和 20 小时的视频,这一个会让你忙上很长一段时间!

10。Pluralsight PHP 课程

Best PHP tutorials - pluralsight php

Pluralsight

Pluralsight 是高级计算机科学和技术课程的来源。只要按月付费,你就可以获得视频课程和学习路径,这些课程和路径可以帮助你胜任某些职业角色,甚至让你获得认证。

使用这个平台,你可以衡量你在某些领域的技能,以确定你在各种技术工作中的表现。这里的主要目标是帮助你获得成为专业开发人员所需的技能,并让你进入这个行业。

11。Laravel 入门

getting started with laravel

Getting started with Laravel course

这门来自 Pluralsight 的课程将教你 PHP 最流行的框架: Laravel 。Laravel 帮助您创建快速、强大且富于表现力的 web 应用程序。它就像 PHP 的一个插件,让你更容易地构建更好的东西。如果你想扩展你的 PHP 知识,学习 Laravel 是最好的起点。了解更多关于最佳 PHP 开发框架的信息。

12。PHP 初学者:如何建立一个电子商务商店

php for beginners course

PHP for Beginners on Udemy

想用 PHP 建立自己的电子商务商店吗?PHP 是网上商店不可或缺的一部分,因为它经常处理许多你需要执行的请求和认证。

这门课程不适合初学者;在开始之前,您需要了解 HTML 和 PHP 语法。它更侧重于教你如何构建应用程序和处理电子商务商店的前端和后端。

Stuck at home? 🏠 There's no better time to learn a new skill... and this guide has all the tools you need to become a PHP master! 💻Click to Tweet

总结

每个开发者都需要从某个地方开始。选择适合自己学习风格的 PHP 教程,完全不用花钱上昂贵的大学课程就能掌握 PHP。

web 开发最难的部分之一是学习建立网站所需的多种语言。PHP 是一门容易掌握的语言,在你深入学习更复杂的 web 语言之前,比如 HTML、CSS、SQL 和 T2 JavaScript T3,这是一个很好的开始。

如果你也在学习 WordPress ,留意一下人们在用它做什么。JavaScript 和 React 正成为 WordPress 开发者越来越重要的工具,一旦你有了一些 PHP 经验,将它们添加到你的技能集可能是一个很好的下一步。

请记住,一旦您完成了课程或阅读了所有文档,学习就不会停止。网络在不断发展,总有更多的东西需要掌握。了解编程趋势可以让你保持相关性,并帮助你创建突破性的应用程序或在新的领域找到工作。PHP 只是一个开始。

你有什么 PHP 教程、备忘单或者你自己的资源可以和新开发者分享吗?在评论中分享你认为最有帮助的 PHP 资源!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

为什么应该使用受支持的 PHP 版本

原文:# t0]https://kinta . com/blog/PHP-versions/

PHP 是当今网络上最流行的脚本语言之一。根据 W3Techs , 超过 78%使用服务器端编程语言的网站使用 PHP。这意味着几乎每 10 个你访问的网站中就有 8 个,它们很可能以某种形式利用 PHP,这也意味着 PHP 并没有死亡。当然,它在 WordPress 生态系统中扮演着非常重要的角色,因为整个 CMS 都是建立在 PHP 之上的。

需要快速检查你的 PHP 版本?创建一个 phpinfo 页面

我们今天面临的一个困境是,当涉及到支持最新的 PHP 版本时,许多企业、开发者和主机已经落后了。下面的一些统计数据可能会让你震惊。今天我们想讨论为什么每个人都使用最新的 PHP 版本如此重要的一些原因,不仅仅是出于安全原因,也是为了更好的性能和支持。

旧的 PHP 版本

和任何软件一样,PHP 有一个发布生命周期,在这个生命周期中,为了不断推动事情向前发展和做出改进,必须坚持下去。PHP 的每个主要版本通常在发布后的两年内得到全面支持。在此期间,漏洞和安全问题会定期得到修复和修补。

Supported PHP Versions for WordPress

Supported PHP Versions for WordPress

PHP 5.6、7.0、7.1 和 7.2 生命周期结束

生命周期结束意味着这些版本将不再有安全支持,并可能暴露于未打补丁的安全漏洞。

  • 截至 2020 年 11 月 30 日,PHP 7.2 走到了生命的尽头。
  • 截至 2019 年 12 月 1 日,PHP 7.1 走到了生命的尽头。
  • 截至 2018 年 12 月 3 日,PHP 7.0 走到了生命的尽头。
  • 截至 2018 年 12 月 31 日,PHP 5.6 也走到了生命的尽头。这正式标志着 PHP 5 一个时代的结束,作为第一个版本,5.0 于 14 年前推出。

根据官方的 WordPress Stats 页面,截至本文撰写时,超过 35% 的 WordPress 用户仍在使用 PHP 5.6 或更低版本。如果将这一点与 PHP 7.0 和 7.1 结合起来,目前有高达 64%的用户正在使用截至 2019 年 12 月不再受支持的 PHP 版本。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

如果你看看 WordPress 社区之外的统计数据,那就更可怕了。据 W3Techs 统计,目前在所有使用 PHP 的网站中,有 55.8%的网站使用 PHP 5。

64% of WordPress users are currently using PHP versions that are no longer supported! 😮Click to Tweet

这不仅从安全角度来看是不好的,而且因为仍然有很大一部分 WordPress 站点没有利用 PHP 7 的额外性能增强。

WordPress PHP version Stats

WordPress PHP version Stats

为什么较新版本的采用缓慢?

新版本没有被更快采用的主要原因很可能归结于几个不同的因素:

  • 我们从迁移到 Kinsta 的新客户那里看到的首要原因是企业主不知道或不关心他们的 PHP 版本。当然,这在某些情况下是可以理解的,因为我们不期望每个人都知道这一点。很多时候,这个责任落在开发商、代理商或东道主身上。
  • 开发人员需要时间来更新他们的代码以支持新版本的 PHP。这包括那些开发网站,主题,插件等。
  • 更新代码不仅需要花费精力和时间,还需要大量的测试来确保兼容性。仅 WordPress 库就有超过 49,000 个插件!
  • 许多 WordPress 主机不愿意推出更新的 PHP 版本,因为这可能导致额外的支持票,如果它破坏了一个网站。作为一个应用数据库管理的 WordPress 主机,我们肯定理解这一点,但是根据我们的经验,这通常是反过来的。我们看到的许多支持问题都是由旧的 PHP 版本引起的。
  • 开发商或代理商在处理客户和其他第三方应用程序时可能会进退两难,他们不愿意花费资源进行更新。

然而,尽管如此,这仍然不能成为在过时的、不受支持的、实际上会降低你的 WordPress 站点速度的 PHP 版本上运行的借口。好消息是取得了一些进展。Private Packagist 的联合创始人 Jordi Boggiano 每年都会整理一份关于 PHP 使用统计数据的报告。正如你在下面看到的,有一些进展。这当然只是 Composer 安装的一个样本子集,但是看到这些变化还是很有趣的。

php usage statistics

PHP usage statistics – compiled by Jordi Boggiano

你应该更新 PHP 版本的原因

如果你还没有考虑更新,看看下面的一些原因。

1.安全性

更新 PHP 的一个最重要的原因是确保你运行的版本是完全受支持的,并且针对安全漏洞定期打补丁。PHP 5.4 从 2015 年开始就没有打补丁了。而且 PHP 5.5 从 2016 年开始就没有打补丁了。值得注意的是,一些操作系统供应商仍然会更新旧版本的 PHP,如果他们包含它的话。

CVE 细节报道,2016 年是 PHP 安全漏洞最严重的一年,报告了超过 100 个问题。其中包括 DoS、代码执行、溢出、内存损坏、XSS、目录遍历、绕过和获取信息类型。2017 年是自 2000 年以来第三糟糕的一年,有超过 40 个漏洞。

PHP security vulnerabilities by year

PHP security vulnerabilities by year

甚至 PHP 自己也给出了一些关于保持最新反馈:

PHP 像任何其他大型系统一样,处于不断的审查和改进之中。每个新版本通常都包括主要和次要的变化,以增强安全性并修复任何缺陷、配置错误和其他影响系统整体安全性和稳定性的问题。像其他系统级脚本语言和程序一样,最好的方法是经常更新,并保持对最新版本及其变化的了解。PHP,保持最新

建议阅读:如何在 WordPress 中提高 PHP 内存限制。

2.表演

随着 PHP 7.27.37.48.0 的发布,带来了巨大的性能提升!事实上,它太大了,应该优先于你可能在 WordPress 网站上玩的许多小优化。下面的基准展示了 PHP 7 相对于之前版本的显著性能提升。与 PHP 5.6 相比,PHP 7 允许系统每秒执行两倍的请求,而延迟几乎是 PHP 5.6 的一半。

php 5.6 vs php 7

PHP benchmarks by Rasmus Lerdorf, PHP Fluent Talk

我们也运行了我们自己的 PHP 基准测试。与上面的基准类似,我们看到 PHP 7.3 每秒执行的事务(请求)几乎是 PHP 5.6 的三倍。PHP 7.3 也比 PHP 7.2 平均快 9%。

WordPress 5.0 PHP benchmarks

WordPress 5.0 PHP benchmarks

  • WordPress 5.0 PHP 5.6 基准测试:91.64 请求/秒
  • WordPress 5.0 PHP 7.0 基准测试结果:206.71 请求/秒
  • WordPress 5.0 PHP 7.1 基准测试结果:210.98 请求/秒
  • WordPress 5.0 PHP 7.2 基准测试结果:229.18 req/sec
  • WordPress 5.0 PHP 7.3 基准测试结果:253.20 req/sec 🏆

Christian Vigh 也发表了一篇 PHP 性能对比文章,他发现 PHP 5.2 比 PHP 7 慢 400%。

cpu benchmarks php versions

Comparison of pure CPU benchmark results

3.支持

支持是您希望使用最新和受支持的 PHP 版本的另一个原因。很多时候,插件和主题的开发者到目前为止只能扩展对旧版本的支持。这是由于时间限制,没有时间测试兼容性。当你在旧版本上运行时,事情最终会崩溃,你可以在 WordPress 论坛上直接看到这种情况发生。下面是一个常见错误,通常是由旧版本的 PHP 及其处理特定函数的方式引起的:

Parse error: syntax error, unexpected ‘’ (T_VARIABLE), expecting function (T_FUNCTION) in /pub/file.php on line xxx

你可以在 WordPress 论坛中搜索“ unexpected T_Function ”,它会返回超过 2000 个帖子,其中许多是最近几天的结果。这里只是最近的几个,都是由于运行旧版本的 PHP:

由于这些线程运行在 PHP 的过时版本上,它们中的许多线程都被打开了。然而,同样的情况也可以说是由于 PHP 7 兼容性问题而开放的线程。这表明 WordPress 开发社区仍在努力赶上 PHP 的新版本。

4.面向开发人员的新功能

如果可以的话,大多数 WordPress 开发者更愿意只开发新版本的 PHP,原因很简单,在 PHP 5.2 和 PHP 7.4 之间增加了很多新特性。PHP 7 和 7.3 的一些变化包括:

  • 组合比较运算符
  • 零合并运算符
  • 新型暗示
  • 匿名类
  • 可空类型
  • Iterable 和 void 返回
  • 多重捕获异常处理
  • 列表中可用的键
  • 更多的负字符串偏移量
  • 数字运算符和格式错误的数字
  • HTTP/2 服务器推送
  • 预加载
  • 数组表达式中的扩展运算符
  • 箭头功能 2.0(短闭包)
  • 零合并赋值运算符
  • 类型化属性 2.0
  • 弱引用
  • 协变收益和逆变参数
  • 新的自定义对象序列化机制

支持任何东西的旧版本都没什么意思。不幸的是,许多开发人员不得不支持广泛的版本。

确保你的主机支持最新的 PHP 版本

花了一段时间,但官方WordPress.org 要求现在推荐一个运行 PHP 7.4 或更高版本的主机

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Yoast 最近发表了一篇很棒的文章,名为“把你的主机塑造成”在这篇文章中,Joost de Valk 详细讲述了真正的问题是主机提供商没有更快地采用这一技术,即使他们采用了,他们也不鼓励用户升级。尤斯特会为此做些什么。从 Yoast SEO 4.5 开始,他们将开始在 WordPress 仪表盘上为运行 PHP 5.2 的网站显示一个通知。这个通知将是巨大的,丑陋的,不可忽视的。

PHP 7 is the future (and boy is it nice and fast). 🚀 -- Joost de Valk via @yoast @kinstaClick to Tweet

如果我们能和你击掌,我们会的!自从 PHP 7.2、7.3、7.4 和 8.0 的稳定版本发布以来,Kinsta 一直支持它们。

事实上,Kinsta 的每个新 WordPress 安装都默认为 PHP 7.4。

我们致力于运行市场上最快、最安全的环境,这意味着我们需要确保所有站点都使用主动接收安全更新的技术。

查看我们关于如何在你的 WordPress 网站上安全更新 PHP 的指南。

检查你当前的 PHP 版本

也许你不知道你的 WordPress 站点目前是什么版本的 PHP。看看下面这些不同的方法就知道了。

1.用 Pingdom 检查 PHP 版本

查看您运行的 PHP 版本的最简单方法之一是使用类似 Pingdom 或 Google Chrome Devtools 的工具。第一个 HTTP 请求头通常会显示版本。

Check PHP version in Pingdom

Check PHP version in Pingdom

这依赖于主机不修改X-Powered-By头值。出于安全考虑,有些人可能会删除它。如果是这样,您可能看不到您的 PHP 版本,在这种情况下,您需要使用下面的其他选项之一。或者你也可以主动去问主人。

2.在 WordPress 中检查 PHP 版本

如果你运行的是 WordPress 5.0 或以上版本,你可以在“站点健康”工具下看到 PHP 版本。

WordPress site health tool PHP version

WordPress site health tool PHP version

3.用文件检查 PHP 版本

你也可以通过 FTP 上传一个文件到你的服务器来检查你的 PHP 版本。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

第一步

创建一个名为 phpinfo.php 的空白文件。在文件中,粘贴以下内容:

<?php
echo 'Current PHP version: ' . phpversion();
?>

第二步

将文件上传到你的 WordPress 站点的根目录。

upload phpinfo file

Upload phpinfo.php file

第三步

然后浏览到你的文件的位置,domain.com/phpinfo.php.,你应该会看到你当前的 PHP 版本。

check php version browser

在浏览器中查看 PHP 版本

不太懂技术的用户或没有预算的用户应该做什么?

我们意识到仍然有成千上万的 WordPress 网站与新的 PHP 版本不兼容,不管是由于旧的插件还是主题。对于不太懂技术的用户或没有预算的用户来说,挑战在于最佳行动方案是什么?我们在迁移到 Kinsta 的客户中经常遇到这种情况,因为 PHP 版本已经停产。

以下是一些建议:

  1. 这应该是给定的,但是如果你还没有更新你的插件和主题到最新的版本。
  2. 联系插件或主题的开发者,要求他们添加/修复对 PHP 7.2、7.3、7.4 或 8.0(或你试图更新的当前版本)的支持。在逐步淘汰 PHP 版本之前,我们会给客户一些提示,这样如果需要的话,他们可以有时间这样做。这对于那些没有预算只是雇佣一个开发者的人来说尤其重要。
  3. 找到一个能够提供相同功能并且与 PHP 版本兼容的替代插件。多亏了大量的 WordPress 知识库和数以千计的优质插件和主题,你几乎可以保证每样东西都有一个替代品。
  4. 对于那些有预算的人,雇佣一个 WordPress 开发者来解决这个问题。

如何更新 PHP

准备更新了吗?很好,但是你应该做的第一件事就是测试你的网站以确保兼容性。你可以在本地测试你的 WordPress 站点,或者更好的是,利用一个临时环境,因为这将更像一个真实的生产站点。安全总比后悔好!

如果您是 Kinsta 的客户,只需点击一下,您就可以轻松创建一个暂存环境。从仪表板上更改 PHP 版本并开始测试。

Create a WordPress staging site

Create a WordPress staging site

记住,如果你从一个旧版本的 PHP 升级,确保你也升级了你的 WordPress 安装。一个新版本的 PHP 和一个 2 年前的 WordPress 版本可能不会有好结果。一旦你测试了你的站点并准备好更新 PHP,这里有一些资源可以让你快速上手。

查看我们关于如何在你的 WordPress 网站上安全更新 PHP 的指南。

用 Kinsta 更新 PHP

如果你是 Kinsta 的客户,你可以很容易地改变 PHP 的版本,只需点击你的网站,进入“工具”,选择一个不同的 PHP 引擎。我们目前有 PHP 7.2、7.3 和 7.4 可用。注意:我们在上面公布了 PHP 5.6 到 7.1 的淘汰日期。

Change to PHP 7.4

Change to PHP 7.4

在 Kinsta,我们的 PHP 配置包括一个定制的自我修复特性。这意味着你的网站的 PHP 引擎会自动重启。如果 PHP 自动重启不成功,我们的监控系统会提醒我们的系统管理团队调查这个问题。

从 cPanel 更新 PHP

如果您的主机使用 cPanel,他们很可能已经为您提供了一个选项来更改您的 PHP 版本。只需登录 cPanel,在“软件”类别下点击“选择 PHP 版本”

select php version

Select PHP version in cPanel

然后,您可以选择您的主机支持的可用 PHP 版本。

php 7 cpanel

PHP 7 in cPanel

在服务器上手动更新 PHP

如果您管理自己的服务器,我们建议查看官方的 PHP 安装文档,因为说明会因操作系统而异。您会希望看到函数、类、包装器、扩展、模块等的变化。以下是一些迁移指南的链接:

摘要

如果你还没有升级到 PHP 8.0,现在是时候考虑一下了。不仅仅是因为您希望运行在受支持的软件上,还因为您保证了性能优势!如果你当前的主机还不支持 PHP 8.0,我们强烈建议你寻找新的主机。主题和插件也是如此。如果开发者还没有发布一个补丁,可能是时候找到一个替代品了。

你最近迁移到 PHP 8 了吗?我们很想听听你的想法。这是一个容易的转变吗?或者你还在等待第三方。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP vs Angular:2022 年开发者该选择什么?

原文:https://kinsta.com/blog/php-vs-angular/

开发可高效扩展并提供诺克斯堡级安全性的 web 应用和网站是每个开发人员的梦想。而使用这样的产品是每一个用户的愿望。因此,为您的项目选择最合适和最可靠的技术非常关键。

虽然 PHP 和 Angular 是完全不同的技术— PHP vs JavaScript 是一个更恰当的比较——它们都在 web 开发中广泛使用(有时一起使用)。那么,为什么是这一块呢?在我们的研究中,我们发现“PHP vs Angular”是一个相对流行的搜索查询。

这篇文章将解决关于 PHP 和 Angular 的争论,并帮助你为你的下一个项目选择最合适的技术。

准备好了吗?让我们开始吧!

PHP 与 Angular:为什么要比较?

在比较 Angular 和 PHP 之前,有必要了解一下它们。因此,让我们来看看这些技术是什么,它们的关键特性和应用。

什么是有角?

Angular logo

Angular logo.

Angular 是一个开源的基于 TypeScript 的框架,用于开发 web 和桌面应用程序。Angular 项目由谷歌的 Angular 团队领导,并在一个由许多个人和公司组成的社区的帮助下开发。因为它完全重写了 AngularJS (Angular 1),所以也被称为“Angular v2 及以上”或“Angular 2+”

Angular 于 2016 年发布,获得了麻省理工学院的许可,主要用于前端 web 开发。目前我们一共有 12 个角版,最新的一个发布于 2021 年 5 月 12 日。

Angular 包括一个基于组件的 web 框架来帮助你开发可扩展的 web 应用。它还有一个广泛的集成库,涵盖了几个重要的特性,比如表单管理、客户机-服务器通信、路由等等。

角度与角度

Angular 经常与 AngularJS 混淆。这并不奇怪,因为 Angular 是 AngularJS 的重大更新。因此,了解有角度和有角度之间的区别是很重要的:

| 有角的 | 安古斯 |
| 它是一个基于类型脚本的 Web 框架 | 这是一个基于 JavaScript 的框架 |
| 它是基于组件的,利用不同组件的层次结构 | 它利用控制器和范围 |
| Angular 包含标准指令。例如,要创建单向或双向绑定,只能将ng-model与 Angular 一起使用。 | 它有几个指令。在 AngularJS 中,您需要明智地选择指令。您将使用ng-bind进行单向绑定,而使用ng-model进行双向绑定。 |
| Angular 的架构包括带有模板的结构和属性指令。 | AngularJS 遵循模型-视图-控制器(MVC)架构来管理数据、规则和逻辑,并表达应用程序的行为方式。 |
| 通过更好的框架结构,Angular 提供了更高的速度和性能。 | 相比之下,AngularJS 提供的速度和性能。 |
| 为了提供更快的应用程序创建,Angular 使用命令行界面(CLI)。 | AngularJS 严重依赖第三方工具,如 WebStorm 和其他 ide 来提供更快的应用程序创建。 |
| Angular 正在不断发展中。 | 谷歌已经停止了 AngularJS 的积极开发,但他们已经承诺将它的长期支持延长到 2021 年 12 月 31 日,主要是为了解决安全问题。之后谷歌就不再支持了。 |

特征

  • 开源 : Angular 是开源免费的。
  • 跨平台支持:您可以为所有平台构建应用程序和网站,包括移动平台、web 平台、本地桌面平台、本地移动平台和操作系统,如 Windows、Linux 和 Mac。
  • 性能和速度 : Angular 将模板转换成高度优化的 JavaScript 虚拟机代码。它提供了仅用 CSSHTML 的即时应用渲染,并促进了更好的 SEO 优化。此外,利用组件路由器,Angular 应用加载速度更快,提供自动代码分割。
  • 可伸缩性:Angular 框架是高度可伸缩的,通过在 Immutable.js 或其他推送模型上创建数据模型,帮助开发人员满足海量数据需求。
  • 简单的界面:它有声明性的模板,可以帮助你更快地构建像 UI 视图这样的应用功能。您还可以使用组件扩展其模板语言。
  • 生产力:您可以立即开始创建应用程序,添加测试和组件,并使用命令行工具进行部署。它在领先的 ide 和编辑器中提供智能代码完成、快速错误检查和反馈。
  • 测试:Angular 中的依赖注入通过向控制器中注入虚拟或模拟数据来帮助你测试代码。接下来,它评估其行为和输出,并利用不存在的 HTTP 提供者将伪造的响应从服务器推入控制器。
  • 内置组件 : Angular 具有功能性的内置特性,如导航元素、按钮、布局、数据表、指示器等。因此,Angular 可以轻松创建直观的应用程序界面,并开发类似 Gmail、Android OS、Google Drive 等应用程序。
  • 代码可重用性:它帮助你节省时间,加速你的开发过程。

应用程序

由于 Angular 在创建高性能和可伸缩的应用程序方面无可挑剔的特性,它现在得到了广泛的应用。以下是它的一些可能用途:

  • 构建渐进式 web 应用:您可以使用 Angular 开发高性能渐进式 web 应用,通过零步骤安装提供离线、类似应用的体验。
  • 桌面应用开发 : Angular 用于创建兼容 Windows、macOS 和 Linux 的桌面应用。
  • 开发本地应用 : Angular framework 适用于移动设备,因此,您可以使用它来创建移动应用。
  • 创建单页应用:通过在一个实例中检索网页的关键部分(HTML、CSS 和 JavaScript ),Angular 可以轻松处理复杂性。因此,它可能是开发单页面应用程序的最佳选择之一。
  • 创建动画:Angular 的智能 API 可以让你创建高性能的动画和复杂的舞蹈动作,只需要很少的代码行。
  • 创建可访问的应用:您可以使用开发人员指南、内置 a11y 测试基础设施和支持 ARIA 的组件来创建可访问的应用。

此外,在 Angular 中创建某些应用程序是无缝的,包括 YouTube 和 PlayStation 等视频流应用程序;电子商务应用程序;weather.com 等实时数据 apps 以及像《卫报》这样以内容为中心的新闻网站。

Calling all developers! 💥 Determine whether a PHP-based framework or Angular is the right fit for your next project with help from this guide 👇Click to Tweet

PHP 是什么?

Code written in PHP

PHP.

PHP 是 PHP:超文本预处理器的递归首字母缩写(最初,它代表个人主页)。它主要是一种用于服务器端 web 开发的通用脚本语言。

PHP 于 1994 年由丹麦裔加拿大程序员拉斯马斯·勒德尔夫设计,现在由 PHP 开发团队和 T2 Zend 科技公司开发和维护。标准的 PHP 软件在 PHP 许可下是免费的。它几乎免费支持所有操作系统、平台和 web 服务器。

PHP 于 1995 年发布,从那以后,它的专用开发人员社区带来了一些修改。因此,最新的主要 PHP 版本是 PHP 8。

一般来说,PHP 代码是在服务器上的 PHP 解释器的帮助下处理的,并在模块、可执行 CGI 或守护进程中实现。最后,它会产生一个 HTTP 响应。

这种编程语言是最受欢迎的语言之一用于开发世界范围内的许多网站和应用程序。

根据 W3Techs 的数据,在所有已知服务器端编程语言的网站中,超过 79%的网站使用 PHP。

W3Techs survey showing PHP version usage

W3Techs survey showing PHP version usage.

使用 PHP 的流行网站包括:WordPress、T2、Joomla、T4、Drupal、Canva、脸书和 Salesforce 等等。

特征

PHP 的主要特点是:

  • 免费: PHP 的标准许可是免费的。因此,任何人都可以轻松地下载、安装和使用它来完成他们的 web 开发项目。开发者也可以检查它的代码,并为的错误修复和新功能做出贡献。
  • 简单:开发人员喜欢使用 PHP,因为它简单,无论是初学者还是有经验的人。它很容易学习,并且在语法方面与 C 语言相似,具有逻辑的、有组织的结构。
  • 性能:PHP 中数据库连接和数据加载更快。因此,它在数据库管理、服务器管理、邮件功能等方面也很有效。请务必阅读我们的 PHP 基准博客帖子
  • 面向对象编程:和 C++一样,PHP 是一种面向对象的编程语言,具有数据封装、抽象、继承、多态等有用的特性。
  • 兼容性 : PHP 支持跨平台兼容性,可以跨 macOS、Windows、Unix、Linux 等多个操作系统运行。它的脚本也可以在不同的服务器上无缝工作,比如 T2、Apache 和 IIS,以及智能手机、平板电脑、笔记本电脑和台式机等设备。
  • 实时监控 : PHP 使您能够轻松地获取服务器日志,以便您可以监控资源使用情况,如内存、CPU 和其他数据。
  • 灵活性:PHP 的嵌入能力优秀;因此,您可以轻松地将它与其他技术(如 HTML、JavaScript、XML 等)集成。
  • 数据库支持:支持 MySQLPostgreSQL 、MongoDB、Oracle 等多个数据库。由于是数据库友好的,您可以直接在数据库系统中添加、更改或删除数据。
  • 异常处理 : PHP 生成快速错误警告,因为它支持错误报告常量。它可以让你很容易地发现错误,并在它们造成大麻烦之前修复它们。

除了所有这些特性,PHP 还提供了魔法常数、cookies、正则表达式、shell 命令行执行、PDO 类等等。

应用程序

尽管 PHP 是一种通用脚本语言,但开发人员主要使用 PHP 进行服务器端 web 开发。然而,PHP 有很多应用,无论是在 web 环境中还是在 web 环境之外:

  • 创建网站和 web 应用程序 : PHP 让你创建现代的、交互式的应用程序和网站,具有更好的定制和用户友好的界面。为了实现这一点,它利用了一个 3 层 web 架构,线性地支持您的服务器、浏览器和数据库系统。因此,这些基于网络的产品是高性能的,能够与许多服务集成,并促进安全的在线支付。
  • 构建电子商务应用 : PHP 让你轻松构建电子商务应用。你可以使用基于 PHP 的 web 框架,比如 Laravel ,CodeIgniter,Symfony,以及许多其他的。PHP 使应用程序能够无缝扩展,对早期创业公司和大企业都有帮助。一些利用 PHP 的电子商务平台有 MagentoWooCommerceShopify
  • 创建内容管理系统(CMS) : CMS 对于内容营销已经变得非常有用。PHP 帮助创建 web CMS 平台而没有麻烦,所以你可以满足这种需求。它支持多个数据库,可以通过 POP3、HTTP、IMAP、COM、SNMP 等协议与各种服务轻松交互。
  • 表示数据:使用 PHP,您可以使用 Image_Graph 之类的工具创建大量格式的数据表示,包括图形和图表,如饼图、线条、条形图、柱形图等等。
  • 构建基于 GUI 的应用:使用 ZZEE、PHP-GTK2 等 GUI。,支持 PHP 脚本,您可以创建基于 GUI 的应用程序。
  • 图像处理与平面设计 : PHP 对图像处理与平面设计有帮助。您可以集成基于 PHP 的应用程序和库,如 Imagine、ImageMagic 和 GD library。此外,您还可以创建缩略图,旋转图像,调整大小和裁剪图像,添加水印,以及取出 PNG、JPEG、GIF 等几种图像格式的图片。
  • 机器人无人机控制:可以用 PHP 进行无人机控制。人们也用它来交互式地计算、下载、上传和显示数据。

使用 PHP 和 Angular

如果您想知道是否可以将 PHP 与 Angular 一起使用,答案是肯定的。但是 Angular 仍然需要一个独立的客户端-服务器架构。

一般来说,PHP 运行在服务器端,而 Angular 运行在客户端。因此,要在它们之间建立通信,您需要一个 API。

使用 Angular 创建应用程序或站点的整个前端,使用 PHP 创建与前端和数据库通信的 API。

应用程序前端使用 Angular 的 HTTP 请求技术,如 GET 和 POST,用于 UI 和数据库之间的数据传输。所以你可以在 JSON 中传输这些数据,在 PHP 代码中管理这些数据以将其存储在数据库中,并根据需要将其转发给 UI。

PHP 与 Angular:一个详细的比较

现在你对 PHP 和 Angular 有了一点了解,以及它们的特性和应用,让我们来比较一下,以帮助你决定在下一个项目中应该使用哪一个。

注意:由于 PHP 和 Angular 是截然不同的技术,因此进行严格的一对一比较是不可行的。我们将讨论他们在许多方面的优势和劣势,以帮助您做出更好的决定。

PHP vs Angular:语言 vs Web 框架

Comparing language vs web framework for PHP and Angular

PHP vs Angular.

PHP 与 Angular 比较的第一个也是最重要的方面是 PHP 是一种编程语言,而 Angular 是一种基于类型脚本的框架。

它们都以 web 和应用程序开发为目标,但是它们的本质是不同的。

现在,如果你比较他们的编程语言,TypeScript 是 JavaScript 的超集,或者你可以说是类型化的 JavaScript。因此,JavaScript 程序也是类型脚本程序。

这种语言由微软在 2012 年开发,提供可选的静态类型。TypeScript 旨在为 JavaScript 创建大型应用程序和转换器,并简化 JavaScript 中的复杂组件开发。

另一方面,与 TypeScript 相比,PHP 是一种设计糟糕的编程语言。它在函数名和参数顺序方面的不一致性,版本的缓慢采用等等都是常见的抱怨。

PHP vs Angular:前端 vs 后端

Comparingfrontend and backend for Angular and PHP

Backend vs Frontend: PHP vs Angular.

Angular 是最通用和最先进的前端 web 框架之一,用于构建基于 TypeScript 的成熟应用程序,通常用于前端开发。

PHP 运行在一个网站或应用程序的后端,它对访问者来说是隐藏的。例如,PHP 在你的 web 服务器和 WordPress 网站的管理区执行它的工作。

PHP 与 Angular:服务器端与客户端脚本

Angular 在用户的智能手机、平板电脑或笔记本电脑上的客户端工作,而不是在服务器上。因此,这也意味着您需要另一种用于服务器端脚本的编程语言。

PHP 就是这么做的。它是一种服务器端脚本语言,其代码在 web 服务器上执行,并对浏览器的请求产生 HTML 响应。PHP 作为一种服务器端编程语言,允许您向用户交付动态内容,通常来自数据库。它也有助于构建电子商务应用程序。

PHP vs Angular:哪个更容易学?

如果你懂 JavaScript,你就不会觉得理解 Angular 有困难,因为它是用 TypeScript 写的,是 JS 的上标。

然而,两者都很容易学。这是因为它们类似于其他编程语言,如 Java、C 和 C++,并且依赖于编程基础,如对象、变量、范围、条件语句、循环等等。因此,即使对初学者来说,学习 Angular 或 PHP 也很容易。

然而,与 PHP 相比,掌握 TypeScript 可能有点困难。另外,现在互联网上有很多免费和付费的 PHP 教程,可以帮助你掌握这门语言。

PHP 与 Angular:区分大小写

区分大小写意味着您必须以正确的大写(大写或小写)键入变量、函数名、关键字和其他标识符。

例如,while语句将总是用小写字母书写,而不是用WHILEWhile书写。

Angular 区分大小写,因为它使用 TypeScript,这是一种区分大小写的编程语言。但是 Angular 的指令、模块和控制器是不区分大小写的。因此,你需要小心使用这些。

例如,如果你想在 Angular 中创建一个变量作为$x并期望得到$X的值,这是不可能的。

但是另一方面,PHP 是部分区分大小写的。所以,还是要小心。

在 PHP 中,字符串、常量(默认)、对象属性和变量是区分大小写的。但是,函数、关键字、对象方法、定义的常数和类名是不区分大小写的。

例如,如果您输入一个区分大小写的变量$x,您将只获得$x的值,而不是$X

但是,如果你在 PHP 中输入一个函数xY(),然后你想调用Xy()XY()xy(),这个函数就会运行。

也就是说,基于 PHP 的框架或 CMS 可以定义自己的语法。WordPress 钩子和函数就是一个完美的例子。

无论使用什么编程语言,编写代码时保持一致都是至关重要的。

PHP 与 Angular:易于安装

安装现代前端应用程序并不容易。但是,Angular 提供了一个名为 Angular CLI 的命令行界面来使事情变得更简单。它消除了复制粘贴配置文件以使项目进入开发阶段。

您可以通过一些简单的步骤安装 Angular:

  • 安装 NPM 软件包
  • 通过 NPM 安装角度 CLI
  • 在 Angular 中创建新项目

Angular 可以跨操作系统工作,包括 Windows、Linux 和 Mac。所以,仔细阅读他们的详细文档来检查在你的系统上安装 Angular 的具体步骤,因为每一个都有一些不同的方法。

然而,安装 PHP 相对容易。此外,PHP 可以在 Windows、Mac 和 Linux 等多种操作系统上运行。

要使用它:

  • 通过支持 MySQL 和 PHP 的 web 主机获得空间。
  • 在你的电脑上安装一个服务器,然后开始安装 MySQL 和 PHP。

就是这样!

PHP 与 Angular:技术堆栈

Comparing technology stacks for Angular and PHP

Technology stacks for PHP vs Angular.

角度属于均值叠加。这里,MEAN 代表涵盖软件开发重要方面的四种技术。这四项技术是:

  • M : MongoDB,一个非关系或 NoSQL 数据库
  • E : Express.js ,后端 JavaScript 框架
  • A : Angular,一个前端 web 框架
  • N : Node.js 作为运行时环境

MEAN 是一种用于全栈软件开发的高级技术栈,因为它具有前端和后端技术。它的组件更高级,包括应用程序表示层,而不是操作系统层。

PHP 属于 LAMP 栈。在这里,LAMP 是 web 开发中最常用的四种技术的缩写。这些是:

  • L : Linux 作为操作系统
  • 一个 : Apache HTTP 服务器
  • M : MySQL ,关系数据库
  • PHP,编程语言

这些免费的开源技术在世界各地被广泛使用。它们形成了 CMS 的技术栈,如 WordPress、Drupal 等。

PHP 与 Angular:性能和速度

性能和速度至关重要。用户希望你的网站能在 2-3 秒内加载,没人有时间看缓慢的应用程序。

除了硬件资源、存储、内存等之外,使用的编程语言也是网站和应用程序性能的一个因素。

由于 Angular 使用 TypeScript,所以在单个硬件上测量时,它的执行速度比 PHP 快。然而,由于它主要在客户端工作,如果用户的机器不够强大,Angular 的性能也会下降。

此外,Angular 在移动设备上提供了卓越的性能,特别是智能手机,与台式电脑相比,智能手机的使用在当今世界正在飞速增长。它可以在不同屏幕尺寸、界面可访问性和硬件的移动设备上无缝工作。此外,它对构建移动应用程序的原生支持非常棒,并提供了更高级别的可伸缩性。

PHP 的早期版本代码执行缓慢。但是随着 PHP 7 和 Zend Engine 3 的推出,PHP 的速度和性能都有了大幅提升。因此,它变得比许多编程语言如 Ruby、Python、Perl 甚至 TypeScript 都要快。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

PHP 7 能够处理比 PHP 5 多两倍的用户请求。PHP 8 甚至更进一步。阅读我们深入的 PHP 基准测试以获得更多信息。

PHP 8 也是一个重要的 PHP 版本,它在一些特性方面改进了上一个版本,比如即时编译、匹配表达式以及语法、库和类型注释方面的其他变化。所有这些都使得 PHP 在编码方面更加高效和健壮。

PHP 与 Angular:包管理器

编程语言使用包管理器来加速开发过程,因此您不必从头开始设计一切。

包可以是向软件应用程序添加功能的第三方可重用代码的模块。

类似地,软件包管理器指的是一个软件集合,它可以帮助您自动执行特定的过程,比如一致地安装、配置、升级和删除软件包。此外,它维护软件依赖关系和版本信息,以避免遗漏先决条件和软件不匹配。通过这种方式,您可以更专注于更大的事情,例如应用程序服务和逻辑。

Angular 使用了两个流行的包管理器,即节点包管理器(NPM) 和 Yarn。安装 Node.js 时,默认情况下会安装 NPM。它让你建立或启动你的应用程序,测试,格式检查,等等。脸书使用的是 Yarn,它提供了卓越的性能,对于开发小型项目非常有用。

PHP 提供了许多包和扩展;因此,需要软件来管理它们。PHP 的包管理器是 PEAR、Composer 和 PECL。

PEAR 是 PHP 的第一个包管理器,旨在让您在一个集中的存储库中安装包。此外,PECL 管理所有已编译的扩展,Composer 列出软件依赖关系,同时使安装更容易。

在这些包管理器中,NPM 是用得最多的,但是如果你想开发小应用,Yarn 也是很棒的。

PHP 与 Angular:数据库集成

由于 Angular 是一个客户端 web 框架,它在一个 web 浏览器中执行其代码,而不是数据库服务器或应用服务器。与 JavaScript 一样,Angular 不能直接访问本地计算机。因此,您不能将 Angular 与数据库直接集成。

这里您可以做的是构建一个 RESTful API ,它可以使用服务器端编程语言(如 PHP、Ruby On Rails 等)使用您的数据库来处理写或读请求。接下来,使用 Angular HTTP 请求来访问您的软件端针。另外,如果您使用 MEAN stack 进行软件开发,您可以使用 MongoDB。

然而,PHP 与几个数据库无缝集成,包括 MariaDB 和 MySQL(PHP 所属的 LAMP 堆栈的组件之一)。

此外,您可以找到许多提供轻松数据库集成的 PHP 框架,这样您就可以搜索、排序和过滤数据,并将其呈现给用户。

PHP 与 Angular:线程

线程是给编程语言的指令。线程是可以独立运行的计算机程序的一部分。单线程就像一个有开始、执行和结束的顺序程序。它不是一个完整的程序,但它运行在程序的一个特定部分。

也就是说,多线程程序可以显著提高应用程序的性能。这是因为它们可以在一个程序中同时运行许多任务。

Web 浏览器是多线程应用程序的一个很好的例子。您可以在浏览器下载图像时滚动页面,在下载新页面时在后台打印页面,或者同时播放音乐和动画。

Angular 没有线程来组织你的代码和执行并发进程。相反,它工作在客户端,在一个运行 JavaScript 的浏览器中。

因此,您可以使用 web workers 来实现线程化。它们是与主线程并行创建的后台线程,用于执行繁重的计算并帮助提高应用程序性能。您可以通过 Angular CLI 安装 web workers 并使用它们。

另一种方法是使用 JavaScript 的async属性来推迟解析非关键代码

PHP 是一种多线程编程语言,这意味着它能够并行处理多个任务。还有一个名为“pthreads”的面向对象的 API,它可以提供 PHP 中多线程所需的不同工具。或者,也可以用并行来代替。

因此,PHP 应用程序可以轻松地读取、写入、创建、同步和执行线程、线程对象和工作线程。

PHP 与 Angular:灵活性和可伸缩性

现代应用程序必须能够根据场景进行伸缩,并满足客户需求。你可能会从一个较小的网站或应用程序开始,但你总会想要扩大规模,将你的业务推向更高的高度

可扩展性还让您的应用程序能够调整并高效工作,即使流量很高,尤其是在节日或旺季。

Angular 和 PHP 都能够很好地扩展并支持您的应用程序。

然而,Angular 表现出更高的可扩展性,因此人们广泛使用它来开发企业级的应用程序和网站。此外,它是用 TypeScript 编写的,这有助于您快速检测和删除常见错误,同时使您的代码更干净、更好。

凭借其强大的架构和强大的 CLI ,可轻松实现角度缩放。您还可以轻松地使用 Angular 生成大型单页面应用程序,从而简化单元测试和代码可重用性。此外,angular 还提供了模块,并附带了扩展应用程序和添加新功能所需的核心功能。

尽管最近的版本令人印象深刻,但 PHP 对新兴的客户需求和增长趋势提供的灵活性较低。积极的一面是,PHP 支持许多框架,如 LaravelZendCodeIgniterCakePHPSymfony 等等。

所以,如果你在做一个小项目,可以考虑用 PHP。在投资方面不会花你太多钱;因此,这是初创公司和小规模组织的好选择。

PHP 与 Angular:调试

调试和编程一样,是 web 开发人员的基本技能之一。这是一个消除软件错误并根据程序让它们按照你期望的方式运行的过程。

此外,编写一个没有错误的程序是具有挑战性的。您可能无法控制这一点,但是在特定技术和工具的帮助下,您确实可以删除程序中的错误。

需要一个给你带来竞争优势的托管解决方案吗?Kinsta 为您提供了令人难以置信的速度、一流的安全性和自动伸缩功能。查看我们的计划

Angular 1 或者 AngularJS 在调试的时候很恐怖。但是 Angular 2+,尤其是 Angular 9,引入了很多改进,比如使用树抖动减少包的大小,Ivy 编译器等等。

因此,Angular 9 增强了调试以及开发时与不同组件的交互方式。此外,您可以在 Angular 中触发变化检测,并在用户界面中反映变化,调用方法,评估对象值,并使用实例手动更改它们。

更不用说,您有大量的调试工具和技术,如 Angury、debugger 语句、ng probe、profiler、编辑器和 ide(如 WebStorm 和 VS Code)。

所有这些功能使得 Angular 易于调试。

另一方面,PHP 可能更难调试,尤其是对于服务器端编程语言。停止程序执行、打印变量的值并继续可能需要很长时间。

调试 PHP 程序时,您可能需要执行一些额外的步骤。但是 PHP 也提供了一些调试器,如 ZendDebugger 和 Xdebug,以使调试过程不那么痛苦,并且竞争更快。您还可以将一些 PHP 调试器与 CLI 或 IDE 集成在一起进行调试,如 VS 代码

PHP 与 Angular:安全性

随着技术的进步,网络安全问题也在发展。黑客正在发明更新的方法来利用你的网站和应用,包括你的客户资料。他们不断寻找您系统中的漏洞,注入有害意图并获取访问权限。

不同类型的安全威胁,包括跨站点脚本(XSS)、 DDoS 、网络钓鱼活动、恶意软件攻击和病毒,会渗透并侵入您的系统。结果,公司在声誉、资金和法规遵从性风险方面损失惨重。

这就是为什么你需要格外小心你的应用程序或网站安全。首先要选择一种更安全的编程语言(同时也是一家安全主机提供商)。

Angular 使用 TypeScript,它通过支持接口、原语等类型来确保高级别的安全性。它能够更快地捕捉和消除错误,以确保您的应用和网站的安全。

默认情况下,Angular 认为每个值都不可信。当您通过属性、样式、属性、插值、类绑定或从模板向 DOM 中插入值时,Angular 会快速清理不可信的值以进行修改,并使它们在插入时更加安全。

Angular 还保护您的应用程序免受攻击和漏洞,如 XSS 攻击和 HTTP 漏洞,并提供减轻它们的方法。此外,它强制执行内容安全策略(CSP)和可信类型,以防止 XSS 攻击。你也可以通过写信来报告 Angular 中的漏洞。

相比之下,PHP 只是一种基本的编程语言——也是使用最广泛的语言之一。像几乎所有流行的软件一样,不幸的是,它也不是最安全的。即使 PHP 7 的到来带来了巨大的安全改进,你也不能完全依赖 PHP。一份 2019 安全报告将 PHP 列为世界上最易受攻击的服务器端编程语言的第二名。

在 PHP 程序中,可能会遇到安全问题,如 SQL 注入、XSS、源代码泄露、会话劫持和远程文件包含。

在这种情况下,Angular 可能看起来比 PHP 更安全,但是您最好将其与基于 PHP 的框架进行比较。

PHP 与 Angular:可扩展性

您为 web 开发选择的编程语言必须是可扩展的,以便您可以将其与其他技术集成。

当可重用代码模板可供您包含在应用程序中时,您不必从头开始编写一切。此外,它们非常适合添加特定的功能,比如统一的 UI,包括数据输入、数据呈现等等。因此,它节省了您开发标准功能的时间和精力。

也就是说,Angular 提供了出色的可扩展性,可以与其他技术如一起工作,并通过添加可重用的代码来扩展应用程序的功能。

有许多可用的角度库,包括:

  • 提供高级和灵活用户界面组件的角形材料
  • NGX 引导库提供高适应性,并在桌面和移动设备上提供无可挑剔的性能
  • 用 70 多个用户界面组件填充 NG
  • 具有更高测试覆盖率的 NG 引导程序
  • 面向移动和混合网络应用的 Onsen UI

如果您想要将库集成到您的应用程序中,请安装 NPM 包,然后在您想要使用的地方导入给定的功能。您也可以将 Angular CLI 用于许多已发布的角度库。

类似地,PHP 也是可扩展的,支持许多 PHP 库。尽管用 PHP 编写代码更简单,但为添加每一项功能而编写新代码可能会很乏味。

相反,节省您的开发时间,并使用一些 PHP 库,如:

  • pChart 将文本数据创建为可视图表,如饼图、条形图等。
  • PHP 验证码创建自动化的音频或视频验证码,区分机器人和人类
  • 分派来定义 URL 规则,以便更好地组织您的网站或应用程序

您还可以找到更多的 PHP 库,如 phpAES、PHP Thumbnailer、Mink、ImageWorkshop、Symfony 控制台组件、Faker(已存档,但可用)、Monolog 等等。

PHP 与 Angular:文档

好的文档使开发网站或应用程序时实现编程语言变得更加容易。它就像一个向导,你可以随时回来。

文档不仅对初学者有益,对有经验的开发人员也有益。它包含了关于该语言的完整细节,如何实现它,以及您可能需要的其他实用细节。此外,它还帮助您了解该语言的最新变化。

因此,您会希望使用一种编程语言或任何具有良好定义和可读文档的工具或框架。

Angular 的文档非常出色。通过访问它的官网,你可以点击菜单,看到它的文档是如何以一种精简的方式编写的,就像一个指南。要理解这些文档,你只需要熟悉 JavaScript、CSS 和 HTML。

该文档包括几个关于 Angular with 特性的主题、框架介绍、组件、依赖项、模板、最佳实践、工具、教程等等。你还需要什么?

这些文档将帮助你学习 Angular 框架,并有效地实现它来创建单页面应用程序,甚至是针对企业。此外,指南和教程还下载了示例,这有助于您加快 web 或应用程序的开发。

PHP 也有全面的文档。由于它有一个庞大的社区和用户群,你可以找到许多 PHP 论坛、讨论板、课程、教程和网站。

PHP 文档可在其官方网站上获得。此外,它的在线手册有 10 种语言版本:英语、西班牙语、法语、日语、俄语、德语、土耳其语、罗马尼亚语、巴西葡萄牙语和简体中文。

该文档用简单的语言介绍了 PHP 及其特性、安装和其他部分。开发者也可以在任何页面上发表评论,用例子来阐明复杂的东西。它可以帮助其他人有效地理解 PHP,因为人们可以查看所有添加后永久保留的评论。

尽管这很有帮助,但也造成了在更新的 PHP 版本中解决了哪些注释的混乱。

PHP vs Angular:开发者社区和支持

无论是新手还是有经验的开发人员,一个支持和活跃的开发人员社区总是令人鼓舞的。它让你更好地学习语言,同时也作为一个健康的与业内其他开发者交流的渠道,不管你在世界地图上的什么位置。

所以,在选择编程语言的时候,考虑社区,支持是因素之一。它将使你免于陷入 web 开发的困境,并使你的努力免于白费。

Angular 的社区的故事有点争议,前后矛盾。比如在 2018 栈溢出调查中,Angular 在使用最多的库、框架、工具中排名第二。但根据次年的 2019 栈溢出调查,Angular 滑落至第九位。

尽管有很高的性能和能力,Angular 的社区似乎还在变动。另外,你看不到那么多的论坛、讨论区和网站来寻找 Angular 的信息。

与此相反,自 1995 年以来,PHP 拥有一个庞大的开发者社区。所以遇到疑问可以向开发者寻求帮助,与他们建立健康的职业关系。

PHP vs Angular:市场需求

Stack overflow usage survey for Angular in 2018 and 2019

Stack Overflow survey for 2018 and 2019.

Angular 是全球最先进和使用最广泛的 web 框架之一,因为它提供了出色的服务。根据这个从 2020 年开始的栈溢出调查,Angular 在使用最多的 web 框架中排名第三,证明了其在全球市场的高需求。

由于它被用于开发移动应用程序、网站和本地应用程序,其需求急剧上升。使用 Angular 的巨头有 PayPal、T2、YouTube、Upwork、网飞等等。

对基于 Angular 的网站和应用程序的需求增加,也增加了熟练 Angular 开发人员的工作。在美国,Angular developer 的平均年薪略高于 68300 美元。

说到 PHP,正如本文已经提到的, 79.2% 的网站使用 PHP 作为他们的服务器端语言。在我写这篇文章的时候,WordPress 使用 PHP,并且为超过 41.4% 的网站提供支持。

除了 WordPress,PHP 还支持维基百科、Joomla、Drupal 等等。在 PHP 7 以其令人难以置信的更快速度和无可挑剔的额外改进推出后,对 PHP 的需求增加了很多。

在美国,一名 PHP 开发人员的平均年薪约为 6-8 万美元。

PHP 与 Angular:哪个更适合开发?

比较 PHP 和 Angular 旨在帮助您找到更适合您的 web 或应用程序开发。它们都是不同的,是的,比较它们有时就像比较苹果和水果沙拉。不过话说回来,你还是可以在水果沙拉中加入苹果。

最终,您需要为您的项目选择最佳的框架或编程语言。因此,考虑你的网站或应用的目标、用途、复杂性,以及它是一个小项目还是一个企业级应用。

Angular 适合于开发企业级的应用程序,因为它具有出色的性能、灵活性、可扩展性、可伸缩性,并且使用了 TypeScript。因此,你可以使用 Angular 构建复杂的应用程序,如天气预报、视频流、游戏等等。

另一方面,PHP 是一种基础编程语言。开发人员主要将其用于简单的中小型应用程序。但是你可以随心所欲地使用它,甚至可以使用 Angular。另外,如果你打算开发电子商务网站和 CMS,这可能是一个不错的选择。此外,如果你打算构建学习管理系统(LMS) ,PHP 也是合适的。

因此,你不能在 PHP 和 Angular 之间做出具体的选择。这完全取决于你的项目的需求。因此,请从这两者中选择一个最能满足您所有应用需求的。在某些情况下,你甚至会发现它们是相辅相成的

PHP 与 Angular:相似之处

A Venn diagram showing the similarity overlap between Angular and PHP

Similarities between Angular and PHP.

尽管有一些不同,Angular vs PHP 也有一些相似之处。这些是:

  • 两者都是开源的。因此,您可以根据自己的需求自由使用和修改。
  • 根据您的项目范围,它们适合于 web 和应用程序开发。
  • 两者都有大量的库来扩展它们的功能。
  • Angular 和 PHP 的需求都很高(嘿, Kinsta 的招聘)。
  • 他们都有有用的包管理器。
  • Angular 和 PHP 都是面向对象的,虽然一个是框架,一个是语言。
  • 两者在速度和性能上都很优秀。

PHP 与 Angular:差异

| 参数 | 有角的 | 服务器端编程语言(Professional Hypertext Preprocessor 的缩写) |
| 自然 | Angular 是一个基于类型脚本的框架,用于构建 web 应用程序、网站和桌面应用程序。 | PHP 是一种编程语言。您几乎可以将它用于任何类型的项目,但它主要用于 web 开发。 |
| 服务器端/客户端 | 它在客户端工作。 | 它在服务器端工作。 |
| 前端/后端 | 这是一个前端 web 框架。 | 它主要用于后端 web 开发。 |
| 学习曲线 | 学习 TypeScript 可能有点困难。 | PHP 比较好学。 |
| 区分大小写 | Angular 区分大小写。 | PHP 部分区分大小写。 |
| 易于安装 | 这涉及到几个额外的步骤,而且可能很困难。 | 安装 PHP 更容易。 |
| 技术栈 | 属于均值栈(MongoDB,Express.js,Angular,Node.js)。 | 属于 LAMP 栈(Linux,Apache,MySQL,PHP)。 |
| 数据库集成 | 它不直接与数据库集成。 | 它集成了多个数据库,如 MySQL、MongoDB、PostgreSQL 等等。 |
| 穿线 | 它使用 web workers 进行线程化,以运行并行任务并提高应用程序性能。 | PHP 是一种多线程编程语言。 |
| 灵活性和可扩展性 | Angular 由于其健壮的架构和强大的 CLI 而易于扩展和灵活。 | 对于新兴的客户和市场需求,它的可扩展性和灵活性较差。 |
| 排除故障 | 更容易调试,尤其是在 Angular 9 引入了改进的调试功能之后。 | 在服务器端语言中调试有点困难。 |
| 安全性 | Angular 是用 TypeScript 编写的,它提供了更多的安全性,可以抵御 XSS、HTTP 漏洞等威胁和攻击。 | 安全性较低,容易受到 SQL 注入、XSS、会话劫持等攻击。 |
| 证明文件 | Angular 的文档是用简单的语言和简化的方式编写的。 | PHP 手册记录了编程语言的方方面面。 |
| 社区和支持 | 与 PHP 相比,社区更小。 | 一个庞大的开发者社区。 |
| 使用范围 | 非常适合构建单页企业级应用程序。 | 适用于构建不太复杂、价格合理、较小且动态的网站。 |

PHP and Angular may be entirely different technologies, but determining which one is right for your project can still be confusing 🥴 This post is here to help ✅Click to Tweet

摘要

谨慎的做法是宣布 PHP 或 Angular 胜出。凭借其出色的性能和特性,它们对于构建网站和应用程序都很有效。

Angular 框架非常适合构建复杂且需要可伸缩性的大规模应用程序。

PHP 是个老玩家了,在游戏中还是很厉害的。对你来说,开发一个小型商业网站、一个投资组合网站,甚至一个电子商务商店,都是一个不错的低成本选择。

项目的范围和需求是你需要关注的最重要的因素。当然,PHP 和 Angular 各有利弊,但是应该由您的项目需求来决定哪一个更适合您的用例。

你还在困惑 PHP vs Angular 吗?留下评论,我们会尽力帮你解决!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 与 JavaScript:两种脚本语言的深入比较

原文:https://kinsta.com/blog/php-vs-javascript/

PHP 和 JavaScript 都是 web 开发人员经常使用的脚本语言。但是每一种都有自己的细微差别和使用案例。

在这篇文章中,我们将探讨这两种语言之间的区别,以及在开发项目中什么时候应该使用这两种语言。

让我们先来看看这些语言是如何产生的。

更喜欢看视频版

PHP 与 JavaScript:起源

PHP 是一种开源语言,由拉斯马斯·勒德尔夫于 1995 年发明。这个名字来自个人主页工具——一套 Rasmus 用来跟踪访问他的网站的脚本。

随着 PHP 3.0 的推出,这种语言有了一个相反的缩写: PHP:超文本预处理器。现在简称为 PHP。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

JavaScript 由网景公司的 Brendan Eich 于 1995 年创造,旨在为网络带来交互性。最初称为 Mocha,后来改名为 LiveScript,后来又改名为 JavaScript,以利用 Java 语言的流行性。

今天 JavaScript 的官方名称是 ECMAScript ,但是大多数人仍然这么称呼它。

所以,这两种语言已经存在了一段时间。

现在我们来看看它们的其他相似之处。

你知道 JavaScript 最初被称为摩卡吗?或者 PHP 这个名字来源于个人主页工具?🤔在这里了解更多关于这些流行脚本语言的信息⬇️ 点击发布

PHP 和 JavaScript 的相似之处

语言类型

PHP 和 JavaScript 都是脚本语言。这与 Java 或 C++等“纯”编程语言相反。

脚本语言倾向于解释而不是编译。这意味着它们通过第三方而不是直接被翻译成机器代码。这对它们的运行时间有影响。

可以这样想:想象你想把一个网页从你的母语翻译成纳瓦霍语。如果你不懂纳瓦霍语,你需要一个翻译来帮助你,而翻译会花更多的时间。

这就是编译语言比解释语言更快的原因。

变量的类型

另一个共性是 PHP 和 JavaScript 都是弱类型

这意味着当你用任何一种语言创建一个变量时,你不需要指定它的数据类型:它是假定的。

因此,您可以用 PHP 编写以下代码:

$x = 'Hello world';

$y = 'Bonjour le monde'; 

或者在 JavaScript 中:

var x = 'Coding is fun';

let y = 'No, honestly';

在这两种语言中,这些变量将被识别为字符串(字符集)。

这与像 Java 这样的强类型语言不同,在 Java 语言中,当你声明变量时,T2 必须告诉你使用的是什么类型的变量:

**int** x = 5;

PHP 和 JavaScript 都是动态类型化的:换句话说,你可以通过在你的代码中重新定义它来容易地改变类型:

$x = 5;

在 PHP 中,$x 现在是一个整数。

x = 3.14195;

在 JavaScript 中,x 现在是一个数字。

因为 PHP 或 JavaScript 中没有明确定义类型,所以您需要函数来告诉您正在使用什么数据类型。

JavaScript 有一个类型的函数来做这件事。

PHP 有 gettype 函数来返回变量的类型。gettype 的一个新的改进版本, get_debug_type ,是 PHP 8 版本的一部分。

类别和对象

PHP 和 JavaScript 最初都不是面向对象的。随着语言的发展,面向对象被加入其中。

在 2004 年的中,PHP 5 提供了创建对象和类的能力。

JavaScript 直到很久以后才使用对象或类。随着 ES6 的引入,他们在 2015 年进入了这种语言。

一个是一个通用的对象分组。

一个对象是一个具有属性(特征)和方法(行为)的实体。

游戏《龙与地下城》(D & D) 提供了一个很好的类比。

一个玩家角色对应一个对象。每个角色都属于一个角色类别,如野蛮人、盗贼或巫师。

对象可以有您想要定义的任意数量的属性。

因此,角色的属性可能包括:

  • 名字
  • 人种
  • 能力(力量、智力、智慧、灵巧、体质和魅力)
  • 个性类型(如大胆、胆小、好奇)
  • 结盟(合法、混乱、善良、邪恶)

您可以使用对象方法来检索有关对象的信息。

下面是一个 PHP 代码的类和对象定义的例子:

 <?php

class Sorcerer {

// Define properties

public $name;

public $race;

public $intelligence;

// Constructor function for the object

// takes 3 arguments, name, race and intelligence

function __construct($name, $race, $intelligence) {

$this->name = $name;

$this->race = $race;

$this->intelligence = $intelligence;

}

# Define object methods

// Get the name

function get_name() {

return $this->name;

}

// Get the race

function get_race() {

return $this->race;

}

// Get intelligence

function get_intelligence() {

return $this->intelligence;

}

} // end Sorcerer class

// Create a Sorcerer

$yensid = new Sorcerer("Yen Sid", "Human", 18);

# Output the object properties in the browser

echo $yensid->get_name();

echo "<br>";

echo $yensid->get_race();

echo "<br>";

echo 'Intelligence: ';

echo $yensid->get_intelligence();

?> 

当这段代码被添加到一个 HTML 文件中时,浏览器中的输出应该如下:

Yen Sid

人类

智力:18

您还可以定义方法,这些方法是对象采取的或者已经对它们执行的操作。

在 D&D,他们可能是:

  • 惊喜出击()
  • 解除陷阱()
  • 施法()
  • rexistpoison_)

当一个方法在一个对象上运行时,结果可能依赖于该对象的属性。因此,一个巫师的学徒对象将不能像一个老练的巫师对象那样有效地施法。

市场需求

PHP 和 JavaScript 的另一个共同点是这两种语言的开发者都很吃香。

使用 JavaScriptPHP 的开发者也得到很好的补偿。

在美国,他们平均年收入约为 8 万美元。

PHP Developer Salaries, Glassdoor.com

PHP Developer Salaries, Glassdoor.com

JavaScript Developer Salaries, Glassdoor.com

JavaScript Developer Salaries, Glassdoor.com

证明文件

对于 PHP 或 JavaScript 的新手来说,不太好的消息是这两种语言的官方文档都不太用户友好。它是为有经验的开发人员而不是初学者编写的。

您可以在此处查看每种语言的文档:

JavaScript 教师 Chris Ferdinandi 感叹缺少好的 JavaScript 文档,说这是他花了这么长时间才掌握这门语言的原因之一。

此时,您可能想知道,“PHP 和 JavaScript 之间有什么区别?”其实有好几个。

PHP 和 JavaScript 有什么区别?

服务器端与客户端脚本

PHP 是一种服务器端脚本语言。这意味着它运行在网络服务器上,而不是客户端机器上。

服务器端编程对于向用户交付动态内容(通常来自数据库)非常有用,比如欢迎消息(“嗨,Claire!”)当用户登录时。

更严重的是,服务器端脚本被用于电子商务。例如,有超过 100 个 WooCommerce 扩展通过 API(应用编程接口)连接到不同的支付提供商来处理交易。

JavaScript 是一种客户端语言,所以它可以在用户的笔记本电脑、手机或平板电脑上运行。

JavaScript 可以操纵代表文档对象模型的 DOM ,你可以把它想象成一个由网页的 HTML 形成的树状结构。

如果你曾经遇到过一个 accordion 或 toggle,可能是作为一个 FAQ 插件的一部分,你已经看到了客户端 JavaScript 的作用。当您单击或点击一个问题时,JavaScript 事件处理程序会打开或关闭 CSS 显示或可见性属性,显示或隐藏相关答案。

前端与后端

PHP 运行在网站的后端——访问者看不到的部分!在 WordPress 中,这意味着 PHP 在 web 服务器和 WordPress admin 中完成所有工作。

JavaScript 传统上在前端运行,但这在 2009 年发生了变化,当时推出了后端运行时 Node.js 。今天,JavaScript 是真正的全栈语言

与其他语言的组合

由于 PHP 是后端语言,它是 LAMP 堆栈的一部分(Linux, ApacheMySQL ,PHP)。

PHP 可以和 HTML 合并。通过检查包括 WordPress 在内的许多 web 应用程序的代码,你会发现这一点。

这里有一个来自二十二十主题index.php 文件的例子:

 <header class="archive-header has-text-align-center header-footer-group">

<div class="archive-header-inner section-inner medium">

<?php if ( $archive_title ) { ?>

<h1 class="archive-title"><?php echo wp_kses_post( $archive_title ); ?></h1>

<?php } ?>

<?php if ( $archive_subtitle ) { ?>

<div class="archive-subtitle section-inner thin max-percentage intro-text"><?php echo wp_kses_post( wpautop( $archive_subtitle ) ); ?></div>

<?php } ?>

</div><!-- .archive-header-inner -->

</header><!-- .archive-header --> 

然而,如果你在 web 应用程序中混合使用 PHP 和其他后端语言,那么维护它们会更加困难。另外,你不仅要知道 PHP,你还必须学习并精通其他语言!

JavaScript 开发人员在编写代码时有更多的自由。他们可以将这种语言与 HTML、XML 和 Ajax 结合使用。

区分大小写

区分大小写是在语言中命名实体时大写字母和小写字母之间的区别。

PHP 部分区分大小写。大小写对某些事情很重要,但对其他事情不重要。

PHP 变量是区分大小写

所以如果你在 PHP 中创建一个变量:

$dog = "chihuahua";

然后在代码中获取$DOG 的值,这是行不通的。

然而,PHP 函数是不区分大小写的

**如果用 PHP 创建这个函数:

function dogFetch() {

// your code to run when the function is called

}

并且稍后在您的代码中调用 DogFetch(),您的函数仍将运行。

然而,这不是好的编码实践,因为它是不一致的。

另一方面,JavaScript完全区分大小写。因此,名为 beagle、Beagle 和 BEAGLE 的变量都是互不相同的。

句法

语法是支配语言的一套规则。这包括词序、语法和标点符号。

在英语中,我们可以说:

我慢慢地喝汤。

但如果你是尤达,你会这么说:

我慢慢地喝汤。

为什么?语法不同。同样的词,不同的顺序。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

The Yoda-Speak Generator

The Yoda-Speak Generator

一些语言使用看起来一样的词,但它们有不同的意思。

Lui in French means “him” in English

Lui in French means “him” in English

Lui in Italian means “he” in English

Lui in Italian means “he” in English

如果我们用错了词,人类是可以原谅的,但是计算机是非常字面上的。如果我们在编程语法上犯了错误,计算机通常不知道我们的意思,这通常会导致错误。

对于 JavaScript 和 PHP,它们对于单行代码注释都有相同的双正斜杠语法:

// This is a comment

但是 PHP 还有另一种形式的注释语法:

# This is a comment

如果您尝试在 JavaScript 中使用 PHP 注释语法,您会得到一个错误:

# This is a Comment

Uncaught SyntaxError: private fields are not currently supported

JavaScript Uncaught SyntaxError

JavaScript Uncaught SyntaxError

其他语法错误对于 JavaScript 和 PHP 都是常见的,例如:

  • 缺少分号(;)在一行代码的末尾。
  • 条件语句不使用一对花括号{}。

变量和常量定义

正如我们前面看到的,JavaScript 和 PHP 有不同的声明变量的方式。

他们也以不同的方式定义常数

JavaScript 使用以下语法:

const x = 6;

对于这样一个简单的常数,它的值以后不能改变。

而 PHP 对常量使用 define()函数。

define(*name*, *value*, *case-insensitive*)

按照惯例,PHP 常量是大写的。一个例子是:

define('MONSTER', 'Sulley');

括号中的前两个参数不言自明。

第三个,不区分大小写,默认值为 false 。只有当设置为时,常量才不区分大小写。

那就是:

define('MONSTER', 'Sulley', true);

数组

数组是可以存储多种内容的变量。

在 PHP 中,数组是关联数组或者有序映射。也就是说,数组中的项具有相关的键和值对。

<?php

$array(

key => value,

key2 => value2,

...

)

下面是一个不太抽象的例子,其中键是名,值是姓。

<?php

$array = array(

"Frodo" => "Baggins",

"Sam" => "Gamgee",

"Merry" => "Brandybuck",

"Pippin" => "Took",

);

为了方便使用,你可以将 PHP 对象转换成数组,而将数组转换成对象

然而,JavaScript 只能拥有索引号为的数组。例如:

var mountains = [

"Everest",

"Kilimanjaro",

"Fuji"

];

要检索一个值,你必须引用数组索引,从 0 开始。

var mountain = mountains[1];

JavaScript 不支持带有名为索引的的关联数组。

需要为您的客户站点提供超快的、安全的、开发人员友好的托管服务吗?Kinsta 是为 WordPress 开发者设计的,提供了大量的工具和强大的仪表板。查看我们的计划

数据库集成

PHP 可以做得很出色的一件事是连接到数据库。PHP 与 WordPress 都使用的 MySQL 或 MariaDB 集成得特别好。许多 PHP 框架也提供了简单的数据库集成。

使用数据库有助于搜索、排序和筛选信息以呈现给用户,例如在线商店中的产品。

从历史上看,JavaScript 不与数据库集成,尽管这种情况正在开始改变。

PouchDB 是 JavaScript 数据库的一个例子。

PouchDB open source JavaScript database - php vs javascript

PouchDB open source JavaScript database

穿线

线程指的是编程语言可以处理的指令。

PHP多线程,意思是可以并行处理多条指令。

相反的是类似 JavaScript单线程语言,一次只能处理一个命令。

为了说明线程,开发人员 Samim Yaquby 将比作一家为顾客服务的咖啡店

对于只有一个咖啡师的小咖啡馆来说,咖啡师先为顾客服务更简单的订单,一次一个,更容易也更有效率。这类似于 JavaScript 的单线程。

相比之下,大型星巴克最有可能让几个咖啡师同时完成同样的订单。这与 PHP 的多线程方法相呼应。

速度

一般来说,在相同的硬件上,JavaScript 比 PHP 执行得更快。然而,因为 JavaScript 在客户机上运行,所以如果客户机老旧且运行缓慢,就会对执行时间产生连锁反应。

自从 PHP 7 发布以来,PHP 的速度有了突飞猛进的提高,这要归功于一个新的引擎,它将性能提高了一倍,并改善了内存消耗。与 PHP 5.6 相比,PHP 7.0 可以处理两倍多的请求,并且每个 7.x 版本的性能都有进一步的提高。

当你构建实时应用程序,比如聊天机器人或游戏时,PHP 也比 JavaScript 运行得更好。

带有即时编译器的 PHP 8 的发布有望让 PHP 变得更快。

包管理器

每种语言都有自己的包管理器来管理:第三方可重用代码模块,为项目增加额外的功能。一些包依赖于其他包来运行,所以它们被称为依赖

PHP 有两个包管理器,PEAR 和 Composer,它们可以在 Packagist 仓库上下载 PHP 包。

JavaScript 有几个知名的包管理器,包括 npmYarnBower

JavaScript package managers - php vs javascript

JavaScript package managers

其中, npm 最受欢迎,全球有超过 1100 万开发者在使用它。

网络上的使用

PHP 是当今网络上使用最多的服务器端语言,轻松击败了近 80%使用它的网站的竞争对手。

W3Techs server-side programming languages - php vs javascript

W3Techs server-side programming languages

虽然 PHP 非常流行,但 JavaScript 在网站上几乎无处不在,97%的网站都在使用它。

W3Techs client-side programming languages - php vs javascript

W3Techs client-side programming languages

PHP 是用来做什么的?

PHP 的用途非常广泛。

它最出名的可能是创建动态网页。据 BuiltWith 称,PHP 被超过 3400 万个网站使用,它为一些最知名和收入最高的网站提供支持,包括耐克、Salesforce 和沃尔玛。

Websites using PHP with estimated $1m+ Sales Revenue

Websites using PHP with estimated $1m+ Sales Revenue

如果您的项目需要安全的用户认证,PHP 是一个完美的选择。这包括 cookie 和会话处理、用户名和密码认证以及双因素认证

如前所述,PHP 非常适合处理数据库,因为它可以与许多数据库进行交互。它还内置了处理用户输入的数据安全性,以防范像 SQL 注入攻击这样的威胁。

PHP 也常用于构建实时应用程序,如即时消息。

最后,即使你在前端完成大部分工作,你也需要一个服务器后端。PHP 是一个理想的选择,因为这是它的初衷。

JavaScript 是用来做什么的?

JavaScript 已经变得如此流行,也许正确的问题是,“JavaScript 不用于什么用途?”

除了网站和网络应用程序,JavaScript 还被用于构建以下所有内容:

  • 移动应用
  • 网络服务器
  • 比赛
  • 幻灯片
  • 聊天机器人
  • …甚至是可编程无人机

Super Chrono Portal Maker, an HTML5 and JavaScript game

Super Chrono Portal Maker, an HTML5 and JavaScript game

JavaScript 可以和 PHP 一起用吗?

答案是肯定的,绝对的。

一个常见的例子是使用 web 表单,在将用户输入保存到数据库之前对其进行验证是非常有用的。

您可以使用 JavaScript 进行客户端验证,例如检查电子邮件的格式是否正确。接下来,您可以使用 PHP 进行服务器端验证,例如检查电子邮件是否存在于您的数据库中。

WordPress 如何使用 JavaScript 和 PHP

传统上,WordPress 两种语言都用,但是 PHP 比 JavaScript 用得多。随着古腾堡编辑的引入,这种情况开始改变。

在 2015 年美国世界语言营的马特·莫楞威格演讲中,他通过鼓励观众来展示 JavaScript 将会变得多么重要

“学 JavaScript,深入。”

就目前情况来看,这是两种语言在 WordPress 中的用法。

PHP 用于主题模板文件、循环、认证、验证和数据库访问。

JavaScript 增强了主题和插件的交互性、客户端验证和事件处理。最值得注意的是,块开发需要一些 JavaScript 知识,因为块依赖于 React JS 框架。

学习 PHP 和 JavaScript

因为它们相当容易学,没有理由你不能既学 PHP 又学 JavaScript。

这两种语言依赖于某些编程基础,如变量、循环、条件语句、范围和对象。

因为它是如此成熟和流行的语言,所以学习 PHP 很容易。

由于 PHP 是一种服务器端语言,你需要一个服务器来编写代码。这可能是一个真正的 web 服务器,或者是一个 web 服务器的模拟,比如一个本地开发环境。一些例子是德夫金斯塔,XAMPP,WAMP,或 MAMP。

通过在浏览器控制台中练习,您可以很容易地开始学习 JavaScript。

在 Chrome 浏览器上,你可以通过 Windows 上的 Control+Shift+J 快捷键,或者 Mac 上的 Command+Option+J 来访问控制台。

A simple Hello World program in Chrome’s JavaScript console

A simple Hello World program in Chrome’s JavaScript console

JavaScript 变得更难掌握的地方在于其生态系统的庞大规模。

JavaScript 语言已经从普通的 JavaScript 扩展到了大量的框架。Angular、Vue、、jQueryReact 只是现在存在的许多应用中的一部分。

Some JavaScript frameworks

Some JavaScript frameworks

对于初学者来说,一个很好的资源来自 MDN Web Docs 的 JavaScript 文档

Chris Ferdinandi 因用普通 JavaScript 教育人们而出名,他说 JavaScript 只是在他学会 jQuery 后才真正为他所用。

他给 JS 新手的建议是:

“不要拘泥于学东西的顺序。不要浪费时间去挑选完美的东西,因为没有完美的东西。”

在不理解 HTML 和 CSS 的基础知识的情况下,只需注意 JavaScript 框架的闪亮对象综合症。HTML 支撑着网络上的一切,如果被过于急切的 JavaScript 开发人员处理不当,它可能会崩溃。

PHP 与 JavaScript —对照表

| PHP | JavaScript |
| 服务器端脚本 | 客户端脚本 |
| 在后端使用 | 在前端使用(现在是 Node.js 的全栈) |
| 仅与 HTML 结合 | 结合多种语言 |
| 部分区分大小写 | 完全区分大小写 |
| 语法差异,例如允许# for 注释 | 语法差异,例如不允许# for 注释 |
| 用$前缀声明的变量 | 用 var 或 let 关键字声明的变量 |
| 有关联数组 | 没有关联数组 |
| 与许多数据库集成 | 数据库支持差或不存在 |
| 多线程 | 单线程的 |
| 快速如果 PHP 7.0 或以上 | 通常比 PHP 快 |
| 使用 PEAR 和 Composer 包管理器 | 使用 npm、Yarn 和 Bower 包管理器 |
| 如果 PHP 版本大于 7.x,运行速度很快 | 通常比 PHP 快 |
| 在大约 80%的网站上使用 | 几乎在所有网站上使用 |

想深入了解两种最流行的脚本语言吗?👩‍💻在这里发现它们的相同点、不同点和深入的比较图表!

摘要

在这场 PHP 与 JavaScript 的较量中,没有真正的赢家。他们都有自己的长处和短处。

PHP 稳定可靠,而 JavaScript 已经成为最酷的产品。但这并不意味着一个比另一个好。

无论你为下一个项目选择哪一个——都有可能!—如果你花时间去理解这门语言,你可以肯定你会建立一个让你的用户高兴的网站或应用程序。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。**

PHP 与 Python:两种语言的详细比较

原文:# t0]https://kinta . com/blog/PHP-vs-python/

软件开发领域正在进行一场战斗,PHP vs Python。而且似乎永远不会结束。

开发一个成功的网站或应用程序始于选择一种可靠的编程语言。

随着生产高性能、可伸缩、可靠、安全和灵活的 web 产品的激烈竞争,选择明智的技术基础变得很有必要,包括编程语言

虽然有经验的程序员有他们的个人偏好、逻辑观点和最喜欢的软件开发工具,但初学者和项目经理在选择开始使用的编程语言时会遇到麻烦。

有很多编程语言,比如 Java、Python、 JavaScript 、PHP、Ruby 等等。,各有优缺点。您还需要根据您独特的项目需求、时间表、最终目标、预算以及其他因素来缩小编程语言的选择范围。

如果你已经加入了这场 PHP 与 Python 的战争,并且不知道应该站在哪一边,那么这篇文章可以帮助你。

让我们来看看在我们的比较标准中,哪些胜出,哪些适合您的项目需求。

PHP 与 Python:它们是什么?

在我们开始比较这两种编程语言之前,首先了解它们是什么是很重要的。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

给你!

PHP 是什么?

Code written in PHP

PHP

超文本预处理器(PHP)是一种广泛用于服务器端 web 开发的开源脚本语言。

由丹麦裔加拿大程序员拉斯马斯·勒德尔夫于 1994 年创建的 PHP 最初被命名为个人主页。他在 1995 年 6 月发布了第一个 PHP 版本(PHP 1.0)。

从那时起,对后续的 PHP 版本进行了各种开发,我们有了 PHP 8 作为 2020 年 11 月发布的最新 PHP 版本。

PHP 项目的吉祥物是一只蓝色的“elephant”(大象),侧面写着它的 logo。文森特·庞捷是这个吉祥物的设计者。

使用在守护程序、模块或可执行 CGI(公共网关接口)中实现的 PHP 解释器在 web 服务器上处理 PHP 代码。

PHP 代码的解释和执行可以是任何类型的数据,比如二进制图像。

特征

PHP 的特性包括:

Many features of PHP

Features of PHP

  • 开源:由于 PHP 是开源的,任何人都可以下载并使用它来完成他们的 web 开发目标。这使得世界各地的开发人员能够检查代码,发布错误,并对编码和错误修复做出贡献。
  • 简单易用 : PHP 简单易用,这也是很多开发者偏爱这种编程语言的首要原因之一。

它的语法与 C 语言非常相似,具有良好的组织和逻辑结构。与许多脚本语言相比,学习 PHP 和钻研编码也很容易。

  • 多数据库 支持 : PHP 支持各种数据库,包括 MySQL ,Oracle, PostgreSQL 等。,以及数据库集成。
  • 跨平台兼容性:可以运行在几乎所有操作系统上,包括 Windows、Mac、Linux、Unix。PHP 脚本也可以在电脑、笔记本电脑、平板电脑和手机等设备上运行。此外,PHP 还兼容各种服务器,如 IIS、、Apache 等。
  • 灵活 : PHP 提供了更大的灵活性和嵌入能力。它可以很容易地与 JavaScript、 HTMLXML 等集成。
  • 错误报告和异常处理 : PHP 支持一些预定义的错误报告常量来生成错误警告。此外,它有助于异常处理来显示错误并修复它们。
  • 高效快速的性能: PHP 脚本可以表现出比很多脚本语言如 JSP、PERL、ASP.NET 等更好的性能。它的数据加载和数据库连接也更快,以实现高效的数据库管理、邮件功能和服务器管理。
  • 实时监控:提供用户最近的登录详情。您还可以访问 CPU 和内存使用数据。
  • 面向对象的特性:PHP 中的面向对象特性有助于提高速度,并提供继承、数据封装等附加特性。
  • 更多特性: PHP 提供了魔法常数、正则表达式、PDO 类、支持 cookies、shell 命令行执行等等。

它是用来做什么的?

这种服务器端脚本语言可以生成动态页面内容,在服务器上创建文件,打开、写入、读取、关闭或删除文件。

PHP 是数据库友好的,这就是为什么它可以毫不费力地添加、修改或删除数据库中的数据。

除此之外,PHP 还可以从表单中收集数据,支持 cookies,执行数据加密,以及控制用户访问。

根据 W3Techs 的一份报告,截至 2021 年 3 月 19 日,互联网上 79.2%的网站使用 PHP 作为服务器端编程语言。

一些使用 PHP 的流行网站有 WordPress.com、Facebook.com、Wikipedia.org、Zoom.us、Microsoft.com、Canva.com、Salesforce.com 等等。

应用程序

  • 基于网络的应用程序和网页:现代的网页和应用程序必须提供更高水平的定制、高度交互式和友好的用户界面、支持无缝集成,并且除了提供快速性能之外,还能够实现安全的在线交易。

PHP 使用一个三层架构,它线性地工作在您的服务器、数据库系统和浏览器上,以满足这种需求。

  • 图形设计和图像处理: PHP 可靠的管理文本内容和图形设计和图像处理。它支持与许多库的集成,如 ImageMagick、GD 库、Imagine 和更多基于 PHP 的应用程序。

它允许用户旋转,调整大小,裁剪,添加水印,创建缩略图,并提取各种格式的图像,如 PNG,GIF,JPEG,WBMP 和 XPM。

  • Web CMS: PHP 扩展了对各种数据库的支持,通过协议与不同的服务交互,包括 IMAP、POP3、HTTP、COM、SNMP 等。

因此,创建像 WordPress、Moodle、Drupal、Joomla 等 web 内容管理系统是很常见的。

  • 基于 GUI 的应用程序:你可以使用 PHP-GTK 2 和 ZZEE PHP GUI 创建一个基于图形用户界面(GUI)的应用程序,它们允许 PHP 脚本并将你的代码编译成一个。exe 文件,可以独立运行。
  • 数据表示:使用 PHP 的 Image_Graph 等工具,可以创建不同的数据表示,如图表、图形等。它在利用各种形式的数据表示的电子商务网站和应用程序中非常有用。
  • 创建 flash 元素:您可以创建 flash 元素,如渐变、形状、位图、按钮、文本、变形、动画、动作、电子邮件表单、登录表单等。,使用基于 PHP 的开源库(如 Ming)。
  • 构建电子商务应用程序:使用基于 PHP 的框架如 CodeIgniter,构建电子商务应用程序很容易。这对各种规模的企业都很有用,从初创企业到大型企业。使用 PHP 创建的电子商务平台有 Magento、PrestaShop、OpenCart 等等。

这都是关于 PHP 的。

现在让我们来看看 Python,并为这两种语言之间的直接竞争奠定基础。

PHP vs . Python...你站在哪一边?🥊💥 点击推文

Python 是什么?

Python

Python 是一种面向对象的、解释性的高级编程语言。

它由吉多·范·罗苏姆开发并于 1991 年发布。随着各种版本和颠覆版本的发展,我们现在有了 Python 2 和 Python 3,最新的是 Python 3.9.2,最近于 2021 年 2 月 19 日发布。

Python 的设计理念关注代码的可读性,并使用重要的缩进和动态语义。它是动态类型的,支持垃圾收集和各种编程范例,如结构化(主要是过程化)、函数式和面向对象编程。

因此,它有助于程序员用逻辑清晰地编码,对大型和小型项目都很有用。由于其广泛的标准库列表,Python 也被称为“包含电池”的编程语言。

特征

Python 的主要特性是:

Explaining various features of Python

Features of Python

  • 免费开源: Python 在其官方网站可以免费下载使用。您也可以使用其公开可用的源代码,并根据您的需要对其进行修改。
  • 易学易编码:这种高级语言比其他语言更容易学习,包括 Java、 JavaScript 、C++、C 等。在其中编写程序不需要你管理内存或者记住整个系统架构。

它也是开发人员友好的,使用更简单、不太复杂的语法和简单的英语和数学。因此,使用 Python 编码变得毫不费力,这也是许多开发人员喜欢它的原因。

  • 面向对象:这是 Python 的主要特性之一,它支持对象封装、类、构造和析构等概念。
  • 可扩展:这种语言不是在核心中构建全部功能,而是被设计成可以用各种模块扩展。由于紧凑的模块化,开发人员发现很容易将可编程接口添加到现有的应用程序中。也可以用 C/C++写一个 Python 代码,编译一下。
  • 解释语言: Python 代码是逐行执行的,类似 Java、C++、C,一次执行一个,因此不需要代码编译,使得调试更加容易,节省时间。
  • 可移植: Python 代码是可移植的。如果您有用于 Windows 操作系统的 Python 代码,并且希望在 Mac、Linux 或 Unix 等其他操作系统上运行它,那么无需更改代码就可以实现。
  • 动态类型:变量类型是在运行时决定的,而不是在开始时。因此,您不需要指定变量类型,如 int、char、long、double 等。它减少了代码行,使编程更加简单。

例如,在 Java 中,你写 int x = 5

但是在 Python 中,你会写 x = 5。就是这样。这个“x”可以是任何类型的变量。

  • 压缩标准库:它的标准库容纳了一套丰富的函数和模块,你不用从头开始写每一段代码。您可以简单地将可用代码用于单元测试、正则表达式、web 浏览器、CGI、图像处理等应用程序。

它是用来做什么的?

Python 有很多用途,比如:

  • 创建 web 应用程序: Python 是 web 开发的最佳编程语言之一,因为它为您提供了一系列选项。它支持 Pyramid 和 Django 等框架,Bottle 和 Flask 等微框架,以及 Django CMS 和 Plone 等高级 CMS。

这些框架灵活、可伸缩、安全,并带有各种模块和标准库,可用于简化任务,如数据库交互、内容管理等。它的标准库也支持像 HTML、XML、FTP、IMAP、POP 等互联网协议。

此外,它的包索引还有其他有用的库,包括 Requests、Feedparser、Beautiful Soup、Paramiko 和 Twisted Python。

  • 机器学习(ML)和人工智能(AI): AI 和 ML 项目不同于传统的软件项目和模型。它们需要不同的技能、技术和工具,以及稳定可靠的语言。Python 具备这样的功能和灵活性来处理独特的项目需求。

它的简单性、平台独立性、资源丰富的库、一致性和活跃的开发社区加强了人们在他们的 AI 和 ML 项目中对 Python 的使用。

以 AI 和 ML 闻名的 Python 包包括用于复杂计算的 SciPy,用于可视化数据的 Seaborn,用于数据分析的 Pandas,用于并行计算和记录工作会话的 IPython tensor flow,以及用于 ML 的 Keras,用于高级科学计算的 NumPy 等等。

  • 桌面 GUI 创建:由于 Python 具有模块架构,可以在多种操作系统上工作,所以可以使用高效的文本处理工具、框架或 Python 模块来创建桌面 GUI,如 PyQt4、PyQt5、WxPython、PyGtk、PySide、PyGUI、Tkinter 等。
  • 软件开发和快速原型制作: Python 应用和软件包旨在简化软件开发过程。Python 可以帮助您开发 web 和桌面应用程序,以及能够进行数字和科学计算的复杂应用程序。

开发人员广泛使用 Python,甚至用于构建控制、管理和测试。对于这些单独的目的,您可以分别使用 SCons、Trac 或 Roundup 以及 Apache Gump 或 Buildbot。

  • 其他用途: Python 用于使用 PySoy 等库的游戏开发,py soy 是基于 Python 的 3D 游戏引擎。这就是为什么视频游戏开发商在游戏中使用 Python,如战地 2,文明-4,等等。

Python 还用于构建企业级或业务应用程序,要求更高的可伸缩性、可扩展性和可读性。为此,可以使用支持 Python 的工具,如 Odoo 和 Tryton。

它用于 Boo、Cobra、Swift、CoffeeScript 等的语言开发。Python 是 Oss 背后的语言,就像 Linux 发行版的“无处不在的安装程序”。你还可以控制大数据,连接到数据库,执行网页抓取,利用图形设计和图像处理等。,使用 Python。

查看我们的 Python 教程 综合列表,了解学习 Python 的最佳方法!

PHP 与 Python:深入比较

In-depth comparison of PHP vs Python

PHP vs Python comparison

既然我们已经讨论了 PHP 和 Python 这两种语言,以及它们的特性和应用,现在是时候将它们与下面解释的各种参数进行比较了。

它将帮助您了解哪种语言更适合哪种用途,使用它们有多有效和容易,以及哪种语言可以为您的开发工作和时间带来更好的结果。

让我们开始这场拉锯战——PHP vs . Python。

哪个更容易学?

 PHP vs Python: Which is easier to learn?

Easier to learn

尽管 PHP 是一种通用语言,但它非常适合开发更复杂的 web 应用程序。它的语法有点类似于 Java、C、C++和 Perl。如果条件,则函数返回,而对于循环也是类似的。

在 PHP 中,变量名区分大小写。它用分号终止语句,并将空白和换行符视为自由格式语言。它要求你给变量加上前缀 $,使用花括号和- >操作符来表示一个方法。

总的来说,学习 PHP 和里面的代码需要相当长的时间,尤其是新手。但是他们的开发者社区正在努力让它变得更容易。

例如,PHP 4 包含了改进的面向对象编程,具有更好的抽象,使任务更容易。

另一方面,Python 更容易学习,即使对于初学者也是如此。这种脚本语言被设计成易于阅读,具有整洁的格式、更简单的语法和简单的英语单词,而不是标点符号。

Python 不使用花括号来分隔块。相反,它使用空白缩进。这为其语义提供了准确的视觉结构。Python 也包含了分号的罕见用法,并且有更少的特殊情况和语法异常。

这些属性使得 Python 编码易于学习和编写,长度更短,调试更简单。除此之外,它还为错误留下了空间,因为在出现小错误的情况下,主代码不会中断。这也是为什么各种编程课程都要用 Python 来教授初学者编程基础知识的原因。

结论:Python 是明显的赢家。

易于安装

PHP vs Python: Which is easier to install?

Ease of installation

PHP 安装相对容易。它可以在 Windows、Linux 和 macOS X 上很好地安装和运行。你也可以在世界各地的许多共享主机网站上找到它,费用较低。

如果你想建立一个小的应用程序,PHP 将是一个很大的帮助。

相比之下,Python 可能很难安装。在已经安装了另一个 Python 版本的 macOS X 上,这也变得更加困难。

另一个缺点是现有的 Python 版本已经过时,因此不适合开发应用程序。即使你尝试安装新的 Python 包,你也需要安装新的 Python 版本。

我们知道这可能会令人沮丧。

除此之外,在 Windows 上安装 Python 可能会有点棘手。为了降低遇到问题的风险,可以使用一个包管理器,比如 Chocolatey。

但是如果你是 Linux 用户,你不会发现在你的计算机系统上安装 Python 有任何问题。

结论:PHP 在安装方面胜出。

性能和速度

Stopwatches comparing PHP and Python in speed

Performance and speed

根据 2018 年 12 月发布的 Unbounce 报告,79%面临网站速度和整体性能问题的在线购物者表示,他们不会再次访问或光顾该网站。

这表明你开发的所有应用和网站都必须响应迅速,加载速度更快——最多 2-3 秒。

虽然速度和性能会因硬件资源、内存、存储空间、代码逻辑、硬盘访问时间、数据路径宽度等各种因素而有所不同,但您使用什么编程语言也是一个需要考虑的因素。

因此,比较 Python 和 PHP 的速度和性能是至关重要的。

PHP 的早期版本很慢,包括 PHP 5.x,它需要花费大量的时间来执行代码。看起来他们的开发者社区已经在用 PHP 7.x 提高编程语言的性能和速度方面做了大量的工作。

它比许多编程语言都要快,包括 Python。Zend Engine 3.0 也随 PHP 7 一起发布,使得这种编程语言比之前的版本快了 2 倍。

相比之下,Python 的代码编译过程被设计得更快,即使没有安装缓存系统。当一个文件被创建和/或修改时,它将这个代码转换成字节码。它比引入 PHP 7.x 之前的 PHP 要快得多。

例如,如果您正在开发一个银行系统,它每天可以接收大量的流量,它需要非常快。更短的延迟会极大地影响系统性能。在这种情况下,推荐使用 PHP 7 而不是 Python。

但是,如果您想构建一个速度和时间延迟没有太大影响的简单应用程序,您可以同时使用 Python 和 PHP。

结论:PHP 在速度和性能上胜出。

图书馆支持

开发人员可以将库与 web 框架集成起来,以促进快速开发。他们可以随时重用这些库,并根据他们的开发需求进行一些调整。

这样,您的项目在更短的时间内完成,测试变得风险更小,成本也最小化。因此,图书馆管理是一个必须考虑的因素。

PHP 的库支持没那么强。然而,PHP 7 引入了一个强大的工具 Composer,这是它的依赖管理器。您可以将它与 Packagist(PHP 包存储库)结合起来,更有效地管理您的库。

但是作曲家还年轻,目前可能还不完全可靠。

另一方面,Python 为库提供了优秀和成熟的支持。Python 利用“Pip 安装 Python”(Pip)进行包控制。Pip 速度很快,使管理 Python 应用程序的库变得更简单,而且您可以更容易地解析您的项目需求。

人工智能和 ML 支持的网络应用程序现在很受欢迎。如果你也想开发这样的应用程序,Python 有一些优秀的 ML 库,如 TensorFlow、Scikit Learn、Keras、Theano 和许多更成熟的库。

所有这些库都与 web 框架无缝集成,并且非常快速、易于使用和安装。因此,Python 有助于简化 web 开发。

结论:Python 是赢家。

Web 框架选项

Python 和 PHP 都为 web 框架提供了广泛的选择。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

最常用的基于 PHP 的框架有 Zend(效率惊人)、CodeIgniter、Symfony、Laravel、Yii、Phalcon 等等。

如今,许多现代 PHP 应用程序利用 Laravel、Symfony 和 CodeIgnitor,因为它们具有最低的配置要求、更高的可伸缩性和更快的性能。

使用这些框架的著名网站有:Vogue、索尼 VAIO 英国、Barracuda、Casio 等。

Python 还提供了许多 web 框架来支持您的高级定制开发,支持诸如解释请求、产生响应、存储数据等功能。

著名的 Python web 框架有 Django、TurboGears、Pylons、CubicWeb、Flask、Bottle、Pyramid 等等。

Django 目前的使用率很高,非常适合追求完美的开发人员。这是一个鼓励干净设计和快速开发的高级框架。它强调自动化,你可以用更少的代码更快地构建应用程序。

其他 Python 支持的框架在安全性、性能、更少的依赖性和易于定制方面也很丰富。

结论:就支持的 web 框架而言,PHP 与 Python 的拉锯战不分胜负。

环境管理

在 PHP 和 Python 中,考虑环境管理是必要的,特别是如果你不想在构建应用程序时依赖软件容器。

不使用容器意味着你需要注意将应用程序的安装语言和库版本分开。这并不像听起来那么简单,需要大量的耐心、时间和努力。

所以,当谈到环境管理时,PHP 使用 virtPHP 作为它的环境管理器。但不主动维护,长期存档。这也是为什么连 PHP 开发者都建议不要用 virtPHP,而要用容器的原因。

对于运营开发来说,容器是一个更好的选择,开发者可以用它来运行一个软件流程,小的微服务,甚至是大的应用。

它支持更少的开销、一致的操作、更高的可移植性和更高的应用程序开发效率。这就是为什么像 Kubernetes 和 Docker 这样的容器现在需求量很大。

事实上,如果您使用容器,您甚至不必考虑环境管理。

如果没有,让我们看看 Python 基于环境管理有多好。

Python 有 Virtualenv,这是对管理环境最有用的应用程序之一。它可以并行安装多个 Python 版本,管理它们,并快速切换版本。

Virtualenv 是开发人员社区中最早的环境管理应用程序之一。他们管理这个优秀的应用程序已经超过 10 年了。

结论:在环境管理方面,Python 显然比 PHP 更好。

灵活性、可扩展性和多功能性

Comparing PHP and Python based on flexibility

The flexibility of PHP and Python

随着企业的发展,其用户群也随之增长。因此,他们使用的应用程序必须可伸缩,以满足客户的需求。

可扩展的应用程序还可以根据市场需求为企业提供更多灵活性,并承受高峰季节的高流量。它还必须为您提供根据业务需求进行扩展和缩减的选项。

Python 和 PHP 都适合使用广泛的框架和库进行 web 开发。

PHP 支持 Symfony、 Laravel 等强大的框架。如上所述,这样您就不会在开发、测试和管理过程中遇到麻烦。

然而,当我们谈到可伸缩性时,Python 比 PHP 有优势,它的人工智能和机器学习能力可以适应新的趋势,并根据需求进行扩展。

相比之下,PHP 在应对新趋势和不断增长的需求方面不够灵活,即使最近对该语言进行了一些重大改进。

Python 也提供了很多 web 框架,而且你已经知道 Python 在库支持方面更好。你有像 Django 和 Flask 这样的高度可伸缩、安全和快速的框架。

无论您是想部署 ML 模型,还是想使用独立的解耦组件来构建应用程序,Django 都可以提供帮助。您可以根据不断变化的业务需求更换或拔掉这些组件。

由于其通用性和简单性,Instagram 使用 Django 框架,在 PHP 与 Python 的竞赛中选择了 Python。它帮助这个社交媒体网站每天轻松地迎合数百万用户的需求。

结论:Python,又来了。

安全性

Comparing PHP and Python based on security

PHP vs Python: Security

网络安全可能是互联网世界最大的担忧之一。

随着技术的进步,网络攻击也在不断发展,例如跨站脚本(XSS)、恶意软件注入、网络钓鱼诈骗、DDoS 攻击等等。

最终,企业和个人在金钱和声誉方面遭受巨大损失。

根据 2021 年 3 月发布的一份 Varonis 报告, 2019 年,88%的全球组织面临鱼叉攻击,而 95%的网络安全漏洞是由于人为错误造成的。

这就是为什么开发人员和设计人员需要认真对待 web 开发的安全性。选择一种能够提供更好安全性的编程语言是他们应该追求的目标。

【2015 年 12 月发表的另一项研究显示,大约 86%用 PHP 编写的应用至少涉及一个 XSS 漏洞。PHP 中的许多安全问题由于其庞大的社区已经得到解决,但是您需要选择最安全的替代方案。

Python 比 PHP 更安全。它有许多安全特性,您可以利用这些特性来构建具有高端功能和明确目标的复杂应用程序。事实上,这份 2019 年 3 月的报告显示,Python 是最安全的编程语言之一。

例如,Python 支持 Django,它具有安全特性,可以保护应用程序免受威胁。这就是为什么许多政府组织和银行机构利用 Python 来构建具有顶级安全性的健壮应用程序。

厌倦了低于 1 级的 WordPress 托管支持而没有答案?试试我们世界一流的支持团队!查看我们的计划

结论:Python 毫不犹豫地赢了。

排除故障

Comparing PHP and Python based on debugging

PHP vs Python: debugging

我们的 PHP 和 Python 的下一个比较是两种语言对于调试的效率。

作为一名开发人员,您需要为两种情况做好准备,一种是工作正常,另一种是工作不正常。

当您的应用程序中存在错误时,它将不会按照预期的方式运行,并且还可能会带来安全风险。

在这种情况下,高效的调试器有助于找出代码中的错误并修复它。

调试 PHP 可能有点棘手。有时可能需要您做一些额外的工作来完成调试过程。然而,使用像 XDebug 这样的 PHP 调试器并不困难,因此您可以更快地开始调试过程并完成它。

像 PHP 一样,Python 也有出色的调试器,如 Python 调试器(PDB ),即使你是初学者,使用起来也毫不费力。因此,只需按下“调试”按钮,并开始摆脱错误,以实现更好的性能和安全的应用程序。

此外,PHP 和 Python 的一些调试器可以与 IDE 集成,如 PyCharm 或 Visual Studio 代码。

结论:平手。

证明文件

如果你是一个初学者或有经验的开发人员,将开始一个新项目,你需要的最重要的东西之一是好的文档。对于你选择的编程语言或者你将要使用的工具来说,这是必不可少的。

它将提供完整的信息,并帮助您了解最新的发展以及您必须应对的挑战。

这就是为什么我们需要在 PHP 和 Python 的比较中看到每种编程语言的文档有多好。

PHP 和 Python 都有大量全面的文档。你可以参考无数的论坛、网站、讨论板、教程以及两者都有的课程。

PHP 有一个包含 10 种语言信息的文档网站。它用简单的语言深入介绍了 PHP 的特性。开发者可以在每个页面上发表评论,用有效的例子来帮助澄清复杂的概念。

但是这些评论一旦发表,就会永远留在页面上,这样每个访问者都可以看到。因此,即使是与以前的 PHP 版本相关的旧注释也会显示在顶部。

这意味着它们要么已经解决,要么已经过时。但是当人们第一次看到他们的时候,会产生很多困惑,因为他们不能立即理解什么问题已经被解决了,他们还在做什么。这是原生 PHP 文档的一个缺点。

使用 Python,你不会遇到这种情况。它还为每个版本提供了深度文档,包括目录、引入的新改进、安装 Python 模块、完整教程、用法、库参考、扩展、FAQ 部分等等。

除此之外,文档没有显示注释,所以不会有混淆。然而,给出的解释对一些人来说可能很难理解。

比较每个优点和缺点,Python 仍然得分较高,因为过时的注释在 PHP 中造成了混乱。

结论:Python。

他们如何使用 WordPress

Comparing PHP and Python based on how they work with WordPress

PHP vs Python: WordPress

WordPress 使用 PHP 作为其核心编程语言。因此,它在 WordPress 社区中已经很重要了。

如果你想了解 PHP 如何与 WordPress 一起工作,只需从他们的官方网站下载 WordPress 并打开下载的 ZIP 文件。它将有 PHP 的大部分详细说明。

除此之外,如果你安装了一个 WordPress 主题或者插件,你会发现大多数都有 PHP 文件。

因此,当访问者浏览您的站点时,服务器上的 PHP 模块处理 PHP 代码,生成 HTML 格式的输出,并显示在访问者的屏幕上。

WordPress 需要 PHP 来处理 URL 的请求,从数据库中获取数据,加载文件,获取帖子元数据,验证用户权限,调用插件和主题,上传文档或图像,以及构建网页和界面等。

现在最好的事情来了:你不一定需要学习 PHP 来使用和管理一个 WordPress 网站。

但是如果你想修改默认的 WordPress 属性,进行复杂的定制,或者开发新的 WordPress 插件和主题,学习 PHP 是必须的,还有 CSS 和 HTML 基础知识。

WordPress 及其插件和主题都是用 PHP、Python 编写的,WordPress 看起来是奇怪的一对。

这就是为什么如果你只是需要一个 CMS 或计划开始一个博客,使用 WordPress,但选择 Python 来开发一个高端的 fin-tech,web scraping 或数据分析应用程序。

尽管如此,如果你仍然想在 WordPress 中使用 Python,你需要找到一个共同的链接——MySQL。

WordPress 和 Python 都支持 MySQL。您将需要一个插件,可以启动 MySQL 查询您的数据库,然后在您的前端显示输出。

然而,许多人不想与这些麻烦。

因此,毫无疑问,PHP 与 WordPress 配合得很好,并且在这方面远远胜过 Python。

结论:PHP 胜出。

他们如何使用 MySQL

MySQL 于 1995 年推出,与 PHP 同年。它很快成为数据库世界的领导者。它是开源的,具有许多优点,如速度快、数字足迹少、可伸缩、易于安装、安全可靠等等。

因此,如果你想在你的应用中使用 MySQL,你需要确定哪种编程更好。因此,我们将在这场 PHP 与 Python 的较量中比较 MySQL 的可用性。

MySQL 和 PHP 的结合为构建几乎任何类型的网站提供了无限的选择,从大型商业门户到小规模的联系形式。PHP 几乎可以与所有数据库一起工作,比如 Oracle、MySQL 等等。

MySQL 是基于 PHP 的 web 产品中最常用的,因为它是开源的、免费的、高度通用的、易于使用的、快速的、可靠的,并且使用标准的 SQL。

人们广泛使用 PHP 和 MySQL 来开发跨平台的应用程序,这些应用程序可以运行在不同的操作系统上,如 Windows、Unix、Linux、Mac 等。

PHP 被设计成只要你运行完 php 命令,就可以毫不费力地连接到 MySQL。但是使用其他编程语言,你可能需要安装额外的代码或者一些插件来连接 MySQL。

来到 Python,它需要一个特殊的驱动来和一个 MySQL 数据库对话。这些驱动程序可从第三方供应商处获得。在使用它们之前,建议您阅读 Python 文档,并检查哪些驱动程序符合它们的标准接口。

MySQL 文档使用“连接器”一词代替“驱动程序”来阐明它与数据库的连接和交互。

不同的编程语言有不同的驱动程序或连接器,Python 使用 MySQL 连接器。

要建立连接,您可以使用 PIP 来安装 MySQL 连接器。接下来,需要使用 Python 测试数据库连接,然后创建一个数据库。现在,您可以执行 SQL 查询,获取结果,通知数据库任何更改,并关闭连接。

所有这些过程对许多人来说都很棘手。因此,在 PHP 和 Python 中比较 MySQL 更好的,肯定是 PHP。

结论:PHP 是赢家。

对于 Web 和应用程序开发

接下来,了解什么更适合您的 web 和应用程序开发是关键。您选择的语言必须非常适合您的独特需求。

PHP 和 Python 都适合 web 和 app 开发。所以,这一切都归结于你到底计划开发什么,它有多复杂,以及规模。

PHP 的核心是为 web 开发而设计的。如果你想开发一个不太复杂、功能有限的小型或中型应用程序,PHP 可能是合适的。

此外,PHP 通过其功能丰富的现成工具帮助加速或简化开发过程。这也是开发 CMS 和电子商务网站的明智选择。PHP 使您能够与第三方应用程序完美集成。

另一方面,Python 具有强大的功能,非常适合构建基于人工智能、人工智能、数据科学、大数据等的应用。对于 TensorFlow、Theano、Pandas 等库,您有各种各样的选择(在前面的部分中我们已经看到了一些)。

所以,你可以看到 Python 和 PHP 各有所长。选择哪一个很大程度上取决于您的项目需求。如果您也对这两种语言及其可用性有了透彻的了解,那么选择其中任何一种都是最好的。

结论:没有明显的赢家。

开发者社区和支持

拥有一个活跃的、支持性的开发者社区是可取的。它帮助新开发人员和好奇的专业人员消除疑虑。

PHP 和 Python 在几十年前就已经在市场上发布了,并且拥有优秀的开发者社区来支持专业人士。

你可以在专门的网站和论坛上搜索它们,并提出问题,以更好地了解你的编程和 web 开发技能。

自 1995 年推出以来,PHP 一直在不断改进,发布了新的特性和问题解决方案。因此,我们现在有了 PHP 7,它以令人难以置信的速度和性能而闻名。

有一个庞大的开发人员社区可以为 PHP 提供帮助。由于这种语言的强大功能,脸书使用 PHP 作为其主要的后端编程语言。

说到 Python,它发布于 1991 年,拥有一个庞大的开发人员社区,他们进一步致力于开发这种编程语言,使其更加健壮。因此,它的社区也像 PHP 一样强大。

当谷歌用 Python 开发 YouTube 和其他产品时,python 变得更加出名。此外,其他使用 Python 的著名公司还有 Pinterest、Reddit,甚至 Instagram。

因此,在开发人员社区和支持方面,PHP 和 Python 的竞争不分上下。

结论:两者都是赢家。

类似

Finding the similarities between PHP and Python

PHP vs Python: Similarity

现在,让我们找出 PHP 和 Python 之间的一些相似之处:

  • 这两种语言都是开源的,可以免费使用。
  • 两者的调试过程都很好。
  • 它们都有定制的 ide,可以很好地与所有主流操作系统兼容。
  • 两者都有一个很棒的开发者社区,他们可以在你有疑问的时候帮助你,拓展你的技能。
  • 两者都支持动态类型和方法链接。

差异

PHP 和 Python 之间的主要区别总结如下:

| 参数 | PHP | Python |
| 语言类型 | 用于 web 开发的脚本语言 | 通用编程语言 |
| 学习曲线 | 比 Python 更难学 | 更容易学习,即使是初学者 |
| 带有示例的框架 | 支持更多的框架(例如:CodeIgniter,Laravel,Symfony,Yii,CakePHP) | 与 PHP 相比,框架更少,但可用的是有效的(例如:Django、TurboGears、Bottle、Flask、Web2Py、Tornado、Pyramid) |
| 速度 | 早期版本较慢,但 PHP 7 非常快——甚至比 Python 还快。 | 从一开始就设计得很快 |
| 数据库连接 | 它是数据库友好的,能够与 25 个以上的数据库无缝连接。 | 数据库连接是可能的,但不是对所有人。另外,它需要司机。 |
| 句法 | 它的语法可能有点复杂,使用花括号、命名规则、变量前的符号等等。 | 它的语法清晰明了。不使用花括号,也不需要定义变量。 |
| 图书馆支持 | 提供了强大的 Packagist,但是 PHP 在提供更广泛的库支持方面仍然落后 | 对几乎所有类型的应用程序的大量库支持 |
| 关键标识符 | 免费和开源,频繁的增强,松散的部署 | 动态键入、简单代码和快速开发 |
| 流行 | 更受欢迎(大约 79%的网站使用 PHP) | 不如 PHP 流行(互联网上大约 1.1%的网站使用 Python) |
| 可读性 | 可读性和可维护性较差 | 它旨在降低复杂性,并具有简单英语的可读性。 |
| 函数式编程 | 没有功能范例 | 支持函数式编程方法。 |
| 安全性 | 人们目睹了许多安全攻击 | 内置网络安全功能,更加安全 |
| 证明文件 | 记录良好且可用,但旧的评论不断出现,造成混乱。 | 有据可查,没有混淆 |
| 使用 | 主要用于 web 开发 | 更广泛的用途,包括 web 和应用程序开发以及人工智能、ML、数据科学、大数据等。新兴技术 |
| 著名用户 | 脸书,WordPress,维基百科,雅虎 | YouTube、Pinterest、Instagram、Quora、优步、Spotify、Dropbox |
| GitHub stars | 30K | 30.4 千 |
| 叉 | 8.04 千 | 8.23 千 |

软件开发领域正在进行一场战斗&这一切都要追溯到 PHP 与 Python 的较量🥊在这里找到最适合您项目需求的编程语言👇

摘要

在这场 PHP 与 Python 的比较中,Python 以 2 分的优势胜出。但这并不意味着你必须选择 Python 而忽视 PHP。PHP 和 Python 都是适合 web 和 app 开发的优秀编程语言。

很长一段时间以来,PHP 一直是大多数 web 开发项目的首选。但现在,Python 正慢慢地以其卓越的特性和功能走向高端科学应用,并迎合这个现代的、精通技术的世界。

最后,这很大程度上取决于您的项目需求以及您在 PHP 或 Python 方面的技能、知识和专长。如果你是一个有经验的程序员,并且你需要设计一个简单的网站,你可以选择其中任何一个。

但是如果你是初学者,先试着学习 Python,然后你可以逐渐转向 PHP 或其他语言。

还是那句话,如果你需要开发像 AI、ML、大数据等基于科学的应用和站点。,Python 比较好。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PHP 工作人员:他们是什么和你需要多少(高级指南)

原文:https://kinsta.com/blog/php-workers/

当谈到选择一个主机方案的时候,选择一个最符合你的 WordPress 网站需求的方案是很重要的。

例如,一个每月有 50,000 名访客的电子商务网站通常会比一个拥有相同流量的简单博客对资源的需求更高。

这仅仅是因为电子商务网站本质上通常是动态的,需要更多的 PHP 和数据库查询资源。

这就是 PHP 工作人员发挥作用的地方。阅读下面更多关于什么是 PHP 工作器以及如何使用它们来加速你的站点上的请求处理的内容。

什么是 PHP 工作者?

在 WordPress 的上下文中,PHP 工作人员构建页面,处理预定的后台任务,等等。由于 PHP 工作人员直接负责生成 HTML 页面以服务于您站点的访问者,他们决定了您的站点在任何给定的时间可以处理多少个并发的未缓存请求。

例如,假设你的 WordPress 站点配备了两个 PHP 工作器,没有页面缓存设置。如果有四个请求同时到达您的站点,其中两个请求将被立即处理,而另外两个请求必须在队列中等待,直到前两个请求处理完毕。

在 Kinsta,我们使用 PHP workers 作为不同计划层级的变量之一。例如,企业 1 计划每个站点有 4 个 PHP 工作人员,而企业 4 计划有 14 个。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

虽然我们实现了服务器级缓存,但是对于缓存被绕过或错过的请求,PHP 工作人员变得非常重要,因为他们必须为每个请求做工作。

通常我们会在电子商务和社区论坛网站上看到很多未缓存的请求。因此,这些站点将需要额外的 PHP 工作人员来确保每个请求都得到处理,没有延迟或超时。

如果你的网站是高度优化的或者没有很多 PHP 代码(例如,一个复杂的主题或者很多的 WordPress 插件,那么处理每个请求应该几乎是立即发生的。即使有 2 个 PHP 工作器和 4 个请求,这四个请求也能很快得到处理。

简单来说,PHP worker 就是运行 PHP 代码的服务器上的后台进程。

WordPress 如何使用 PHP Workers?

在我们进入如何优化 WordPress 的 PHP 工作器使用之前,我们必须首先了解 WordPress 是如何使用 PHP 工作器的。

非缓存环境中的典型请求如下:

  1. 网络服务器( Nginx 或 Apache )接收来自访问者的请求。
  2. Nginx 将请求传递给 PHP。
  3. PHP 根据需要查询 MySQL 数据库,并使用你的主题的 PHP 模板生成一个 HTML 页面。
  4. PHP 将呈现的 HTML 页面送回 web 服务器。
  5. 这一页是提供给访问者的。

在上面强调的过程中,步骤 3 是最耗费时间和资源的(CPU 和 RAM)。一个具有最少数据库查询和高效 PHP 代码的高度优化的网站将相对较快地完成第三步。

相反,如果一个站点的 PHP 代码写得很差,会产生大量不必要的数据库查询,那么它在完成第 3 步时会花费更多的时间,这意味着请求会占用 PHP 工作人员更长的时间。

PHP 工作人员和 CPU 是什么关系

当谈到 WordPress 性能时,PHP 工作人员和可用 CPU 之间的关系是一个需要考虑的重要因素。

如果缺乏 CPU 资源是你的站点的瓶颈,增加 PHP 工作人员的数量不会提高你的站点的性能——它只会让你的站点同时处理更多的请求,降低每个请求的性能。

让我解释一下。

想象一个只有一根软管的消防栓。只有一个软管连接,消防栓能够提供足够的水压。现在,如果我们在消防栓上接上十根水管会怎么样?

有限的水压分布在十根软管上,这意味着每根软管完成工作所需的水压更小。在这个类比中,消防栓是 CPU,水管是 PHP 工作人员。

记住以上几点,如果你的主机不断建议你增加 PHP 工作人员而没有提到 CPU,你应该小心。

在 Kinsta,我们的定制 LXD 容器配置了充足的 CPU 和 RAM 资源。我们还使用计算优化的 C2 虚拟机配备谷歌云最快的 CPU,帮助您网站的 PHP 工作人员更有效地运行。我们可扩展的基础设施确保你的 WordPress 站点的 PHP 工作人员有足够的 CPU 资源以最高性能运行。

让我们暂时回到消防栓的类比。

想象一下,你处在一个需要用五根水龙带扑灭十场大火的情况下。连接完所有五根软管后,您意识到消防栓仍在提供充足的水压。

在这种情况下,连接更多的软管是有意义的,因为消防栓的水压不是瓶颈。

类似地,如果你的站点即使有足够的 CPU 和 RAM 开销也表现不佳,这时你应该考虑增加 PHP 工作人员的数量,作为提高性能的一个选择。

如何优化你的站点的 PHP 工作器的使用

我们已经解释过 PHP 工作器是后台进程,它用 PHP 代码生成 HTML 页面。现在,减少和优化 PHP 工作线程使用的最显而易见的方法是减少满足站点请求所需的 CPU 和 PHP 资源的数量。

下面是怎么做的。

1.为你的 WordPress 站点设置缓存

减少 PHP 工作器使用的第一步是为你的 WordPress 站点设置缓存层。默认情况下, WordPress 是一个动态的 CMS ,按需满足每个页面请求。

对于许多像博客、在线杂志和作品集这样的网站,使用 PHP 为每个请求动态生成页面是没有必要的。

页面缓存

你正在阅读的博客文章是一个不需要动态生成的页面的完美例子。和我们的许多其他帖子一样,这篇帖子的内容被设计成静态的,所以不需要花费 CPU 资源来连续生成相同的页面。

相反,最好让 PHP 生成一次页面,然后缓存它。与用 PHP 动态生成页面相比,页面缓存有许多明显的优势。

例如,想象一下,如果你网站上的一篇博客帖子像病毒一样传播,并在发布后几个小时内获得 100,000 的页面浏览量。如果没有页面缓存,您的 PHP 工作人员可能会不知所措,您的服务器可能会崩溃。

使用页面缓存,只有第一页视图会动态生成。其他 99,999 个请求将由您的页面缓存提供服务,这使用了相对较少的 CPU 资源。

有两种方法可以为你的 WordPress 站点设置页面缓存。

  1. 使用类似 Nginx 的 web 服务器进行服务器级页面缓存。
  2. 基于插件的页面缓存,带有像 WP-Rocket 这样的 WordPress 插件。

为了获得最佳性能,我们建议尽可能使用服务器级页面缓存。在 Kinsta 上,我们所有的网站都使用 Nginx 的 FastCGI 缓存模块来实现超快的性能。

如果你的主机没有提供服务器级的页面缓存选项,下一个最好的选择是使用一个 WordPress 缓存插件来实现应用程序级的页面缓存。

对象缓存

对于不能有效利用页面缓存的 WooCommerce 商店、社区论坛和其他 WordPress 网站来说,在 MySQL 数据库前添加一个像 Redis 这样的 T2 持久对象缓存可以提高性能并减轻 PHP 工作人员的负担。

如果没有持久对象缓存, MySQL 数据库查询将为每个请求执行,即使结果与之前的查询相同。

例如,一个绕过页面缓存的社区论坛站点将对数据库进行单独的相同查询,以获取帖子数据来构建页面。

对于高流量和数据库繁重的网站,这种查询数据库的方法效率很低,因为它使用 PHP 工作器为不同的请求生成相同的查询结果。这就是 Redis 的用武之地。

Redis 将数据库查询的结果存储在 RAM 中,这允许 PHP 获取已经执行的查询的结果。这种对象缓存方法允许 PHP 工作人员节省 CPU 资源,减少完成请求的时间,因为它消除了重复数据库查询的需要。

2.优化你的 PHP 代码

除了设置页面缓存,另一个有助于减少 PHP 工作器使用的策略是优化您的 PHP 代码。在 WordPress 的上下文中,“优化 PHP 代码”可能意味着各种不同的事情,所以让我们更深入地了解一下。

WordPress 最受欢迎也最受讨厌的特性之一(取决于你问谁)是它通过插件和代码片段的可扩展性。

如果你想在你的 WordPress 站点上添加一个股票行情插件,有一个插件可以做到。类似地,如果你想添加自定义字体,也有一个functions.php代码片段。

用额外的功能扩展 WordPress core 已经变得如此容易,以至于我们经常走极端而没有考虑对网站性能的潜在影响。

因此,优化您的 PHP 代码的第一个方法是执行站点范围的审计,以确定哪些插件和代码片段是真正必要的。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

选择优质插件

通常情况下,WordPress 网站上插件的数量没有插件的质量重要。如果一个插件在过去六个月内没有更新,我们建议选择另一个符合要求的插件。

这样做的原因是 WordPress 在不断改进。如果一个插件已经很多年没有更新了,很可能它的代码没有利用最新的 WordPress 开发和安全最佳实践。

相反,如果一个插件每隔几周就不断更新,那么开发者很有可能对质量很认真,这使得它成为你的 WordPress 站点的一个好选择。

仅在需要时使用插件

如果你想在你的网站上执行一个简单的任务,比如添加 JavaScript 或 CSS,你并不总是需要一个插件。相反,你可以将代码直接添加到你的主题的 PHP 模板或者带有子主题style.css 文件中。

下一次当你在考虑安装一个插件的时候,先花点时间看看它是否 100%有必要。有时,没有办法安装另一个插件,这没关系。其他时候,您可以通过不安装不必要的插件来避免增加额外的代码膨胀。

选择轻量级主题

根据我们监控数千个 WordPress 站点的经验,我们发现主题有时是 PHP 性能差的原因。为了迎合 WordPress 作为通用 CMS 的多功能性,一些开发者为各种用例编写主题。

通常,这导致代码繁重和臃肿的主题,没有以有效的方式利用 PHP 和数据库查询。

当建立一个 WordPress 网站时,重要的是选择一个最具性能和可定制的主题generate press、OceanWP 和 Astra 就是三个例子。

3.选择注重性能的 WordPress 主机

信不信由你,选择正确的 WordPress 主机会对你网站的表现产生巨大的影响。由于 PHP 工作人员的效率与 CPU 和 RAM 直接相关,所以将您的站点托管在一个拥有最新硬件的现代服务器上可以帮助您优化 PHP 工作人员的使用。

这里有两个例子说明为什么选择一个注重性能的主机对你的 WordPress 站点很重要。

高性能 CPU

PHP 使用 CPU 资源来执行代码。更快的 CPU 意味着更快的代码执行。在 Kinsta,我们使用谷歌云最快的服务器——计算优化的 C2 虚拟机。

这些虚拟机配备了最新的英特尔至强处理器,能够以 3.8 GHz 的全核睿频运行。在我们的基准测试中,我们看到 C2 机器的性能比传统的 N1 机器高出 2-4 倍。

快速固态硬盘存储

磁盘 I/O 速度会对代码执行和数据库查询产生直接影响。如果你的数据库存储在一个缓慢的机械磁盘或基于云的固态硬盘上,没有足够的 IOPS(每秒输入/输出操作),你的 PHP 工作人员将被迫花更多的时间来完成一个请求。

我们使用谷歌云平台的高性能固态硬盘存储来确保你的 WordPress 站点可以访问快速磁盘 I/O。

厌倦了慢热的主持人?Kinsta 的设计考虑了速度和性能。查看我们的计划

4.与性能专家合作(可选)

如果您不确定如何解决您站点上的性能问题,我们建议您与一位合格的性能专家合作来诊断问题。

专家可以通过使用先进的监控工具,如 New Relic查询监控器 WordPress 插件,帮助你识别代码中的具体瓶颈。

通过放大和检查单个 PHP 进程和数据库查询,有可能识别给站点的 PHP 工作人员带来高负载的特定代码块及其相关特性。

总结 PHP 工作器优化,请记住以下提示。

  1. CPU 和 RAM 应该和 PHP 工作人员一起按比例增加。如果 CPU 使用率被锁定在 100%,增加更多的 PHP 工作线程不会提高性能。
  2. 用一个注重性能的主机来托管你的站点可以解决很多性能问题。
  3. 页面缓存对象缓存可以显著降低 PHP 工作负载。
  4. 使用高质量的 WordPress 插件和主题可以减少网站上不必要的代码膨胀。
  5. 如有必要,与绩效专家一起确定并解决复杂的问题。

PHP 工作人员不足的结果

为了让你的 WordPress 站点达到快速可靠的性能,确保它有足够的 PHP 工作人员是很重要的。当 PHP 工作人员已经忙于一个站点时,他们开始建立一个队列。

一旦达到 PHP 工作线程的极限,队列就开始推出旧的请求,这可能导致 504 错误或不完整的请求。

我们看到的另一个由于缺乏 PHP 工作人员而导致的常见错误是 502 坏网关错误。这些错误与 504 错误略有不同,因为该错误发生在 PHP 工作队列超时 60 秒之后。

这些错误不仅会给你的访问者带来糟糕的用户体验,还会对你网站的 SEO 产生负面影响。

A 502 (Bad Gateway) error.

A 502 (Bad Gateway) error.

有许多不同的因素会导致页面加载缓慢或出错。例如,如果一个未缓存的请求需要来自数据库的大量数据,则结果查询可能需要 20-30 秒才能完成。

在这种情况下,一个 PHP 工作人员至少会被占用半分钟。如果您的站点只有两个 PHP 工作人员,那么仅仅两三个这样长的请求就足以引发错误。

为了解决这个问题,优化 MySQL 数据库并增加 PHP 工作线程(如果 CPU 还没有达到极限)可以提高性能。

估计所需 PHP 工作人员的数量

Kinsta 的每个托管计划都包括一定数量的 PHP 工作人员。包含的 PHP 工作人员数量是基于我们在过去几年中收集的历史资源使用指标。一般来说,以静态内容为主的网站——文章、静态页面和作品集——不需要很多 PHP 工作人员。

对于像电子商务论坛这样的更大的 WordPress 网站,我们发现 4 个 PHP 工作者是一个很好的起点。然而,这可能因网站而异,因为每个网站都有自己独特的主题、插件、数据库查询和缓存与未缓存的比率。

在某些情况下,可能需要更多的 PHP 工作人员来获得快速可靠的性能。如果你不确定你的网站在 Kinsta 上需要多少 PHP 工作人员,我们的销售和支持团队可以帮你找到。

PHP 工作进程限制图表

MyKinsta analytics 中的 PHP 工作线程限制图表可以让您看到 PHP 引擎在其错误日志中报告达到最大分配工作线程数的次数。这个图表可以帮助您判断性能优化是否影响了 PHP 工作线程的使用。

Top cache bypasses

Top cache bypasses.

例如,如果您将站点的 PHP 版本从 5.6 切换到 7.4 ,您可能会看到 PHP 工作线程限制的下降,因为 PHP 7.4 比 5.6 快得多。

类似地,如果您与一位性能专家一起修复长数据库查询,并将切换到一个更轻量级的主题,那么您可以使用 PHP 工作线程限制图表来查看优化前后的差异。

高速缓存分析图表

您还可以使用 MyKinsta 中的缓存分析报告来确定缓存命中、绕过、未命中和过期的数量。当优化您的站点对 PHP 工作器的使用时,这些数据尤其有用。

使用查询字符串绕过缓存

默认情况下,带有类似于https://kinstalife.com/?query=123的查询字符串的URL会绕过页面缓存。在某些情况下,查询字符串会导致大量不必要的 PHP 和 CPU 使用。

例如,如果你访问一个来自脸书的链接,你经常会在 URL 的末尾看到?fbclid=查询字符串。同样,你可以在点击电子邮件简讯中的链接后看到 UTM 跟踪参数。

A URL with a query string (?querystring=123).

A URL with a query string (?querystring=123).

如果你的站点上的一个帖子像病毒一样传播,并且不断地被查询字符串访问,你将能够通过缓存分析报告识别特定的 URL。

有了这些关键信息,您就可以联系我们的支持团队来强制缓存这个特定的 URL,以减轻您的 PHP 工作人员的负担。

识别资源密集型插件

在某些情况下,缓存分析图表还可以用于识别资源密集型插件和进程。

例如,如果您看到顶部缓存绕过 URL 指向一个特定插件目录中的文件,那么很有可能是该插件导致了 PHP 工作线程的高使用率。

如果你在缓存绕过列表中看到很多插件相关的请求,你可以与开发者合作解决这个问题,或者切换到使用更少资源的插件。

摘要

维护一个快速的站点的目标是最大化后端的效率。当 PHP 工作器通过在工作器数量、CPU 使用和代码优化之间找到平衡而被正确利用时,WordPress 可以成为一个非常高效的 CMS。

如果您是金士达的客户,请考虑使用代码缩减功能。该功能直接内置在 MyKinsta 仪表盘中,客户只需点击一下就可以轻松实现 CSS 和 JavaScript 的自动缩小。

如果你有任何关于你可能需要多少 PHP 工作人员的问题,或者你认为你可能会因为缺少 PHP 工作人员而看到错误,请向我们的支持团队开一张票寻求帮助。

现在轮到你了:你使用什么优化策略来保持你的 WordPress 网站平稳运行?请在评论中告诉我们!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

Pingdom 速度测试工具:2022 年终极指南

原文:https://kinsta.com/blog/pingdom-speed-test/

今天我们想深入探讨如何更好地使用和理解来自流行网站速度测试工具 Pingdom 的数据。你可以用它对你的 WordPress 网站进行瀑布分析。这可以帮助您快速诊断性能问题,而不是误诊问题。

我们经常看到 WordPress 用户在 Pingdom 速度测试工具中错误地解释数据,这有时会导致将网站配置到比以前更糟糕的状态。记住,像这样的所有工具都是作为指南使用的。它们从来都不是 100%准确的。重要的是保持一致,在所有测试中使用相同的工具

什么是 Pingdom 速度测试工具?

Pingdom 是一家总部位于瑞典的公司(现为网络安全管理软件产品所有),提供各种服务,如正常运行时间监控、页面速度监控、交易监控、服务器监控和访客洞察(RUM)。他们最出名的事情之一是他们的免费网站速度测试工具。它是 WordPress 社区中最流行的性能测试工具之一。

为什么这么受欢迎?嗯,首先,它可能是最容易使用的速度测试工具!不是每个人都是 web 性能专家,所以对于典型的 WordPress 用户来说,其他一些替代工具可能会让人不知所措。正如人们所说,有时少即是多。毕竟,你只关心你的网站有多快,以及如何让它变得更快。

Pingdom website speed test

Pingdom website speed test

Pingdom 目前允许您从全球 7 个不同地点(五大洲)测试任何网站的速度:

  • 亚洲-日本-东京
  • 欧洲-德国-法兰克福
  • 欧洲-英国-伦敦
  • 北美-美国-华盛顿特区
  • 北美–美国–旧金山
  • 太平洋-澳大利亚-悉尼
  • 南美–巴西–圣保罗

注意:我们已经注意到,有时并非所有的测试位置都可用。这很可能是因为它已经停机维护,或者因为太多人试图在它上面运行测试而过载。如果您一直使用的测试站点位置不再存在,请在一两个小时后再次查看。很有可能,它会再次出现。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

你选择的测试地点对你网站的物理位置至关重要。这就是所谓的网络延迟发挥作用的地方。但是我们将在下面更详细地讨论这个问题。

使用 Pingdom 速度测试工具进行瀑布分析

网页由不同的资源组成,比如 HTML、JavaScript、CSS、图像和视频。每一个都会产生请求来呈现你在网站上看到的内容。通常情况下,你的请求越多,你的网站加载速度就越慢。情况并非总是如此,但大多数时候都是如此。

下面,我们将分解每个 Pingdom 部分,更详细地解释这些信息的含义,因为它与您的网站的整体性能有关,以及如何进行瀑布分析。

Pingdom 摘要

当你通过 Pingdom 运行你的 WordPress 网站时,它会生成一个性能等级,一个总的加载时间,总的页面大小,以及你网站上的请求数量。在我们的例子中,它是一个运行简单数字下载的电子商务网站。它托管在金斯塔超快的服务器上。

如您所见,我们运行了第一个测试,在 Pingdom 上获得了 88/100 的分数,总加载时间为 541 毫秒,这让我们知道了我们组合资产的总大小和请求的数量。

Pingdom speed test before DNS and cache

Pingdom speed test before DNS and cache

然后我们运行了一个额外测试,现在我们的总加载时间是 392 ms,页面大小和请求数量相同!这是怎么回事?🤔如果您多次通过 Pingdom 速度测试工具运行您的网站,您可能会注意到这一点。较大的网站会注意到更大的差异。

出现这种情况主要有三个原因: DNS 缓存、CDN 缓存、WordPressT2 缓存。这就是为什么您应该总是多次运行测试。当然,对第三方资源和 API 的外部调用也会对此产生影响。在下面的瀑布分析中找出原因。

Pingdom speed test after DNS

Pingdom speed test after DNS

想在你的 WordPress 网站上获得更好的 Pingdom 分数吗?取决于你的网站和配置,它可能不总是有可能得分完美的 100/100,特别是那些运行电子商务网站和营销像素。但是简单地花些时间提高你的分数是一个很好的开始。整体速度才是真正重要的。

有时用户体验也可能胜过你在网上读到的一些网络性能技巧。用户体验不能忘!但是请放心,我们将在下面分享一些技巧和诀窍,告诉你我们是如何得到上面的网站的,所以请继续阅读。

说到 web 性能优化,不能忘记用户体验!🚀 点击推文

提高页面性能

performance insights 部分,即现在的“改善页面性能”于 2018 年更新,他们删除了一些旧项目,并添加了新项目。这很可能是因为他们报告的一些建议不再像过去那样相关。说到 web 性能优化,事情是不断变化的。如果人们只是想追求完美的 Pingdom 分数,有时会很麻烦。

pingdom performance insights

Pingdom performance insights

然而,我们把这一整节留在我们的帖子里(一些旧的和新的),因为理解这些分数是如何计算的是很重要的。这些基本上都是基于谷歌页面速度洞察规则。一般来说,如果你在你的站点上改进这些,你应该减少你的整体加载时间。

以下是改善页面性能部分中的几个类别:

现在让我们深入其中的一些,看看哪些仍然适用于今天。

使用内容交付网络(CDN)

今天在你的 WordPress 站点上实现的最关键的服务之一是一个内容交付网络 (CDN)。这些是遍布全球的服务器网络(也称为 pop)。它们被设计用来托管和交付你的 WordPress 站点的静态(有时是动态)内容,比如图像、CSS、JavaScript 和视频流。

如果你是 Kinsta 的客户,我们会在我们的托管计划中包含一个 CDN。启用它需要几次点击。CDN 的一些好处包括性能提升(更低的 TTFB 和网络延迟)、更低的带宽和托管成本,甚至还有 SEO 优势。

Kinsta 客户也可以通过使用内置于 MyKinsta 仪表板 中的 代码缩小功能 来缩小您的代码,从而享受快速而轻松的整体站点优化。这使得客户只需简单的点击就可以实现 CSS 和 JavaScript 的自动缩小,从而有效地加速他们的网站,而无需手动操作。

重要提示:最新更新的 Pingdom 工具目前存在一个 bug,可以正确准确地检测任何 CDN 提供商。

Use a Content Delivery Network (CDN)

Use a Content Delivery Network (CDN)

我们推荐的一些第三方 CDN 提供商包括:

在我们自己的 CDN 速度测试中,我们发现在某些情况下,CDN 可以减少页面加载时间超过 50%

避免 HTTP 404(未找到)错误

这一部分以前被称为“避免不良请求”而这个总是相关的!这个警告就像它听起来一样,是一个无法成功完成的请求。这通常发生在您手动链接到已经被删除的资产或图像时,导致 404 错误。这在 Pingdom 中显示为一个橙色圆圈,并在响应头状态上显示 404。

Avoid bad requests - 404 error

Avoid bad requests – 404 error

始终确保网站上的每个请求都返回成功状态。这将确保不会对不再存在的资产生成任何查询。

最小化重定向

太多的重定向总是你需要小心的。简单的重定向,如单个 301 重定向,HTTP 到 HTTPS,或 www 到非 www(反之亦然)是可以接受的。很多时候,在你的网站的某些区域需要这些。然而,每一个都有你网站性能的代价。如果你开始将重定向一个接一个的堆叠起来,那么意识到它们是如何影响你的站点的性能是很重要的。这适用于页面和帖子重定向,图像重定向,一切。

一个重定向在 Pingdom 中显示为一个蓝色圆圈,在响应头状态上显示为 301 或 302。Minimize redirects - 301

重定向对你的网站有多大影响?让我们做一个小测试。首先,我们在联系我们页面上运行一个速度测试。我们得到的总加载时间为 417 毫秒,如下图所示。

Website speed test with no redirects

Website speed test with no redirects

然后,我们稍微修改 URL,并运行另一个速度测试来查看多次重定向的影响。如您所见,现在加载相同的页面需要 695 毫秒。增长了 66%。呀!

Website speed test with multiple redirects

Website speed test with multiple redirects

查看我们关于 WordPress 重定向的深度文章,以及提高性能的最佳实践。

添加过期标题

这个建议以前被称为利用浏览器缓存。简单来说,WordPress 站点上的每个脚本都需要有一个 HTTP 缓存头(或者应该有)。这决定了文件上的缓存何时过期。要解决这个问题,确保你的 WordPress 主机有正确的cache-control标题和expires标题设置。Kinsta 在我们所有的服务器上都安装了这些头。

查看手动添加缓存头到你的服务器的步骤,并阅读我们关于如何添加过期头的指南。

Leverage browser caching - caching headers

Leverage browser caching – caching headers

另一个问题是,当您加载第三方脚本时,您无权添加缓存头,因为您无法控制他们的 web 服务器。常见的罪魁祸首包括谷歌分析脚本和营销像素,如脸书和推特。要解决这个问题,你可以用一个第三方插件在本地托管你的 Google Analytics 脚本(虽然这不是官方支持的)。 WP Rocket 现在也可以选择在本地托管你的脸书营销像素。

本地移动脚本对站点性能的影响会有所不同。一个好处是你可以完全控制文件,并可以从你的 CDN 提供服务。这也删除了另一个第三方 DNS 请求。然而,记住这些文件可能已经缓存在人们的浏览器中也很重要。

查看我们关于如何修复利用浏览器缓存警告的深度帖子。

从静态资源中移除查询字符串

另一个常见问题是处理查询字符串。您的 CSS 和 JavaScript 文件通常在它们的 URL 末尾有文件版本,比如https://domain.com/file.min.css**?ver=4.5.3**。一些服务器和代理服务器无法缓存查询字符串。所以通过移除它们,你有时可以提高你的缓存

或者你可以手动添加下面的代码到你的主题的functions.php文件中。一个更好的选择是使用像代码片段这样的免费插件来添加代码。这样你就不用直接编辑你的主题了。

function remove_query_strings() {
   if(!is_admin()) {
       add_filter('script_loader_src', 'remove_query_strings_split', 15);
       add_filter('style_loader_src', 'remove_query_strings_split', 15);
   }
}

function remove_query_strings_split($src){
   $output = preg_split("/(&ver|\?ver)/", $src);
   return $output[0];
}
add_action('init', 'remove_query_strings');

然而,在您立即在您的站点上去除查询字符串之前,知道为什么使用它们是很重要的。WordPress 开发者通常使用文件版本控制来解决缓存问题。

例如,如果他们推出一个更新,并将style.css?ver=4.6更改为?ver=4.7,它将被视为一个全新的 URL,不会被缓存。如果您删除查询字符串并更新插件,这可能会导致缓存版本继续提供服务。在某些情况下,这可能会破坏站点的外观,直到缓存资源过期或缓存被完全刷新。

此外,一些 cdn 可以缓存查询字符串。默认情况下, Kinsta CDN 能够并且确实如此。因此,如果您是 Kinsta 客户,查询字符串已经缓存在您的资产中。

Remove query strings from static resources warning

Remove query strings from static resources warning

参见我们关于如何从静态资源中移除查询字符串的深入教程。

我们有一篇关于处理来自无 cookie 域警告的服务静态内容的深度文章。通常,您可以忽略这个警告,因为像 HTTP/2 这样的新协议现在使它变得不那么重要了。一个新的连接通常比通过相同的连接传输所有的东西更昂贵。然而,解决这个问题的两种方法是使用一个 CDN 提供商来剥离 cookies 或者创建一个单独的域或子域

Serve static content from a cookieless domain warning

Serve static content from a cookieless domain warning

用 GZIP 压缩部件

当 Pingdom 检测到一个资产没有用 GZIP 压缩时,就会出现“用 GZIP 压缩组件”的警告。GZIP 是一种压缩方法,用于减小 HTML 文档和 CSS/JS 文件等基于文本的文件的大小。服务器上启用了 GZIP 压缩,在将网页和资源发送给访问者之前会对其进行压缩。从我们的测试中,我们看到启用 GZIP 压缩将请求的文件大小减少了 78%以上。

Compress Components with GZIP

Compress Components with GZIP

在 Kinsta,你不必担心启用 GZIP,因为每个 Kinsta 站点都已经受益于 Brotli 压缩,这是一种比 GZIP 压缩更快的替代方法。这都要归功于我们独特的 Cloudflare 集成。这意味着你的 Kinsta 托管的网站比使用 GZIP 的竞争对手更快,在较小的设备上可以快速加载。

如果在服务器上启用 GZIP 后,您仍然看到“使用 GZIP 压缩组件”,则可能是托管站点所需外部资源的服务器没有启用 GZIP 或 Brotli 压缩。如果是这种情况,您无法改变服务器的行为。

跨主机名并行下载

“跨主机名并行下载”警告是由于 HTTP/1.1 和 web 浏览器受限于它们可以与主机建立的并发连接数的限制而产生的;通常是六个连接。此警告通常出现在有大量请求的网站上。在过去,绕过这个限制的唯一方法是实现他们所谓的域分片。

然而,假设您使用支持 HTTP/2 的 web 主机或 CDN 提供商。在这种情况下,您现在可以安全地忽略这一点,因为现在可以通过单个连接并行加载多个资源。但是你也可以看看我们的教程如何通过实现域分片来修复跨主机名的并行下载警告

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Parallelize downloads across hostnames warning

Parallelize downloads across hostnames warning

指定缓存验证器

这个警告指的是丢失 HTTP 缓存头,它应该包含在每个源服务器响应中,因为它们都验证和设置缓存长度。如果没有找到头,每次都会生成一个新的资源请求,增加服务器的负载。这些标题包括last-modifiedETagCache-ControlExpires。就像利用浏览器缓存警告一样,你的 WordPress 主机应该自动添加这些标题。如果你看到第三方的请求,你也无能为力,因为你无法控制他们的网络服务器。

Specify a cache validator warning

Specify a cache validator warning

阅读我们关于如何修复指定缓存验证器警告的深度帖子。

指定 Vary: Accept-Encoding 标头

我们有一篇关于修复指定 Vary: Accept-Encoding 头警告的深度文章。这是一个 HTTP 头,应该包含在每个源服务器响应中,因为它告诉浏览器客户端是否可以处理内容的压缩版本。这是自动添加到所有 Kinsta 的服务器。

Specify a vary: accept-encoding header warning

Specify a vary: accept-encoding header warning

Pingdom 响应代码

Pingdom 速度测试工具中的以下部分是响应代码。响应代码也被称为 HTTP 状态代码,就像是一个贴在网页顶端的来自网络服务器的短消息。它是来自 web 服务器的一条消息,让您知道当收到查看页面的请求时事情是如何进行的。一些常见的有:

  • 200: “Everything is OK.” This is the code delivered when a web page or resource acts exactly the way it’s expected to.

    Example of Pingdom 200 response code

    Pingdom 200 响应代码的例子

  • 301: “The requested resource has been moved permanently.” This code is delivered when a web page or resource has been permanently replaced with a different resource. It is used for permanent URL redirection.

    Example of Pingdom 301 response code

    Pingdom 301 响应码的例子

  • 404: “The requested resource was not found.” The most common error message of them all. This code means that the requested resource does not exist, and the server does not know if it exists.

    Example of Pingdom 404 response code

    Pingdom 404 响应码的例子

你可以在我们关于 HTTP 状态码的深度文章中读到更多关于不同响应码的信息。

按内容类型划分的内容大小和请求

以下部分是按内容类型划分的内容大小和按内容类型划分的请求。这些都有助于快速查看哪些内容占用了您的网页上的大部分资源。根据 HTTP Archive 的数据,图片通常占网页总大小的 43%。我们通常也看到这种情况。然而,正如你在这个网站上看到的,情况并不总是这样。

Pingdom content type

Pingdom content type

为了优化你的图片,我们强烈推荐阅读我们关于如何优化网页图片的深度文章。有很多很棒的工具和插件可以进一步压缩你的图片,并确保它们不会占据你网站页面的大部分。在我们上面的例子中,网站利用大字体的图标代替了图片。这可能是一个产生巨大影响的伟大策略。当然,在我们的页面速度指南中,我们有一些关于如何进一步减小你的内容大小的额外提示。

按域划分的内容大小和请求

“内容大小和域请求”部分是快速查看网站上哪些外部服务和脚本的绝佳方式。在我们的示例中,您可以看到我们从 CDN 加载了所有资产。然后是来自 web 服务器的网站的初始 HTML 文档加载,以及对 Google Analytics 域的外部调用。根据你的网站,你可能会有更多的外部服务,如脸书、Twitter、Hotjar、SumoMe、AdRoll、New Relic、CrazyEgg 等。

Pingdom requests by domain

Pingdom requests by domain

一般来说,外部请求越少越好,因为每个外部服务都会引入延迟、TLS 握手延迟、 DNS 查找等。请务必在你的 WordPress 网站上阅读我们关于识别和分析外部服务的深度文章。

一般来说,最好尽可能减少请求的数量,将资产托管在一个地方,比如将它们转移到您的 web 服务器或 CDN。字体牛逼就是一个例子。与其链接到字体 awesome 的外部脚本,不如下载它,并直接提供它。

When evaluating web performance, it's important to decide which files you should and shouldn't host ⚡Click to Tweet

Pingdom 瀑布图

最后但同样重要的是,我们有 Pingdom 速度测试工具请求部分,它会生成一个瀑布图,显示您的 web 页面上的所有请求(如下所示)。然后,您可以分析每个请求,看看是什么导致了您站点上的延迟和性能问题。当我们说我们正在做瀑布分析时,我们指的是这个。下面是每个状态颜色含义的更深入的总结和/或定义。

Pingdom waterfall analysis

Pingdom waterfall analysis

DNS(粉色)

那么什么是 DNS 呢?好吧,把它想象成一本电话簿。有一种叫做域名服务器的服务器,它保存着关于你的网站的信息,以及它应该被路由到哪个 IP 地址。当您第一次通过 Pingdom 运行您的网站时,它会执行一次新的查找,并且必须查询 DNS 记录来获取 IP 信息。这导致一些额外的查找时间。DNS 服务器的位置也很重要。

DSN delays in Pingdom

DNS delays in Pingdom

当您多次通过 Pingdom 运行您的网站时,它会缓存 DNS,因为它已经知道 IP 信息,不必再次执行查找。这就是为什么你的网站在多次运行 Pingdom 后会显示得更快。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

正如您在下面的屏幕中看到的,在我们运行的第二个测试中,初始文档加载的 DNS 查找时间是 3.6 毫秒。通常,它会下降到 0 毫秒,因为请求已经被缓存。这是一个很多人误解的领域!

Cached DNS in Pingdom

Cached DNS in Pingdom

此外,您可以通过使用高级 DNS 服务来进一步优化它,此外它还有许多额外的好处。我们 Cloudflare 的免费 DNS 也快!查看 Cloudflare 的自动平台优化

为什么你的网站在多次测试后会显示得更快的其他原因。其中之一是,如果你正在使用一个内容交付网络。对于那些不熟悉 CDN 的人来说,它是一个全球服务器网络,可以缓存你的内容(JS、CSS、图片等)。)在离游客更近的地方。当你第一次通过 Pingdom 运行你的网站时,你可能不得不从 CDN fresh 获取资源。CDN 缓存的工作方式很像 DNS。一旦被缓存,它在连续加载时会快得多。

加速 DNS 的另一个技巧是使用 DNS 预取。这允许浏览器在后台对页面执行 DNS 查找。你可以通过在你的 WordPress 站点的标题中添加一些代码来做到这一点。请看下面的一些例子。

<!-- Prefetch DNS for external assets -->
 
  
 

或者,如果你运行的是 WordPress 版本 4.6 或更新版本,你可能想要使用资源提示。开发者可以使用wp_resource_hints过滤器为dns-prefetchpreconnectprefetchprerender添加自定义域名和网址。

SSL(紫色)

紫色的状态颜色代表您的浏览器进行 SSL/TLS 握手的时间。每当你在 HTTPS 上运行一个网站时,由于加密过程(SSL/ TLS 握手),都会有一个 SSL 证书和额外的时间。在我们的示例域中,我们在 Kinsta 的 web 服务器和 CDN,KeyCDN 上都有一个证书。因此,在从 web 服务器和我们的资产加载初始 HTML 文档时,都有一个 SSL 协商时间。

SSL load time in Pingdom

SSL load time in Pingdom

虽然运行 HTTPS 有轻微的开销,但现在这并不重要,这要感谢 HTTP/2,一种帮助加速网络的新协议!由于浏览器支持,HTTPS 需要使用 HTTP/2。查看我们的 HTTP/2 终极指南。

同样需要注意的是,即使在 2018 年,也不是所有的提供商都支持 HTTP/2。这既包括虚拟主机端,也包括 CDN 端。所以当你购买主机和 cdn 的时候,确保两者都支持它!Kinsta 为其所有 WordPress 客户端支持 HTTP/2 而自豪。

截至 2018 年年中,Pingdom 终于将其工具升级为使用 Chrome 60 及更高版本。您可以看到在请求头中使用了user-agent。之前他们使用的是 Chrome 39,Chrome 直到版本 49 才支持 HTTP/2。所以我们很高兴地说 Pingdom 工具现在在运行测试时显示了 HTTP/2 的所有优势!👏

Pingdom HTTP/2 support

Pingdom HTTP/2 support

连接(蓝绿色)

Pingdom 中的连接时间指的是 TCP 连接,或者创建一个 TCP 连接所需的总时间。您不需要理解这是如何工作的,但这只是主机/客户机和服务器之间必须进行的一种通信方法。

Pingdom connect time

Pingdom connect time

等待(黄色)

Pingdom 的等待时间是指到达第一个字节的时间,在某些工具中也称为 TTFB。 TTFB 是一种用于表示 web 服务器或其他网络资源的响应性的度量。一般来说,任何低于 100 ms 的都是可以接受的,都是好的 TTFB。如果您接近 300-400 ms 的范围,那么您的服务器可能配置错误,或者是时候升级到更好的 web 堆栈了。

Wait time - TTFB

Wait time – TTFB

减少你的 TTFB 最简单的方法是什么?两个最好的方法是有效的 WordPress 缓存和一个 CDN 。所以我们来做几个测试。

不带 WordPress 主机缓存的 TTFB

在清空 WordPress 网站上的缓存后,我们首先运行了一个测试。这意味着它必须再次预加载缓存。我们的总加载时间是 541 毫秒,我们最初请求的 TTFB(等待时间)是 185.2 毫秒。

Pingdom TTFB before WordPress cache

Pingdom TTFB without WordPress cache

带有 WordPress 主机缓存的 TTFB

然后我们重新运行测试。它现在直接从缓存提供服务。如您所见,我们的总加载时间下降到了 392 毫秒,初始请求的 TTFB 现在是 52.8 毫秒!这就是缓存的不同之处。

Pingdom TTFB with WordPress cache

Pingdom TTFB with WordPress cache

如果你有一个网站为全国各地或全球各地的访问者提供服务,另一个大大降低 TTFB 的简单方法是使用 CDN。我们再次运行了一些测试来显示差异。

不带 CDN 的 TTFB

我们首先在禁用 CDN 的情况下运行测试,正如您所见,我们的总加载时间为 1.93 秒,我们在一项资产上的平均 TTFB 约为 176 毫秒。

TTFB without CDN

TTFB without CDN

带 CDN 的 TTFB

然后,我们启用我们的 CDN 并重新运行测试。我们的总加载时间降至 1.21 秒,我们在 CDN 资产上的平均 TTFB 现在为 4.6 毫秒!CDN 能带来多大的不同。

TTFB with CDN

TTFB with CDN

另一个需要注意的要点是,我们选择了“太平洋-澳大利亚-悉尼”的地点来进行测试。为什么?因为我们想向你展示真正的进步。在这个例子中,我们的 WordPress 站点由 Kinsta 托管在 Google Cloud 上,位于美国的中心位置。通过对澳大利亚进行测试,我们可以展示 Kinsta CDN 缓存如何提高速度并减少 TTFB。

当然,拥有一个好的 WordPress 主机和一个精心设计的架构对于降低你的 TTFB 也是至关重要的。

发送(橙色)和接收(绿色)

Pingdom 中的发送和接收状态不需要太多的解释。发送时间就是 web 浏览器向服务器发送数据的时间。接收时间是 web 浏览器从服务器接收数据所花费的时间。这两者在你的测试中通常都很低或者不存在。

HTTP 响应标头

您还可以在进行瀑布分析时单击单个请求,并查看 HTTP 响应头。这提供了有价值的信息。在下面的屏幕中,我们可以立即看到 web 服务器上启用了 gzip,它是由缓存(命中,否则会显示未命中)、缓存控制头、过期头、浏览器用户代理等提供服务的。

HTTP response headers

HTTP response headers

案例研究领域配置

如果你在我们的瀑布分析文章中看到了这一点,那你就有得吃了。看到人们分享技巧和案例研究,却不分享他们是如何做到这一点的,总是令人恼火。下面是我们对上面使用的案例研究域的精确配置!随意复制它。

体系结构

  • 案例研究域由 Kinsta 托管在美国的 Google 云平台上(美国爱荷华州康瑟尔布拉夫斯(Council Bluffs,USA-central 1))。Kinsta 目前提供 35 个不同的数据中心供选择。GCP 的高级层网络包含在所有针对闪电般快速网络延迟的计划中。
  • Kinsta 使用 HTTP/2、 NginxMariaDB ,这些都有助于快速加载。
  • 该网站使用的是 KeyCDN,它为 Kinsta CDN 提供支持。免费 CDN 带宽包含在所有托管计划中。
  • 网站没有使用任何缓存插件Kinsta 在服务器级缓存一切,这大大简化了事情!
  • 该网站使用的是 PHP 7.3。PHP 的新版本总是表现出巨大的性能改进。看看这些 PHP 基准测试。Kinsta 允许您通过按下按钮的在两者之间切换。

Update PHP version of WordPress site

Update PHP version of WordPress site

WordPress 插件和主题

以下是影响 WordPress 电子商务网站性能的插件列表。

进一步阅读的推荐教程:

摘要

正如您所看到的,了解 Pingdom 速度测试工具如何更好地工作以及所有图表的含义可以帮助您在性能方面做出更加数据驱动的决策。

瀑布分析对于了解你的资产是如何加载的,以及它们是如何受到你的 WordPress 主机、物理位置、CDN 等的影响是至关重要的。我们希望这篇文章能帮助你更好地解决网站的速度和性能问题。

有其他好的 Pingdom 技巧吗?请在评论中告诉我们!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

2022 年 Pinterest 营销技巧和策略

原文:https://kinsta.com/blog/pinterest-marketing/

许多人误以为 Pinterest 是 DIY 妈妈和新娘的快乐“软”社交媒体网站,在那里一切都是完美和时髦的。虽然这种假设不一定是错误的,但 Pinterest 作为一种实用的营销工具经常被忽视,这对那些没有花时间在 Pinterest 营销策略上的人不利。

诚然,与其他顶级社交网站相比,人们低估了 Pinterest。事实上,许多人甚至不会称它为 社交网络 网站——从技术上讲,它是一个“社交书签工具”。

不管你叫它什么,Pinterest 实际上比世界上的 Facebooks 和 Instagrams 更容易掌握。至少与这些巨头相比,Pinterest 拥有几乎不受限制的有机覆盖范围和轻松的学习曲线,这要归功于重大更新较少这一事实。

尽管你可能会被贴上“小”的标签,但 Pinterest 背后的数字却讲述了另一个故事。Pinterest 的视觉搜索引擎吸引了 2 亿月度活跃用户超过 20 亿月度搜索,以及超过 1000 亿月度 pin。

Pinterest users

Pinterest users (Img Source: Pinterest)

仍然不相信 Pinterest 是你应该去的地方?这个怎么样——网站的视觉特性让人们进入购物状态,比任何其他社交网络都更能促使人们做出合理的购买决定。看看这个:

Pinterest 最好的一点是它有持久力。如果你更有兴趣花时间创造持久的常青内容而不是创造短暂的内容(比如 Instagram、脸书和 Snapchat 上的故事),那么 Pinterest 可能就是你最适合的商务社交网络。

Pinterest 上的常青树内容是所有社交网站中半衰期最长的——151,200 分钟(也就是 105 天!).相比之下,脸书邮报的 90 分钟和推特的 24 分钟,你花在 Pinterest 营销上的时间已经可以证明有更好的回报。

别忘了阅读我们的相关帖子:视觉内容策略:如何使用视觉效果获得更多流量

当然,在你追随 Pinterest 潮流之前,你必须先确定它是否适合你的品牌。

Pinterest 人口统计

尽管越来越多的男性加入 Pinterest(40%的新注册用户是男性),但它仍然主要是女性的游戏。Pinterest 声称其用户代表了 45%的网络女性,相比之下只有 17%的网络男性。

Pinterest Demographics

Pinterest Demographics (Img Source: Social Media Today)

根据明尼苏达大学和佐治亚理工学院的一项研究,Pinterest 上最受欢迎的话题包括:

  • 食物和饮料
  • 工艺
  • 家居装饰
  • 女性时尚

Pinterest 上最受男性欢迎的话题是:

  • 摄影
  • 艺术
  • 设计
  • 家居装饰

Pinterest 在所有年龄段都很受欢迎。其最大的观众群是千禧一代(36%),紧随其后的是 34%的 X 一代(30-49 岁)。

Pinterest age demographics

Pinterest age demographics

与推动购买意向一致,Pinterest 非常有抱负。47%的用户报告称,他们使用 Pinterest 来帮助规划生活事件。这为相关品牌(尤其是奢侈品牌)提供了一个制定 Pinterest 营销策略的机会。

尽管这些统计数据代表了 Pinterest 上的一些最佳目标人口统计数据,但它们无法回答每个人关于 Pinterest 营销对他们公司来说是否是一项好投资的问题。要做到这一点,你必须使用这一指导作为一个初始的气压计,然后潜入并尝试一下。

为了获得最佳效果,请遵循 Pinterest 的营销策略:

如何在你的博客上使用 Pinterest

就推荐流量而言,Pinterest 可以成为你最好的“社交媒体”来源。仅仅这个简单的事实就使得考虑将 Pinterest 营销整合到你的博客中是值得的。

Pinterest traffic

Pinterest referral traffic

值得注意的是,Pinterest 在内容显示方式上不同于其他社交媒体账户。“图钉”,或个人 Pinterest 帖子的名称,可以查看:

  • 在主页提要上,通常根据用户级别上与您最相关的内容进行排序
  • 当使用搜索来查找与某些关键字相关的 pin 时
  • 当浏览食物和饮料、动物或家居装饰等类别时
  • 在您的个人资料中,在您自己的主题图板下(“图板”是相关图钉的集合)

这种多方面的组织方式使用户更容易有机地找到你的内容,当他们对你提供的内容感兴趣时。正因为如此,专注于 Pinterest 营销策略可能意味着将人们直接推向你销售漏斗的“购买”阶段。

有几种方法可以将 Pinterest 整合到您的网站中,有三个方面可以优化 Pinterest:

  • 轮廓
  • 纸板

现在,我们将把我们的 Pinterest 技巧特别集中在图钉上,因为它们构成了 Pinterest 内容的基础。

Pinterest 图片的最佳实践

有几种方法可以增加你的 Pinterest 图片的可见性,比如使它们在视觉上吸引人,为网站使用正确的图片,以及使用正确的关键词来提高可发现性。

使用正确大小的图像

发布到平台的图像被缩放。具体来说,图像的宽度缩放到 236 像素。当您单击扩展给定图钉的图像时,图像将缩放到 564 像素的宽度,并且图像的高度也相应缩放。

据 Pinterest 报道,最好的图像长宽比在 2:3 到 1:3.5(宽高比)之间,最小宽度为 600 像素。

Pinterest 为美丽的 Pinterest 图片提示

创建吸引人的 Pinterest 图片的一些快速技巧:

  • 使用有品味的品牌。 Pinterest 认为,有品位的品牌有助于增加回帖和参与度。包括你的产品包装的照片,或者你的品牌的标志/水印。如果你还没有一个标志,试着现在就用 Logaster 创建它。
  • 使用生活方式图片和文字覆盖图来吸引注意力并帮助理解这个想法。列表图片和信息图也是 Pinterest 图片的流行类型。
  • 看看你发布的帖子上当前的颜色和设计,然后调整你的 Pinterest 图片,使其从云中脱颖而出。

Pinterest stand out

Pinterest stand out

使用正确的关键词

Pinterest 是互联网上最大的搜索引擎之一,所以就关键词研究(和使用)而言,也是如此。虽然 Pinterest SEO 的完整入门超出了本文的范围(但是如果你对评论中的后续文章感兴趣,请告诉我们!),原则很大程度上与谷歌的 SEO 相同。

Pinterest 为搜索引擎优化提供的一些快捷技巧:

  • Use your favorite keyword research tool (like Google Keyword Planner or my personal favorite, Ahrefs) and compare results with the more niche Pinterest Keyword Tool.

    Pinterest Keyword Tool

    Pinterest 关键词工具

  • 回头参考一下你应该在 Pinterest 上优化的三个方面:图钉、图板和你的个人资料。

  • 使用您的关键字,建立 20+板与 100+针,每个。

如何在你的博客中加入 Pinterest

在 Pinterest 上获取你的内容只是成功的一半。另一半呢?让别人为你做这件事。

用户可以通过三种方式获取 Pinterest 论坛的内容:

  • 从您的电脑上传内容。你将负责添加一个链接和描述,以确保它能被相关的 Pinners 找到。
  • 重新锁定某人已经上传的图片
  • Pin 按钮,在网站上可以找到(或者在你的浏览器中,作为安装的扩展)。单击时,这些引脚按钮会自动生成引脚预览,并提示用户要将其保存到哪个电路板。

Pinterest save button

Pinterest save button

下面的 Pinterest 技巧主要是让人们在平台上锁定你的内容并关注你。

Pinterest 大头针按钮

有两种大头针按钮:

  • 大头针按钮
  • 关注 Pinterest 按钮

“关注 Pinterest”按钮会弹出一个小对话框,预览你账户的最新 pin,这样你的访问者就不必离开你的网站来关注你。

Follow Pinterest button

Follow Pinterest button

您可以通过两种不同的方式将大头针按钮添加到您的网站:

  • 作为一个通用按钮,用户可以点击它将您的网页固定到 Pinterest
  • 当用户将鼠标悬停在图像上时,该按钮会出现在网站上的每个图像上

社交分享插件通常带有可配置的 Pinterest Pin 按钮,访问者可以使用这些按钮来分享你的网站内容。一些 Pinterest 营销插件被编程为固定帖子的第一张图片,而另一些则允许你设置固定哪些特定图片。

如果你有一个 WordPress 网站,social share 就是一个这样的插件,它可以使用社交分享按钮和 Pinterest 营销。除了能够使用它来设置自定义 Pinterest 图像和回退,他们的 Pro 版本还有一个独特的功能,称为“Pin image for browser extensions”。当切换到 ON 位置时,当访问者使用浏览器扩展来锁定时,此开关会将您的自定义 Pinterest 图像添加到要锁定的图像选项中。Social war Pro一个网站的许可费起价为 29 美元/年。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Custom Pinterest image in WordPress

Custom Pinterest image in WordPress

除了使用大头针按钮,你还可以选择在其他网站/社交网络上添加预先格式化的大头针链接,鼓励人们使用该链接来固定图片。Pretty Presets 的劳拉·托马斯(Laura Thomas)相当成功地做到了这一点,她将 10%的销售额归功于 Pinterest。

Pinterest 小工具

另一种让网站访问者访问(并关注)你的 Pinterest 论坛的方法是嵌入 WordPress widgets :嵌入的 Pinterest 论坛、你的 Pinterest 个人资料或你最新的 pin。

AccessPress Pinterest WordPress plugin

AccessPress Pinterest WordPress plugin

一种方法是安装 AccessPress Pinterest 插件。AccessPress Pinterest 插件是免费的,功能丰富,允许你在你的 WordPress 网站上设置与 Pinterest 相关的功能,包括:

  • 将它钉在图片上
  • 关注你网站上的 Pinterest 按钮
  • Pin 板小工具
  • Pinterest 个人资料小工具
  • 最新引脚馈送

一旦你激活了插件,你就可以开始通过一个小部件或者短代码来嵌入 Pinterest 板。

Pinterest 还提供了一个 widget builder ,允许你为你的网站/应用程序创建/添加按钮/widget——不需要插件。只需按照他们的指示复制/粘贴结果代码。

Pinterest Widget builder

Pinterest Widget builder

Pinterest 的网站按钮和 widget 产品包括:

  • 保存按钮
  • 跟随按钮
  • 粉红色的
  • 一块木板
  • 您的个人资料

你需要了解的 Pinterest 功能和工具

Pinterest 已经从一个简单的在线公告板发展到提供支持其业务和营销功能的功能。

Pinterest 商业账户

Pinterest 在 2012 年推出了商业账户功能。

如果你已经有一个 Pinterest 账户,你可以很容易地免费将你的个人账户转换成商业账户。如果你是一家刚刚开始使用 Pinterest 的企业,你可以直接注册一个企业账户

创建 Pinterest 商业帐户意味着可以使用其他特性和功能,包括:

  • 更好地使用平台的教育内容,如案例研究和 Pinterest 最佳实践
  • 独家商业帐户功能,如丰富的个人识别码、促销个人识别码(Pinterest 广告)和可购买的个人识别码
  • 像其他社交媒体分析套件一样,Analytics 可以帮助你了解人们是如何与你的公司互动的:在 Pinterest 和其他网站上。

Pinterest 分析

Pinterest 分析套件分析三类数据:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

  • 你的 Pinterest 档案:显示分为四个部分的数据:浏览量、保存量、点击量和历史记录。
  • 你接触到的人:看到你的图钉、关注你的图板或以某种方式与你的内容互动的人的详细信息。这也显示了你的大多数观众来自哪个国家和城市,性别,语言等等。
  • 来自你网站的活动:要访问该功能,Pinterest 将要求你验证你的网站,一旦你这样做了,你将能够看到人们在你的网站上参与最多的内容。您还可以查看链接回您网站的链接的每日平均浏览量、保存量(重新链接)和点击量。

丰富的引脚

当你注册 Pinterest 商业账户时,你将获得丰富的 pin 码。丰富的大头针是提供关于大头针的额外上下文的大头针——如果你熟悉 SEO,这是一个类似于丰富片段的概念。

有四种类型的富 pin:

  • App: 显示安装按钮,鼓励下载;截至本文撰写时,仅兼容 iOS 应用程序。
  • 文章:通过显示文章的标题、作者和简介,帮助 Pinners 保存对他们重要的故事。
  • 产品:让购物更简单。包括定价、可用性以及在哪里可以买到该产品。
  • 食谱:包括配料、准备时间和烹饪说明等信息,以食谱为特色。

如果您有一个经过验证的帐户,您网站的商标将被添加到所有 Rich Pins 中。你可以在 Pinterest 的开发者区进行操作。

Pinterest rich pins validator

Pinterest rich pins validator

丰富的图钉有助于改善潜在读者对图钉的体验——将它们视为内容的广告文案。

由于成功使用了丰富的 pin 码,家居装饰品牌 decor 的网站访问量增加了 36%,转化率增加了 51%,交易量增加了 106%,收入增加了 173%。

如何在 Pinterest 上获得丰富的图钉

如上所述,要访问 Pinterest 的丰富 pin,你必须首先验证你的网站。

这可以通过向您的站点添加元数据(meta 标签)或 oEmbed point 来实现。如果你在这方面有困难,试着向你的网站开发者寻求帮助。

为了确认这一点,测试 Rich Pins,然后申请在 Pinterest 上访问。

可购买的别针

可购买的 pin 是 Pinterest 的一个相对较新的功能,允许人们无需离开 Pinterest 就可以购买你的产品——类似于新的 Instagram Shoppable feed。

Buyable pins

Buyable pins

可购买的 pin 在与电子商务平台整合时效果最佳,如 Salesforce Commerce CloudBigCommerceShopify 。上面提到的这些电子商务平台的 Pinterest 页面都链接到如何申请和设置可购买 pin 的说明。

可购买的 pin 码在手机和网络平台上都有效。一旦您被批准使用可购买的 pin 码(可能需要 5 个工作日),您将在您的 Pinterest 个人资料页面上看到一个蓝色的“商店”链接。您所有活跃的可购买 pin 将显示在此板上,因此您可以在一个地方轻松跟踪您所有的可购买 pin。

坏消息呢?目前在 Woocommerce 上还不支持可购买的 pin 码(与 WordPress 整合的很好)。由于 Woocommerce 掌控了 42%的在线商店,我们对在不久的将来获得支持抱有希望。更多关于可购买 pin 的信息,请查看 Pinterest 的文章。

Pinterest 广告

像脸书和许多其他顶级社交媒体网站一样,Pinterest 有一个功能,允许用户付费推广他们的 pin 以获得更多的浏览量。

Promote pins on Pinterest

Promote pins on Pinterest

推广大头针,也被称为 Pinterest 广告,就像普通的大头针,实际上看起来不太像广告——在广告拦截器和受够了互联网用户的时代是有益的。由于 pin 会永久存在,因此您可以在任何需要的时候提升相关 pin。Pinterest 报道称,当使用推广的 pin 时,点击量增加了 20%。

该功能目前仅在美国、加拿大、澳大利亚、爱尔兰、英国和新西兰可用。您可以直接从您的 Pinterest 商业档案或通过 Pinterest 广告管理器推广 Pin。

Pinterest 提供了三种广告活动类型来使用推广的 pin 码与您的业务目标保持一致:

广告形式包括推广大头针、推广视频、一键大头针(只需轻轻一点,就能把人们带到内容来源的网站)、推广应用大头针和电影大头针(比如当你滚动经过脸书的视频时,它们就会开始移动)。

Pinterest 最近发布的一项关于广告的更新涉及搜索广告,这让企业有机会在搜索者对某个想法或产品表达某种意图或兴趣时,将广告放在他们面前(这是使用 Pinterest 鼓励购买意图的又一个胜利)。

与其他社交网站一样,你只有在获得结果时才会为 Pinterest 广告付费,这使得它成为你的 Pinterest 营销工作的一项相当安全的投资。

Pinterest 营销策略

Pinterest 营销获得普遍成功的几个快速技巧:

  • Use horizontal images. You can easily create a visually-appealing template on Canva.

    Pinterest graphic templates

    Pinterest 图文模板

  • 与其他博主、有影响力的人和名人建立关系。 Instagram 并不是唯一一个你可能想和有影响力的人一起工作的地方。例如,Target 曾与顶级 Pinterest 账户 Oh Joy、Wit & Delight 和 Poppytalk 合作。Pinterest 目前正在研究创建一个工具,让品牌更容易与影响者合作(Instagram 已经做到了这一点)。与影响者一起工作可能包括创建社区论坛,给影响者产品巧妙的风格和别针。如果你追求这种类型的影响者/Pinterest 营销,你可能还会要求影响者管理来自其他创作者的内容(有点像风格指南)。

  • 加入 Pinterest 集团董事会。群组讨论板是共享的讨论板,邀请许多不同的用户参与讨论。它们通过使用一个特殊的组图标来区别于个人讨论板。关注群组板的 Pinner 仅作为所有者的关注者出现,但是来自所有贡献者的群组板的所有pin 可以出现在关注它的每个 Pinner 的主页 feed 中。想想加入一个有超过 100,000 名追随者的贡献者的小组委员会意味着什么!使用像 PinGroupie 这样的工具来决定你应该加入哪个小组。

  • 启动 Pinterest 群组板块。除了寻求成为一个受欢迎的 Pinterest group 董事会的成员,你还可以创建一个并邀请你的客户。这可以帮助你建立社会证明,思想领导,或执行客户研究。可以创建一个社交验证板,邀请人们展示他们如何使用你的产品。客户研究板可用于邀请客户就未来或当前产品提供意见。

  • 举办一场竞赛或赠送活动。让在 Pinterest 或 repinning 上关注你成为竞赛机制的一部分。

  • 钉在日程表上。理想情况下,你会在 Pinterest 上每天发布 4-5 次

  • Post during peak times to get more eyes on your Pin. Pinterest peak times are 8-11PM in your local timezone, especially on Saturdays. Other high traffic times include Fridays at 3PM; 2-4 AM and PM, every day; 9 PM daily (which is considered to be the best peak time).

    Best times to post on Pinterest

    在 Pinterest 上发帖的最佳时间(Img src: CoSchedule)

  • 重新钉别人的内容。如果你是一个品牌,品牌标识应该有 20%是你自己的,80%是别人的。

  • 经常重新锁定你自己的内容,这样用户会一直看到你的锁定。

锁定程序

频繁地在 Pinterest 上发帖可能会很困难,因为内容是常青树,在任何给定的 Pin 获得关注之前可能需要一段时间。当涉及到对时间敏感的大头针时,就像在比赛中使用的那些一样,确保在比赛结束后删除大头针,或者将比赛结束日期直接放在图像上。

幸运的是,有像 Tailwind 这样的 Pin 调度工具。这些程序允许您安排您的 Pin 并循环(重新发布)旧 Pin,甚至可以分析数据,根据观众参与度找到您的最佳 Pin 时间。

针对网站用户的 Pinterest 营销

Pinterest 不仅仅是一个可爱的网站——它是一个可视化搜索引擎,已经发展成为一个强大的后期漏斗营销平台,拥有大量功能。

Pinterest 的用户大多是女性,由于该网站的视觉特性,他们很容易购买。除了驱动购买行为,还代表了内容保质期最长的社交平台。

注册一个商业帐户,并获得 pin!如果你有任何令人敬畏的 Pinterest 营销技巧要分享,请发微博到@ Kinsta——我们会分享我们的最爱!

F Design 创作的“Creative Commons Pinterest icon”在 CC 下由 2.5 授权


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

解剖一个完美的组合网站来展示你的工作

原文:https://kinsta.com/blog/portfolio-website/

该卷起袖子了!今天我们将深入投资组合网站的主题,以及哪些行业专家应该使用它们。学习如何创建一个好看的网站,独特地展示你的工作和这样做的重要性。你希望访客和潜在客户在下一个项目中记住你。

什么是作品集网站?

作品集网站是展示你的作品和让别人了解你的独特方式。对于你的项目、案例研究和你的信息来说,它就像一个常青的平台。此外,这也是表达你的个性、经历和能力的最佳方式之一。

拥有自己的网站意味着客户总是能够找到你,如果他们感兴趣,会主动联系你。如果你现在没有网上业务,那你就落伍了。😉作品集是摄影师、设计师、开发者和各种各样的艺术家在网上展示他们作品的好方法。它让你通过你的作品——照片、平面设计、草图等——反映你的身份。
T3】

为什么你需要一个投资组合网站

简而言之,你需要一个作品集网站来展示你的作品。无论你是个人、两个人的小团队还是十个人的公司,拥有独特的在线方式都是至关重要的。网站作品集将帮助你从人群中脱颖而出,展示你的独特性,建立信任,并确保其他人能真正找到你。

在某些领域,网站组合比其他方面更重要。如果你发现自己处于以下情况之一,可以有把握地假设你需要一个投资组合,就像一本书需要文字一样:

  • 网页设计
  • 网络开发(外包,网上商店)
  • 平面设计(标志设计、公司标识、传单、目录、包装)
  • 营销(数字营销、平面设计、搜索引擎优化、竞价排名广告)
  • 艺术设计(插图、视频、音频、摄影)

但这并不仅限于此,室内设计师、艺术家、模特、作家等也是如此。主要的想法是,你是一个创作者,你需要展示你的作品。作品集网站让你高质量地做到这一点。

举例说明您为什么需要投资组合

当有人需要一个新产品、服务或公司的标志时会发生什么?大多数人会通过简单的谷歌开始搜索(或者他们可能会从朋友或商业伙伴那里得到建议)。所以首先,你想被搜索到。为了从你客户的角度来演示,这里有一个小实验。

考虑到多数方法,我使用了谷歌。我开始简单地在搜索栏键入“标志设计师组合”,并希望找到一个真正的人谁可以创建我的标志。就在那里,一群潜在的标志设计师在那里等着你。我浏览了一下他们的网站,好像都挺不错的。现在,要做出选择,只是喜好、口味和预算的问题。

Google 1st page search results for ‘logo designer portfolio’

Google 1st page search results for “logo designer portfolio”

如你所见,选择就在我面前。我可以选择个人或者机构。我可以了解每个人的服务,看到他们的投资组合,阅读他们,并研究他们的项目流程。基本上,他们的网站给我的感觉是他们是谁,他们做什么,如果我决定与他们合作,会有什么期待。

既然你知道了至少一个你需要作品集的原因,那么是时候去了解你的网站上应该包含的最重要的东西了。

投资组合网站的基本要素

每个项目都需要一个公式——一个目标。没有它,就很难给人留下深刻印象。

When creating a portfolio website, first ask yourself, what is the purpose? 🤔Click to Tweet

一个作品集网站的基本公式包括一个标志、标语、你最好的作品和联系信息。有时这是可行的,但在很多情况下,这是一个糟糕的实现。为了从另一个角度突出你的作品集,考虑加入其他关键元素来提升你的作品集的用户体验:案例研究,推荐,博客,甚至是你目前正在做的一个项目。这些都是至关重要的因素。

当你设计投资组合网站时,考虑一下你未来的客户应该能找到的元素。问问你自己—你投资组合的目的是什么?你是想卖你的服务,是想找工作想被录用,还是一个关于你的网站?你的作品集网站的主要焦点应该是吸引访问者的注意力,下面的元素将帮助你做到这一点。

你作品的展示

失去访客的注意力只需要几秒钟,所以一定要聪明地利用这几秒钟。你的潜在客户将首先看到视觉效果,如果他们喜欢他们所看到的,他们将继续寻找更多的细节。换句话说,你需要一个令人敬畏的、吸引人的作品展示。

这可以通过多种方式实现——照片幻灯片、视频演示、缩略图画廊等。例如,如果你是一个标志设计师,确保你展示了一个不同变化的标志的高质量的图片。把商标印在产品、名片上,用不同的颜色展示出来——这将会扩展你的能力。

看看这个作品集网站。它是由伦敦设计师兼作家蒂姆·史密斯创作的。在其中,他使用缩略图画廊展示他的作品。

Portfolio website with thumbnail gallery

Portfolio website with a thumbnail gallery

您的“关于”页面

你的“关于”页面可以让你的潜在客户看到谁在幕后工作,了解你是谁,以及他们是否愿意和你一起工作。你可能会问,我从哪里开始呢?从最基本的开始——从你自己开始。为了使它更简单,下面是关于页面元素的关键清单:

你的名字

这听起来显而易见,但许多投资组合并不具备这一点。如果你的潜在客户想要对你进行调查,比如 LinkedIn 呢?大家好,我是马特……这是继续讲述自己故事的良好开端。

你的照片

一幅画给人一种更个人化的感觉。一张你的肖像或者一张你正在进行新设计的漂亮照片。这是最原始的方式让游客感受到你是谁。让它简单但有吸引力。

关于你自己的信息

通过讲述你的职业和个人经历来展示你的个性。你的教育,你学会了做什么,你喜欢工作的项目,奖励和认可。使用这一页来展示你的技能、你的思维方式和你的激情所在。让它简短、愉快、难忘。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

下面是艺术总监 Marcin Dmoch 的一个“关于”页面示例。他用明亮的色彩设计和讲述自己职业经历和最佳项目的小故事来展示自己。他还附上了一份可下载的简历,便于打印或转发给他人。这是一个简洁的设计,包含了有效的“关于”页面所需的所有关键元素。

Portfolio website about page

Portfolio website about page

个案研究

案例研究或报告是展示你项目全部范围的最佳方式。每个项目都应该有自己的故事,展示整个过程的进展,从开始到最后的结果。用大量的照片和笔记来分解这个创作过程,揭示每个项目背后的东西。

通过这种方式,你的访问者可以了解你的项目是什么样的,以及你是如何从最初的计划阶段发展到完成的。以下是您的案例研究中应包含的组件:

  • 项目目的:你为什么开始这个项目。
  • 目标:你完成了什么。
  • 方法:你是如何完成的。
  • 项目持续时间:你花了多长时间。
  • 你的角色:你如何为团队或项目做出贡献。
  • 最终产品概述:图片、视频、链接等。

这是一个很好的展示案例研究的例子,来自网站设计师兼品牌顾问 Darian Rosebrook。他用自己的作品集,通过一篇揭示每个项目本质的文章来呈现之前的作品。

Portfolio website case study

Portfolio website case study

再比如金斯塔。他们没有作品集网站,但他们的案例研究页面是一个精心设计的好例子,旨在向潜在客户展示他们引以为豪的作品。

Kinsta case study example

Kinsta case study example

构建您的案例研究部分需要一些时间吗?当然可以,但这是任何投资组合网站的必备。

证明书

对于那些刚刚登陆你的页面的人来说,从你的客户那里听到一些话是非常有意义的。你可以列出你的技能,告诉别人你有多棒,但是让别人说会有很大的影响。联系你以前的客户,询问你可以在网站上使用的报价。喜欢和你一起工作的人会很高兴地称赞你的出色工作。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

看看平面设计师 Francesca McWhirter 的这个例子。为了让她的客户评价页面真正流行起来,她从一个动态的英雄形象开始,然后继续下面的客户评价。

Portfolio website client testimonials

Portfolio website client testimonials

行动呼吁(CTA)

行动号召是对你投资组合目的的补充。为了帮助你为你的网站想出一个行动号召,提醒你自己你的网站的目的。你希望访问者采取什么行动?你的网站应该提供客户联系你的各种方式。确保包括你的商务电子邮件地址,即使你使用联系表格,因为一些客户更喜欢它而不是表格。

在下面的例子中,创意机构 Lounge Lizard 为客户提供了多种联系方式。您可以使用电子邮件地址或填写“索取建议书”表格,直接在您的收件箱中获得报价。

Portfolio website CTA/contact

Portfolio website CTA/contact

博客和辛迪加

写博客是分享你的想法和给那些想要合作的人增加价值的一种极好的方式。创建定期的博客内容给访问者一个再次访问你的网站的理由。这对 SEO 也很好——谷歌喜欢定性内容!

然而,博客并不是唯一的方法。为了给你的工作制造声势,社交媒体也很有用。例如,拥有 10 亿活跃用户的 Instagram】是展示你的作品、风格、展现你独特个性的绝佳方式。这有助于建立信任,培养相关受众。内容营销也意味着你自己的 YouTube 频道,一个播客或者网络研讨会。选择自己喜欢的方式,表达自己。创意艺术家 Elsa Muse 就是一个很好的例子,她写了自己的博客并在 Instagram 上发布。

Portfolio website blog

Portfolio website blog

不要忘记把你的作品放在一起!就像内容聚合一样,你可以将你最好的作品上传到像 BehanceDribbble 这样的地方。因此,即使你可能有一个惊人的投资组合网站,也要确保利用这些其他网络来获得额外的免费流量。

Behance

Behance (Example: Maja Szakadát)

要包含的额外内容

你的作品集网站可以包含任何内容。除了基本的关键元素之外,还有更多的项目可以更加突出你的网站。一个工作原型演示,图标集的免费样品,免费软件,主题,甚至插件。

如果你在博客、播客、媒体、娱乐频道上客串,一定要提到他们。如果客户想更多地了解你的个性和工作,面试是很好的阅读材料。同样,为你的成就感到骄傲,不要害怕分享你获奖的细节。

你需要建立一个投资组合网站

当你建立一个网站时,确保它有效、实用且易于维护是很重要的。选择正确的工具对于构建专业外观的作品集网站非常重要。最好和最受欢迎的网站建设平台之一—WordPress是自由职业者的完美解决方案。WordPress 通过无数可用的主题插件给你开箱即用的能力。

WordPress 主题控制你网站的视觉方面:设计、颜色和布局。相反,插件是 WordPress 的扩展,它获取核心 WordPress 软件并编辑或删除其功能。

像联系表格、图片幻灯片、营销弹出栏这样的页面元素是你网站的一部分,通常是使用 WordPress 插件创建和添加的。你不应该在你的网站上使用过多的插件,因为这会(并不总是)让你的网站变得沉重和缓慢。相反,你可以使用网站生成器和一些其他必备插件来创建你的 WordPress 网站。这可以节省你的时间,帮助你更快地推出你的作品集(艺术家通常没有太多时间花在建立自己的网站上,对吧?)

选择平台后,接下来你需要的是域名和主机。如果你是一名自由设计师,在域名中抢注你的名字对个人品牌推广很有帮助。

一个高质量的 WordPress 主机,如 Kinsta ,将确保你的网站保持在线,快速导航,并且对你的潜在客户始终可用。使用包含的托管功能,如 CDN 可以帮助确保所有这些美丽的展示图片在全球范围内快速加载。别忘了优化它们

摘要

你的投资组合作为给你的潜在客户惊喜和留下深刻印象的机会。作品集网站可以让你在一个地方展示你所有的作品。这不仅对客户来说很好,而且也能帮助你激发下一个项目的灵感。

告诉别人你的技能和个性。通过案例研究表达自己的独特性。具有可搜索性,并与竞争对手保持同步。没有规则,只要你能让游客微笑并记住你,一切都会顺利。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

如何为你的品牌建立定位策略

原文:https://kinsta.com/blog/positioning-strategy/

当你想到像优步和 Instagram 这样的标志性品牌时,你会想到什么词?也许你会想到优步的“快速”和“实惠”,或者 Instagram 的“分享”和“朋友”。

我们与品牌的关联看起来可能是良性的,但它们对品牌的长期成功至关重要。

客户将你的品牌与什么联系起来会影响他们与你公司的互动。如果这种关联是积极的,他们可能会重复购买或向朋友推荐你。如果关联是负面的,他们可能会避开你的品牌或选择竞争对手。

为了控制消费者如何看待你的品牌,你需要正确定位你的公司。

当然,如果你有一个强有力的定位策略来建立长期的忠诚客户,这将会有所帮助。这篇文章将教你什么是定位策略,以及如何创建一个。

让我们开始吧。

什么是品牌定位战略?

定位策略有助于你勾勒出你希望客户如何看待你的品牌。本质上,它概述了你的品牌所熟知的“事物”。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

尽管我们经常将品牌定位与营销联系在一起,但你的定位策略会影响你业务的许多方面。这包括销售、客户服务、客户关系和订单执行。

制定定位策略有许多优势,因为它可以帮助您:

  • 塑造您的客户体验
  • 确保你制作的内容符合你的品牌愿景和目标
  • 建立品牌认知度
  • 设计高质量的营销策略
  • 推销你的品牌
  • 精心打造可识别的公众形象
  • 为你的品牌创造一个利基市场
  • 展示你的竞争优势

像任何与品牌相关的东西一样,这些优势只有在定位策略有效时才适用。有效的策略通常会仔细考虑客户的愿望和需求。此外,它们说明了品牌的优势和劣势,并概述了它们的竞争优势。

许多品牌通过 10-50 个词的定位陈述来分享他们的定位策略。这些就像一个使命宣言,除了使命宣言回答了“我们是谁?”定位陈述回答了这个问题:“我们做什么?”

我们将在“如何设计定位策略”一节中更深入地阐述定位陈述。

想让您的业务更上一层楼?📈从这份品牌定位指南开始🚀 点击推文

定位策略示例

虽然我们不知道每个品牌在内部是如何定位的,但你可以从他们的营销中看出大多数品牌的策略。

为了使定位策略概念化,让我们分析五个知名品牌的品牌案例。

1.充气屋(塑料等制,充气后竖立)

AirHouse 是一个物流平台,帮助人们组织和管理产品运输。

如果你看看 AirHouse 的主页,你会发现该品牌将自己定位为迎合向客户运送产品的零售和电子商务企业。

Airhouse website

Airhouse.

这个页面上的营销还告诉我们:

  • AirHouse 以提供快速简单的体验而自豪
  • AirHouse 可以帮助品牌增加订单履行规模
  • AirHouse 的“东西”是提供一个基于云的解决方案,实时同步您的履行数据

2.松弛的

Slack 是一款为团队设计的专业交流聊天工具。看看 Slack 的主页,你会发现 Slack 将自己定位为公司的“数字总部”。

The Slack website

Slack.

此外,Slack 将自己定位为:

  • 值得信赖的品牌,如首页提到的 Fox,Lonely Planet,Intuit,Carvana,Kiva,Target,DevaCurl 使用 Slack
  • 未来的工具,Slack 用“建设更美好的明天”这样的短语来描述你可以用 Slack 做什么
  • 一个与谷歌兼容的工具,Slack 会提示访问者“注册谷歌”

3.中环

RingCentral 是一家云通信公司,为小型、中型和大型企业提供语音、文本、传真和会议解决方案。

如果你看一下 RingCentral 的主页,你会发现该公司将自己定位为一个全方位的提供商,优先考虑让客户“连接”

RingCentral homepage

RingCentral.

向下滚动 RingCentral 的主页还显示,该公司通过提供“快速解决”的 24 小时支持、“更快投资回报”的专业服务、“加速业务增长”的集成解决方案以及提供“业务驱动洞察”的实时分析,使自己与竞争对手区分开来。

24-hour support from RingCentral

RingCentral 24-hour support.

4.蜂蜜

PayPal 旗下的 Honey 是一个浏览器扩展,收集热门网站的折扣券,并自动应用于用户的交易。

Honey 的营销是建立在社会证明扩展是值得信赖的基础上的。这份证据包括 Honey 在“30,000 多个网站”上工作,拥有“167,000 条 Chrome 商店评论”,并为“1700 万会员服务,并且还在增加。”

The Honey website

Honey.

如果你看看 Honey 的脸书页面,你也可以看到 Honey 把自己定位成顾客的朋友,用“一起更聪明地购物”和“加入 Honey”这样的语言 Honey 的客服邮箱,“【邮箱保护】”也是用的这个定位。

Honey Facebook page

Honey Facebook page.

5.美的功能

美容功能根据每位顾客的喜好生产个性化的美容、护肤和护发产品。

如果你看看 Function of Beauty 的网站,你会发现该品牌将自己定位为“可定制美容的世界领导者”这种定位很聪明,因为它提供了社会证明,同时强调美丽的功能是不同的,因为它允许定制产品。

Function of Beauty homepage

Function of Beauty.

定位感知地图

看了 RingCentral 和 Function of Beauty 的营销后,您可能已经注意到竞争对手在良好的定位策略中起着至关重要的作用。有效的定位策略描述了为什么你的品牌是独一无二的,从而将你与你的竞争对手区分开来。

当然,在设计定位策略时,并不总是容易看出你的品牌是如何独特的。

这就是定位感知图的用武之地。

定位感知图(也称为“品牌图”或“魔力象限”)是一种视觉表现,一次使用两个或更多因素来展示您的品牌与竞争对手相比的情况。当营销人员创建感知地图时,他们从目标客户的角度进行思考。

以下是感知地图的样子:

An example of a perceptual map

A perceptual map.

虽然您可以在地图中使用任何您喜欢的因素,但以下是许多品牌使用的一些常见因素:

  • 费用
  • 时间投资
  • 易用性
  • 产品质量
  • 客户服务
  • 可信赖
  • 供应链伦理
  • 收益性

虽然许多品牌使用感知地图作为内部工具来指导运营和营销决策,但一些品牌也选择分享其感知地图作为营销工具。例如,RingCentral 在其网站上发布了这张感知地图:

A magic quadrant comparing businesses in the communications field

A magic quadrant comparing businesses in the communications field.

定位策略的类型

到目前为止,我们已经从整体上介绍了定位策略。然而,有七种不同“类型”的定位策略,每一种都使用独特的角度。

这些战略是:

1.基于定价的策略

基于定价的策略根据成本、定价模式或你提供的资金价值来定位你的品牌。

例如,一个采用定价策略的品牌可能会将自己描述为“家庭负担得起”或“低价零售商”

然而,基于定价的策略并不总是玩到最后的竞争,因为像 Mouawad(出售380 万美元的手提包)这样的高级品牌也使用基于定价的策略将产品营销为奢侈品。

或者,像网飞和 Hulu 这样的品牌在他们的定位中使用他们的基于订阅的定价模式,因为基于订阅的定价允许消费者灵活地观看大量的内容目录,而不仅仅是一次租一部电影或一个节目。

2.基于产品的战略

基于产品的策略围绕产品和服务的质量来建立你的品牌定位。例如,产品定位策略可能强调产品是耐用的、可靠的、可靠的、时尚的、环保的、不残忍的、犹太的或纯素食的。

或者,基于产品的策略可能会用关键特征或优势来推销你的品牌。在语法上就是这么做的,因为它围绕提供一个程序来建立自己的品牌定位,这个程序给人们“实时建议以加强他们的写作”

The Grammarly about page

Grammarly “About” page.

3.基于使用的策略

基于使用的策略通过你的产品或服务为顾客做什么来定位你的品牌。

例如,Lawyer.com 法律服务将自己定位为他们所在地区的人和律师之间的中介,并打出“今天就与律师联系”的品牌或者,房地产网站 Zumper 承诺帮助用户“找到你的新开始”。

4.基于情境的策略

基于情境的策略将你的品牌定位为利基情境中的完美解决方案。本质上,这些策略说,“(品牌)对于需要(结果)的(小众用户)来说是完美的。”

生产笔记本外壳或手机壳等利基产品的品牌使用基于情境的策略,因为他们的产品只适用于特定的设备。

知名品牌也用这个定位。例如,Tylenol 将其旗舰产品 Tylenol 定位为基于情境的策略。该公司专门为那些希望通过对乙酰氨基酚来缓解疼痛的人设计了这种药物。

5.基于影响者的策略

基于影响者的策略将品牌定位为由名人、影响者或知名行业人士选择的公司。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

利用名人进行定位的一个最著名的例子是 Raycon。Raycon 是一家无线耳机公司,由音乐家 Ray J。

影响者拥有的企业也使用这种类型的定位。例子包括 Cloud9 Scrubs 和 HudaBeauty。

6.基于符号的策略

基于符号的策略使用流行的或有文化意义的符号来定位品牌,使其与符号背后的含义相一致。

例如,像卡塔尔航空这样的品牌通过使用与财富、奢侈和显赫联系在一起的紫色和红色来传达一种皇室感。

基于奖项或行业认可营销自己的品牌也使用基于符号的定位策略。像符号一样,这些奖项将品牌与奖项的声望联系在一起。

7.基于竞争对手的战略

基于竞争对手的战略将品牌定位为著名品牌的替代品。这些策略经常使用“名牌的免费替代品”或“名牌的环保版本”来强调为什么他们是更好的选择。

你可以在 Rocket 中看到一个基于竞争对手定位的例子。聊天。火箭。Chat 将自己定位为一个交流平台,使用类似“Rocket”这样的语言。Chat 做其他平台做的一切,除了暴露你的数据。”

搜索引擎 DuckDuckGo 使用类似的定位来营销自己,作为雅虎、谷歌和必应的替代者。DuckDuckGo 的口号是“你的个人数据不关任何人的事。”

创建有效的定位策略

创建一个稳固的定位策略对于树立你的品牌走向成功并带来高转化率至关重要。

例如,考虑一下 Tato Nano 汽车的定位——Tato 只将这种汽车作为低成本产品进行营销。Nano 的价格大约为 2500 美元(尽管 Tato 主要在印度销售)。

汽车本身并不是一个可怕的产品,但将它推销为“廉价”会让人们认为对于买不起不同汽车的人来说,这是一个低质量的投资。因此,Tato 在 2016 年和 2017 年期间仅销售了7591 辆nano,该项目未能为 Tato 带来显著的投资回报

为了帮助您设计更好地为您服务的定位策略,我们将在本节中介绍定位策略的关键组成部分以及如何创建定位策略。

定位战略营销的关键组成部分

每个定位策略都有三个关键组成部分。这些有时被称为品牌和定位的“3c”。

如果你认识“3c”这个短语,那是因为大前研一(Kenichi Ohmae)提出的一个流行理论与之同名。大前研一的模型概述了一个公司的成功是因为它的客户、公司和竞争对手。

定位战略的三个 c 是相似的,因为它们包括:

客户

“客户”部分涵盖了客户的需求、希望和愿望。由于这些因素在与贵公司的每次互动中都激励着客户,因此将它们纳入您的定位将有助于您更好地为他们服务。

考虑客户的定位时,问自己以下问题会有所帮助:

  • 什么能激励你的顾客?
  • 忠诚客户和过去客户的区别是什么?
  • 是什么促使顾客重复购买?
  • 顾客喜欢(品牌)的什么?
  • 顾客想改变(品牌)什么?
  • 消费者对(品牌)有哪些广泛的认知?

频道

“渠道”包括运营、销售和营销渠道,客户通过这些渠道来接触您的品牌。这些渠道包括你的销售团队、内容营销、社交媒体简介、广告、客户服务代表、电子邮件营销,以及其他形式的数字营销

考虑客户对你的渠道的看法是至关重要的,因为他们塑造了客户的互动(因此,他们对你的品牌的印象)。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

比赛

“竞争”部分指的是你的品牌与你所在的领域和行业中的其他品牌相比如何。

将您的品牌与您的竞争对手进行比较时,询问以下问题会有所帮助:

  • (品牌)做了什么别人没有做的事?
  • (竞争对手的)劣势和优势是什么?
  • (品牌)在供应链道德、可持续性、多样性和包容性方面如何比较?
  • (品牌)的产品和服务与同类产品相比如何?

位置图对于了解你相对于竞争对手的位置至关重要。

如何设计定位策略

按照以下步骤设计您的定位策略。

第一步。定义你的目标受众

没有顾客,你的公司就无法存在。当然,确定你的目标受众是你制定定位策略的第一步。

确定你的目标市场的最简单的方法是通过他们的人口统计,购买行为和品味来描述你的买家。您可能希望以买家的身份展示这些信息。买家角色是对目标市场的描述,如下所示:

Example of a buyer persona

Example of a buyer persona.

在此阶段,您还应该确定您品牌的营销合格线索(MQL)和销售合格线索(SQL)是什么样的。mql 对你的商品有需求,但不像 SQL 那样准备购买。

将您的 MQLs 与 SQL 分开将有助于您在正确的时间将您的品牌定位到目标销售线索。

第二步。研究你的竞争对手

接下来,你需要彻底研究你的竞争对手,以确定他们的定位策略。识别竞争对手的策略将帮助你确定是什么让你的品牌与众不同。

你可能想用 SWOT 和 PESTEL 分析来使这个市场调查更容易。

SWOT 分析着眼于公司的优势、劣势、机会和威胁。这里有一个你可以使用的 SWOT 分析模板:

A SWOT analysis breakdown

A SWOT analysis breakdown. (Source: GaryFox)

PESTEL 分析(有时称为“外部因素分析”)关注的是公司周围的环境。它着眼于政治、经济、社会、技术、环境和法律等因素:

A PESTEL analysis breakdown

A PESTEL analysis breakdown. (Source: YourTarget)

第三步。脑猝病

一旦你了解了你的受众和竞争对手,开始头脑风暴你的品牌可能使用的潜在定位策略。参考“定位策略的类型”部分的这些策略可能会有所帮助:

  • 基于定价的策略
  • 基于产品利益的战略
  • 基于使用的策略
  • 基于情境的策略
  • 基于影响者的策略
  • 基于符号的策略
  • 基于竞争对手的战略

你也可以尝试头脑风暴技术,如单词联想、思维导图或像客户一样思考。或者,你可以阅读客户反馈,寻找常见的关键词(如“良好的客户服务”或“环保”)。

无论你选择哪种头脑风暴方法,都要让你的销售、营销和管理团队参与讨论。每个群体对顾客的看法不同,因此他们会提出不同的想法。

第四步。缩小你的选择范围

创建选项列表后,您可以通过两种主要方式对其进行排序:

  1. 消除与你的品牌价值或目标不一致的想法
  2. 突出最强的想法

这也可能有助于结合类似的想法。

这一步会给你留下一些潜在的定位或重新定位策略。请教你的同事找到合适的。

第五步。写下你的定位陈述

写一份定位声明会给你一个重新审视的准确参考点。它还将帮助你以一种你和你的同事容易向他人传达的方式清楚地定义你的定位策略。

虽然每个定位陈述都是主观的,但有四件事你应该包括在内:你的目标受众、你做什么(或者你的产品或服务是什么)、你与众不同,以及你帮助客户达到的“最终目标”。

如果您遇到困难,请尝试以下模板:

  • “(品牌)利用(让你与众不同的东西)来帮助(目标受众)达到(最终目标)。”
  • “(目标受众)在需要(最终目标)时会转向(品牌)寻求(让你与众不同的东西)。”

或者,你可以从现有的品牌中汲取灵感。例如,PayHlip 的简短立场声明是,“我们帮助创作者在网上做他们喜欢的事情来谋生”更详细的版本如下:

Payhip 是一个电子商务平台,任何人都可以直接向粉丝和追随者出售数字产品或会员资格。您可以将 Payhip 直接嵌入到您的网站中,或者使用我们的店面来销售您的作品。Payhip 负责一切。我们为创作者提供一体化的电子商务解决方案。”

在写陈述时,请记住以下几点:

就是这样!你现在有了一个定位策略,可以应用于你的运营和营销。

有效定位策略的最后几个问题

在我们结束这篇文章之前,我们想谈谈支撑大多数定位策略的三个问题。这些问题包括:

  • “什么是(品牌)?”
  • “您为什么应该从(品牌)购买?”
  • “您为什么不应该从(品牌)的竞争对手那里购买?"

虽然很容易陷入精心撰写的定位陈述的华丽辞藻中,但你如何有效地回答这些简单的问题将决定你的策略是否奏效。

同样,很容易将您的定位陈述转变为独特的销售主张(USP)。USP 描述了为什么潜在客户选择你的产品或服务而不是竞争对手。USPs 侧重于产品和服务,而定位声明侧重于品牌。

例如,麦当劳的市场定位策略是,它是一家适合家庭的快餐店,而快乐餐的 USP 是一种价格实惠的儿童餐,附带一个玩具。

重温这三个问题,防止你的定位陈述变成 USP。

在本指南的帮助下,掌控消费者如何看待你的品牌&正确定位你的公司😎

摘要

制定成功的定位战略对于 2022 年的竞争至关重要,因为良好的战略定位将帮助您:

  • 让你的品牌从竞争对手中脱颖而出
  • 创建强有力的营销信息
  • 将您的品牌价值与您的营销计划结合起来
  • 建立有效的商业策略

建立一个稳固的定位策略可能看起来很复杂,但比你想象的要容易。记得把你的陈述集中在客户身上,坚持你的价值观,并采取基于研究的方法。

既然我们已经详细介绍了定位策略,我们希望听取您的意见。你是如何设计你的定位策略的,你有什么技巧来写一份可靠的定位陈述吗?请在下面的评论中分享它们。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PostgreSQL 复制:综合指南

原文:https://kinsta.com/blog/postgresql-replication/

任何网站所有者都会告诉你,数据丢失和停机时间,即使是很小的剂量,也可能是灾难性的。它们可以在任何时候袭击没有准备好的人,导致生产力、可访问性和产品信心的降低。

为了保护您站点的完整性,针对停机或数据丢失的可能性建立安全措施是至关重要的。

这就是数据复制的用武之地。
任何网站所有者都会告诉您,数据丢失和停机,即使是极小的损失,也可能是灾难性的。😱回车,数据复制💪 点击发布推文
数据复制是一个自动化的备份过程,在此过程中,您的数据会从其主数据库反复复制到另一个远程位置进行安全保护。对于任何运行数据库服务器的网站或应用来说,这都是一项不可或缺的技术。您还可以利用复制的数据库来处理只读 SQL,从而允许在系统中运行更多的进程。

在两个数据库之间设置复制提供了对意外事故的容错能力。这被认为是灾难期间获得高可用性的最佳策略。
在本文中,我们将深入探讨后端开发人员可以实现无缝 PostgreSQL 复制的不同策略。

什么是 PostgreSQL 复制?

An illustration of PostgreSQL replication showing the flow of data from the primary server to the replica.

PostgreSQL replication illustration (Image Source: EnterpriseDB)

PostgreSQL 复制被定义为将数据从一个 PostgreSQL 数据库服务器复制到另一个服务器的过程。源数据库服务器也称为“主”服务器,而接收复制数据的数据库服务器称为“副本”服务器。

PostgreSQL 数据库遵循一种简单的复制模型,其中所有的写入都进入一个主节点。然后,主节点可以应用这些更改,并将它们广播到辅助节点。

什么是自动故障转移?

故障转移是一种在主服务器因任何原因出现故障时恢复数据的方法。只要您配置了 PostreSQL 来管理您的物理流复制,您和您的用户就不会因为主服务器故障而停机。

请注意,故障转移过程可能需要一些时间来设置和启动。PostgreSQL 中没有内置的工具来监控服务器故障,所以您需要发挥创造力。

幸运的是,您不必依赖 PostgreSQL 进行故障转移。有专门的工具允许自动故障转移和自动切换到备用状态,减少了数据库停机时间。

通过设置故障转移复制,可以确保在主服务器崩溃时备用服务器可用,从而保证高可用性。

使用 PostgreSQL 复制的好处

以下是利用 PostgreSQL 复制的一些主要优势:

  • 数据迁移:您可以通过更改数据库服务器硬件或系统部署来利用 PostgreSQL 复制进行数据迁移。
  • 容错:如果主服务器出现故障,备用服务器可以充当服务器,因为主服务器和备用服务器包含的数据是相同的。
  • 在线事务处理(OLTP)性能:您可以通过消除报告查询负载来缩短 OLTP 系统的事务处理时间和查询时间。事务处理时间是在事务完成之前执行给定查询所需的持续时间。
  • 并行系统测试:在升级新系统时,您需要确保系统与现有数据兼容,因此需要在部署前使用生产数据库副本进行测试。

PostgreSQL 复制的工作原理

一般来说,人们认为当你尝试使用主架构和次架构时,只有一种方法可以设置备份和复制。然而,PostgreSQL 部署可以遵循以下三种方法中的任何一种:

  1. 流复制:将数据从主节点复制到辅助节点,然后将数据复制到亚马逊 S3 或 Azure Blob 进行备份存储。
  2. 卷级复制:在存储层复制数据,从主节点开始复制到辅助节点,然后将数据复制到亚马逊 S3 或 Azure Blob 进行备份存储。
  3. 增量备份:从主节点复制数据,同时从亚马逊 S3 或 Azure Blob 存储构建新的辅助节点,允许从主节点直接流式传输。

方法 1:流式传输

在所有服务器上安装 PostgreSQL 后,可以无缝设置 PostgreSQL 流复制(也称为 WAL 复制)。这种复制方法基于将 WAL 文件从主数据库移动到目标数据库。

您可以通过使用主从配置来实现 PostgreSQL 流复制。主服务器是处理主数据库及其所有操作的主要实例。辅助服务器充当辅助实例,在自身上执行对主数据库所做的所有更改,并在此过程中生成一个完全相同的副本。主服务器是读/写服务器,而辅助服务器只是只读的。

对于这种方法,您需要配置主节点和备用节点。以下部分将阐述轻松配置它们的步骤。

配置主节点

您可以通过执行以下步骤来配置用于流式复制的主节点:

步骤 1:初始化数据库

为了让初始化数据库,您可以利用initdb实用程序命令。接下来,您可以使用以下命令创建一个具有复制权限的新用户:

CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';

用户必须为给定的查询提供密码和用户名。replication 关键字用于为用户提供所需的权限。查询示例如下所示:

CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';
步骤 2:配置流属性

接下来,您可以使用 PostgreSQL 配置文件( postgresql.conf )配置流属性,该文件可以修改如下:

wal_level = logical
wal_log_hints = on
max_wal_senders = 8
max_wal_size = 1GB
hot_standby = on

以下是上一个片段中使用的参数的一些背景知识:

  • wal_log_hints : 当备用服务器与主服务器不同步时,这个参数对于pg_rewind功能是必需的。
  • wal_level : 您可以使用该参数来启用 PostgreSQL 流复制,可能的值包括minimalreplicalogical
  • max_wal_size : 用于指定日志文件中可以保留的 WAL 文件的大小。
  • hot_standby : 当该参数设置为 on 时,您可以利用该参数与辅助设备进行读取连接。
  • max_wal_senders : 您可以使用max_wal_senders来指定可以与备用服务器建立的最大并发连接数。
步骤 3:创建新条目

在您修改了 postgresql.conf 文件中的参数之后, pg_hba.conf 文件中的一个新的复制条目可以允许服务器相互建立复制连接。

通常可以在 PostgreSQL 的数据目录中找到这个文件。您可以使用以下代码片段来实现相同的目的:

host replication rep_user IPaddress md5

一旦代码片段被执行,主服务器就允许名为rep_user的用户通过使用指定的 IP 进行复制来连接并充当备用服务器。例如:

host replication rep_user 192.168.0.22/32 md5

配置备用节点

要为流式复制配置备用节点,请执行以下步骤:

步骤 1:备份主节点

要配置备用节点,利用pg_basebackup实用程序生成主节点的备份。这将作为备用节点的起点。您可以按以下语法使用该实用程序:

pg_basebackp -D  -h  -X stream -c fast -U rep_user -W

上述语法中使用的参数如下:

  • -h : 你可以用这个来提主机。
  • -D : 该参数表示您当前工作的目录。
  • -C : 你可以用这个来设置关卡。
  • -X : 该参数可以用来包含必要的事务日志文件。
  • -W : 您可以使用该参数在链接到数据库之前提示用户输入密码。
步骤 2:设置复制配置文件

接下来,您需要检查复制配置文件是否存在。如果没有,您可以将复制配置文件生成为 recovery.conf

您应该在 PostgreSQL 安装的数据目录中创建该文件。您可以使用pg_basebackup实用程序中的-R选项自动生成它。

recovery.conf 文件应该包含以下命令:

standby_mode = 'on'

primary_conninfo = 'host=<master_host> port=<postgres_port> user=<replication_user> password=<password> application_name="host_name"'

recovery_target_timeline = 'latest'

上述命令中使用的参数如下:

  • primary_conninfo : 您可以使用它通过利用连接字符串在主服务器和辅助服务器之间建立连接。
  • standby_mode : 该参数可以使主服务器在开机时作为备用服务器启动。
  • recovery_target_timeline : 你可以用这个来设置恢复时间。

要建立连接,您需要提供用户名、IP 地址和密码作为 primary_conninfo 参数的值。例如:

primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'
步骤 3:重新启动辅助服务器

最后,您可以重新启动辅助服务器来完成配置过程。

然而,流式复制带来了一些挑战,例如:

  • 各种 PostgreSQL 客户端(用不同的编程语言编写)与单个端点进行对话。当主节点出现故障时,这些客户端将不断重试相同的 DNS 或 IP 名称。这使得故障转移对应用程序可见。
  • PostgreSQL 复制没有内置的故障转移和监控功能。当主节点出现故障时,您需要将辅助节点升级为新的主节点。这种提升需要以这样的方式执行,即客户端只写入一个主节点,并且它们不会观察到数据不一致。
  • PostgreSQL 复制其整个状态。当您需要开发一个新的辅助节点时,辅助节点需要重述主节点的整个状态更改历史,这是一项资源密集型任务,并且消除头部节点并创建新节点的成本很高。

方法 2:复制块设备

复制块设备方法依赖于磁盘镜像(也称为卷复制)。在这种方法中,更改被写入永久卷,永久卷被同步镜像到另一个卷。

这种方法的额外好处是它在云环境中与所有关系数据库的兼容性和数据持久性,包括 PostgreSQL、MySQL 和 SQL Server 等等。

然而,PostgreSQL 复制的磁盘镜像方法需要您复制 WAL 日志和表数据。因为现在对数据库的每次写入都需要通过网络同步进行,所以您不能丢失一个字节,因为这会使您的数据库处于损坏状态。

这种方法通常使用 Azure PostgreSQL 和 Amazon RDS。

方法 3: WAL

WAL 由段文件组成(默认为 16 MB)。每个段有一个或多个记录。日志序列记录(LSN)是指向 WAL 中记录的指针,让您知道记录在日志文件中保存的位置。

备用服务器利用 WAL 段(在 PostgreSQL 术语中也称为 XLOGS)不断地从主服务器复制更改。通过在将字节数组数据应用到数据库之前,将字节数组数据(每个都有一个唯一的 LSN)序列化到稳定的存储中,可以使用预写日志在 DBMS 中提供持久性和原子性。

对数据库应用突变可能会导致各种文件系统操作。出现的一个相关问题是,在文件系统更新过程中,如果由于断电导致服务器出现故障,数据库如何确保原子性。当数据库启动时,它开始启动或重放进程,该进程可以读取可用的 WAL 段,并将它们与存储在每个数据页上的 LSN 进行比较(每个数据页都标记有影响该页的最新 WAL 记录的 LSN)。

基于日志传送的复制(块级)

流式复制优化了日志传送过程。与等待 WAL 开关相反,记录在创建时就被发送,从而减少了复制延迟。

流式复制也胜过日志传送,因为备用服务器通过复制协议在网络上与主服务器链接。然后,主服务器可以通过这个连接直接发送 WAL 记录,而不必依赖最终用户提供的脚本。

基于日志传送的复制(文件级)

日志传送定义为将日志文件复制到另一个 PostgreSQL 服务器,通过重放 WAL 文件生成另一个备用服务器。该服务器被配置为在恢复模式下工作,它的唯一目的是在任何新的 WAL 文件出现时应用它们。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

然后,该辅助服务器成为主 PostgreSQL 服务器的热备份。它还可以配置为读取副本,在这里它可以提供只读查询,也称为热备用。

连续 WAL 存档

将创建的 WAL 文件复制到除了pg_wal子目录之外的任何位置进行归档,称为 WAL 归档。每当创建一个 WAL 文件时,PostgreSQL 将调用用户给出的脚本进行归档。

该脚本可以利用scp命令将文件复制到一个或多个位置,比如 NFS 装载。归档后,可以利用 WAL 段文件在任何给定的时间点恢复数据库。

其他基于日志的配置包括:

  • 同步复制:在提交每个同步复制事务之前,主服务器会一直等待,直到备用服务器确认它们已经获得了数据。这种配置的好处是不会因为并行写入过程而导致任何冲突。
  • 同步多主机复制:在这里,每台服务器都可以接受写请求,在提交每个事务之前,修改后的数据会从原始服务器传输到所有其他服务器。它利用 2PC 协议,并遵循全有或全无规则。

WAL 流协议详细信息

一个名为 WAL receiver 的进程运行在备用服务器上,利用 recovery.confprimary_conninfo参数中提供的连接细节,并通过利用 TCP/IP 连接连接到主服务器。

为了开始流式复制,前端可以在启动消息中发送复制参数。布尔值 true、yes、1 或 ON 让后端知道它需要进入物理复制 walsender 模式。

WAL sender 是运行在主服务器上的另一个进程,负责在 WAL 记录生成时将其发送到备用服务器。WAL 接收器将 WAL 记录保存在 WAL 中,就好像它们是由本地连接的客户端的客户端活动创建的一样。

一旦 WAL 记录到达 WAL 段文件,备用服务器就会不断地重放 WAL,以便主服务器和备用服务器都是最新的。

A flow diagram depicting the steps involved in the WAL Streaming Protocol process between the primary and standby servers.

WAL Streaming Protocol Flow Diagram (Image Source: EnterpriseDB)

PostgreSQL 复制的元素

在本节中,您将深入了解 PostgreSQL 复制的常用模型(单主和多主复制)、类型(物理和逻辑复制)和模式(同步和异步)。

PostgreSQL 数据库复制模型

可伸缩性意味着向现有节点添加更多资源/硬件,以增强数据库存储和处理更多数据的能力,这可以横向和纵向实现。PostgreSQL 复制是水平可伸缩性的一个例子,它比垂直可伸缩性更难实现。我们主要通过单主复制(SMR)和多主复制(MMR)来实现水平可伸缩性。

单主复制允许仅在单个节点上修改数据,并且这些修改被复制到一个或多个节点。副本数据库中的复制表不允许接受任何更改,主服务器中的更改除外。即使它们这样做了,更改也不会复制回主服务器。

大多数时候,SMR 对于应用程序来说已经足够了,因为它的配置和管理不太复杂,也没有冲突的可能。单主机复制也是单向的,因为复制数据主要是单向流动的,从主数据库流向副本数据库。

在某些情况下,仅仅 SMR 可能是不够的,您可能需要实现 MMR。MMR 允许多个节点充当主节点。对多个指定主数据库中的表行的更改将被复制到其他主数据库中的对应表中。在这个模型中,冲突解决方案经常被用来避免类似重复主键的问题。

使用 MMR 有几个优点,即:

  • 在主机故障的情况下,其他主机仍然可以给出更新和插入服务。
  • 主节点分布在几个不同的位置,因此所有主节点发生故障的可能性非常小。
  • 能够利用主数据库的广域网(WAN ),这些主数据库在地理位置上可以靠近多组客户端,同时保持整个网络中的数据一致性。

然而,实现 MMR 的缺点是解决冲突的复杂性和困难性。

一些分支和应用程序提供了 MMR 解决方案,因为 PostgreSQL 本身并不支持它。这些解决方案可能是开源的,免费的,或者付费的。一个这样的扩展是双向复制(BDR ),它是异步的,基于 PostgreSQL 逻辑解码函数。

由于 BDR 应用程序在其他节点上重放事务,如果正在应用的事务和在接收节点上提交的事务之间存在冲突,重放操作可能会失败。

PostgreSQL 复制的类型

PostgreSQL 复制有两种类型:逻辑复制和物理复制。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

一个简单的逻辑操作— initdb —将执行为集群创建基目录的物理操作。同样,一个简单的逻辑操作CREATE DATABASE将执行在基本目录中创建子目录的物理操作。

物理复制通常处理文件和目录。它不知道这些文件和目录代表什么。这些方法用于维护单个群集的整个数据的完整副本,通常在另一台机器上,在文件系统级别或磁盘级别完成,并使用精确的块地址。

逻辑复制是一种基于数据实体的复制标识(通常是主键)来复制数据实体及其修改的方法。与物理复制不同,它处理数据库、表和 DML 操作,并且是在数据库集群级别完成的。它使用发布订阅模型,其中一个或多个订阅者发布者节点上订阅一个或多个出版物

复制过程从拍摄发布服务器数据库上的数据快照开始,然后将其复制到订阅服务器。订阅方从他们订阅的发布中提取数据,并可能在以后重新发布数据,以允许级联复制或更复杂的配置。订阅服务器按照与发布服务器相同的顺序应用数据,以便保证单个订阅中的发布的事务一致性,也称为事务复制。

逻辑复制的典型用例有:

  • 将单个数据库(或数据库子集)中的增量更改发送给订阅服务器。
  • 在多个数据库之间共享数据库的子集。
  • 当个别更改到达订阅服务器时触发这些更改。
  • 将多个数据库整合为一个。
  • 向不同的用户组提供对复制数据的访问。

订户数据库的行为方式与任何其他 PostgreSQL 实例相同,并且可以通过定义其发布来用作其他数据库的发布者。

当应用程序将订阅者视为只读时,单个订阅不会有冲突。另一方面,如果某个应用程序或其他订阅者对同一组表进行了其他写操作,就会产生冲突。

PostgreSQL 同时支持这两种机制。逻辑复制允许对数据复制和安全性进行细粒度控制。

复制模式

PostgreSQL 复制主要有两种模式:同步和异步。同步复制允许数据同时写入主服务器和辅助服务器,而异步复制确保数据首先写入主机,然后复制到辅助服务器。

在同步模式复制中,只有当主数据库上的更改被复制到所有副本时,主数据库上的事务才被视为完成。副本服务器必须始终可用,以便在主服务器上完成事务。同步复制模式用于具有即时故障转移要求的高端事务环境。

在异步模式下,当更改仅在主服务器上完成时,主服务器上的事务可以被声明为完成。这些更改随后会被复制到副本中。副本服务器可以在一段时间内保持不同步,这称为复制延迟。在崩溃的情况下,可能会发生数据丢失,但是异步复制提供的开销很小,所以在大多数情况下这是可以接受的(它不会使主机负担过重)。从主数据库到辅助数据库的故障转移比同步复制需要更长的时间。

如何设置 PostgreSQL 复制

在本节中,我们将演示如何在 Linux 操作系统上设置 PostgreSQL 复制过程。对于这个实例,我们将使用 Ubuntu 18.04 LTS 和 PostgreSQL 10。

重要的

确保你已经安装了 Linux Ubuntu 服务器。下面介绍在 Linux 服务器上安装 PostgreSQL 的步骤,然后在主服务器和辅助服务器上设置复制。

让我们开始吧!

装置

您将通过以下步骤开始在 Linux 上安装 PostgreSQL:

  1. 首先,您必须通过在终端中键入以下命令来导入 PostgreSQL 签名密钥:

    wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | sudo apt-key add -
    
  2. 然后,通过在终端中键入以下命令来添加 PostgreSQL 存储库:

    echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
    
  3. 通过在终端中键入以下命令来更新存储库索引:

    sudo apt-get update
    
  4. 使用 apt 命令安装 PostgreSQL 包:

    sudo apt-get install -y postgresql-10
    
  5. 最后,使用以下命令为 PostgreSQL 用户设置密码:

    sudo passwd postgres
    

在开始 PostgreSQL 复制过程之前,主服务器和辅助服务器都必须安装 PostgreSQL。

一旦在两台服务器上设置了 PostgreSQL,就可以继续设置主服务器和辅助服务器的复制。

在主服务器中设置复制

一旦在主服务器和辅助服务器上都安装了 PostgreSQL,就执行这些步骤。

  1. 首先,使用以下命令登录 PostgreSQL 数据库:

    su - postgres
    
  2. 使用以下命令创建一个复制用户:

    psql -c "CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';"
    
  3. Edit pg_hba.cnf with any nano application in Ubuntu and add the following configuration:

    nano /etc/postgresql/10/main/pg_hba.conf
    

    要配置该文件,请使用以下命令:

    host replication  replication  MasterIP/24  md5
    
  4. Open and edit postgresql.conf and put the following configuration in the primary server:

    nano /etc/postgresql/10/main/postgresql.conf
    

    使用以下配置设置:

    listen_addresses = 'localhost,MasterIP'
    wal_level = replica
    wal_keep_segments = 64
    max_wal_senders = 10
    
  5. 最后,在 primary 主服务器中重新启动 PostgreSQL:

systemctl restart postgresql

现在,您已经完成了主服务器的设置。

在辅助服务器中设置复制

按照以下步骤在辅助服务器中设置复制:

  1. 使用下面的命令登录到 PostgreSQL RDMS:

    su - postgres
    
  2. 停止 PostgreSQL 服务的工作,以便我们能够使用下面的命令对其进行操作:

    systemctl stop postgresql
    
  3. 使用该命令编辑 pg_hba.conf 文件,并添加以下配置:

    // "Edit" command
    nano /etc/postgresql/10/main/pg_hba.conf
    // "Configuration" command
    host replication  replication  MasterIP/24  md5
    
  4. Open and edit postgresql.conf in the secondary server and put the following configuration or uncomment if it’s commented:

    nano /etc/postgresql/10/main/postgresql.conf
    listen_addresses = 'localhost,SecondaryIP'
    wal_keep_segments = 64
    wal_level = replica
    hot_standby = on
    max_wal_senders = 10
    

    SecondaryIP是辅助服务器的地址

  5. 访问辅助服务器中的 PostgreSQL 数据目录并删除所有内容:

    cd /var/lib/postgresql/10/main
    rm -rfv *
    
  6. 将 PostgreSQL 主服务器数据目录文件复制到 PostgreSQL 辅服务器数据目录,并在辅服务器中写入该命令:

    pg_basebackup -h MasterIP -D /var/lib/postgresql/11/main/ -P -U
    replication --wal-method=fetch
    
  7. Enter the primary server PostgreSQL password and press enter. Next, add the following command for the recovery configuration:

    // "Edit" Command
    nano /var/lib/postgresql/10/main/recovery.conf
    // Configuration
    standby_mode   = 'on'
    primary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'
    trigger_file = '/tmp/MasterNow'</code>
    

    这里,YOUR_PASSWORD是在主服务器 PostgreSQL 中创建的复制用户的密码

  8. 一旦设置了密码,您就必须重新启动辅助 PostgreSQL 数据库,因为它已经停止:

systemctl start postgresql

测试您的设置

现在我们已经执行了这些步骤,让我们测试复制过程并观察辅助服务器数据库。为此,我们在主服务器上创建一个表,并观察辅助服务器上是否反映了相同的内容。

我们开始吧。

  1. 因为我们在主服务器上创建表,所以您需要登录到主服务器:

    su - postgres
    psql
    
  2. 现在,我们创建一个名为“testtable”的简单表,并通过在终端中运行以下 PostgreSQL 查询将数据插入到该表中:

    CREATE TABLE testtable (websites varchar(100));
    INSERT INTO testtable VALUES ('section.com');
    INSERT INTO testtable VALUES ('google.com');
    INSERT INTO testtable VALUES ('github.com');
    
  3. 通过登录到辅助服务器来观察辅助服务器 PostgreSQL 数据库:

    su - postgres psql
    
  4. 现在,我们检查表“testtable”是否存在,并可以通过在终端中运行以下 PostgreSQL 查询来返回数据。这个命令实际上显示了整个表格。

    select * from testtable;
    

这是测试表的输出:

|  websites  |

-------------------

| section.com |

| google.com |

| github.com  |

--------------------

您应该能够观察到与主服务器中相同的数据。

如果您看到以上内容,那么您已经成功地进行了复制过程!

PostgreSQL 手动故障转移步骤是什么?

让我们回顾一下 PostgreSQL 手动故障转移的步骤:

  1. 使主服务器崩溃。

  2. 通过在备用服务器上运行以下命令提升备用服务器:

    ./pg_ctl promote -D ../sb_data/
    server promoting
    
  3. 连接到提升的备用服务器并插入一行:

    -bash-4.2$ ./edb-psql -p 5432 edb
    
    Password:
    
    psql.bin (10.7)
    
    Type "help" **for** help.
    
    edb=# **insert** **into** abc **values**(4,'Four');
    

如果插入工作正常,那么备用服务器(以前是一个只读服务器)已经提升为新的主服务器。

如何在 PostgreSQL 中自动化故障转移

设置自动故障转移很容易。

您将需要 EDB PostgreSQL 故障转移管理器(EFM)。在每个主节点和备用节点上下载并安装 EFM 后,您可以创建一个 EFM 集群,该集群由一个主节点、一个或多个备用节点以及一个可选的见证节点组成,该见证节点在出现故障时确认断言。

EFM 持续监控系统运行状况,并根据系统事件发送电子邮件警报。当出现故障时,它会自动切换到最新的备用服务器,并重新配置所有其他备用服务器以识别新的主节点。

它还重新配置负载平衡器(如 pgPool)并防止“裂脑”(当两个节点都认为自己是主节点时)发生。

摘要

由于数据量巨大,可伸缩性和安全性已经成为数据库管理中最重要的两个标准,尤其是在事务环境中。虽然我们可以通过向现有节点添加更多资源/硬件来提高纵向可扩展性,但这并不总是可行的,通常是由于添加新硬件的成本或限制。

因此,需要水平可扩展性,这意味着向现有网络节点添加更多节点,而不是增强现有节点的功能。这就是 PostgreSQL 复制的用武之地。
为了保护你的网站的完整性,建立预防停机或数据丢失的措施是至关重要的。💻在本指南中了解更多信息✅ 点击发送推文
在本文中,我们讨论了 PostgreSQL 复制的类型、优点、复制模式、安装以及 SMR 和 MMR 之间的 PostgreSQL 故障转移。现在让我们听听你的意见。

你一般实现哪一个?哪个数据库特性对您来说最重要,为什么?我们很想知道你的想法!请在下面的评论区分享它们。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PostgreSQL 与 MySQL:探索它们的 12 个关键区别

原文:https://kinsta.com/blog/postgresql-vs-mysql/

数据本质上只是不同事实和观察的集合。随着时间的推移,开发人员意识到管理数据不仅仅是一个可选的跟踪系统,而且随着世界逐渐通过互联网变得更加紧密,管理数据是必要的。

今天,企业利用数据来分析潜在客户,实现他们的潜力,降低风险等。

随着全球数据量的增加,对能够帮助更高效地管理数据的强大而灵活的数据库的需求也在不断增长。本文将研究 WordPress 最常用的两个开源数据库及其区别:PostgreSQL 和 MySQL。

但是首先,什么是 WordPress 数据库?

让我们来了解一下!

什么是 WordPress 数据库?

不少企业使用 WordPress 托管他们的网站,这一数字高达互联网上所有网站的 43%!除此之外,它占所有部署的内容管理系统(CMS)的 60%左右。其易于使用的布局使其成为初学者的完美选择。虽然使用 WordPress 并不需要事先有编码知识,但它确实有助于理解不同的元素,包括数据库。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

没有一个 WordPress 数据库,你的网站将无法运行。数据库系统本质上是你网站的主干。它确保一切都被跟踪,从您博客上的内容到不同用户的评论和更改。它甚至增强了网站的加载和执行能力。

理想的数据库应该是灵活的、成本友好的和可伸缩的。你可以高枕无忧,因为有各种各样的开源数据库可以帮助你在 WordPress 中跟踪你的数据。我们现在将把重点放在 PostgreSQL 和 MySQL 上。

Discover the two most used open-source databases for WordPress and their differences: PostgreSQL and MySQL. ✅Click to Tweet

PostgreSQL 是什么?

The PostgreSQL logo, showing the text below a stylized blue elephant head outlined in black and white.

PostgreSQL logo (Image source: Uberconf)

PostgreSQL 是一个开源的对象关系数据库管理系统。它完全符合 SQL,功能丰富。它也是可扩展的,对任何需要企业工具的人都很有用。它是专为效率而设计的,可以集成到几乎任何软件中。

PostgreSQL 是面向对象的,这使得扩展数据类型来创建您的自定义类型成为可能,并且它支持几乎任何数据库。本节将详细介绍它的历史、特性和用例。

历史

40 年前,少年先锋 Ingres 项目组的组长迈克尔·斯通布雷克离开 Berkley,去开发 Ingres 的专有版本。然后,他回到 Berkley,启动了一个后 Ingres 项目,解决了当时其他数据库遇到的几个问题。

这个项目,也就是我们现在知道的 PostgreSQL,配备了支持多种“对象关系”数据类型所需的几个特性,包括支持维护表之间一致关系的规则和跨服务器的数据复制。PostgreSQL 的第一个版本于 1997 年 1 月 29 日形成了 6.0 版。从那时起,开发人员、支持公司,甚至志愿者都在免费和开放的许可下继续维护数据库软件。

主要特征

PostgreSQL 作为一个数据库管理系统有很多优点。它以功能强大、高可靠性、高性能、灵活性和易于复制而闻名。

让我们来看看是什么让 PostgreSQL 成为您企业不可或缺的工具。

高度可靠

PostgreSQL 支持多种语言的外键、存储过程、连接和视图。它包括各种数据类型,并支持大型对象的存储,包括图片、声音和视频。由于它是开源的,它得到了开发者的支持,这些开发者通过定期尝试发现错误和改进软件来提供无与伦比的维护系统。

由于预写日志功能,它还具有容错能力,这使得支持在线备份和时间点恢复成为可能。通过安装先前的物理备份数据库,我们可以支持恢复到 WAL 数据覆盖的任何时间点。

此外,“物理备份”不必是数据库状态的即时快照——如果它是在过去创建的,重放特定时间的 WAL 日志将解决任何内部不一致。

灵活的

PostgreSQL 是开源的,因此代码可以跨平台自由修改——它可以适用于任何平台,包括 Windows、Solaris、OS X 和 Linux。除此之外,它可以同时容纳几个用户,只阻塞同一行的并发更新。

展开性

可扩展性是软件工程的一个原则,是关于未来发展的。PostgreSQL 提供了高度的可扩展性,因为它的操作是目录驱动的,即信息存储在数据库、列、表等中。表达式的实时(JIT)编译使您能够用不同的编程语言编写代码,而无需重新编译数据库和定义数据类型。这种自发修改任何操作的能力使它特别适合于快速实施新的存储结构和应用程序。

分身术

PostgreSQL 包括内置的同步复制,它确保主节点会等待每次写入,直到复制节点将数据写入其事务日志。可以为每个数据库、会话和用户指定事务的持久性,而不考虑其同步性。这有助于加速事务,因为它不需要确认事务是否到达同步备用状态,特别是当一些流不需要这些保证时。

用例

PostgreSQL 几乎无处不在——它位列当今最常用数据库的前五名,仅次于 MySQL。像彭博、高盛和诺基亚这样的大公司都在后端运行 PostgreSQL。

PostgreSQL 可以用于各种行业,而不仅限于一个领域。这里有几个 PostgreSQL 现在可以使用的例子。

  • 政府 GIS 数据 : PostgreSQL 包含一个名为“PostGIS”的强大扩展。该扩展提供了许多功能,可以帮助处理不同的几何形式,如点、线串,并经过优化以减少磁盘和内存占用,从而提高查询性能。电力、应急服务和水基础设施服务主要依靠 GIS 来定位船员并指引他们到达准确的目的地,通常是在具有挑战性的条件下,因此对政府来说很方便。
  • 制造业:许多制造业需要大量高效的数据存储设施。PostgreSQL 是优化供应链性能和存储的合适选择。这是首选,因为它符合 ACID 标准,并且可以配置为自动故障转移、完全冗余和几乎零停机升级。由于 Oracle 的新许可政策使得小型企业难以承受使用 Oracle 的成本,因此 PostgreSQL 是首选。
  • Web 技术 : PostgreSQL 不仅仅是关系数据库;它也可以作为 NoSQL 风格的数据存储。您可以在一个产品中同时拥有关系世界和面向文档的世界。它可以在许多现代框架中运行,如 Django (Python)、Hibernate (Java)、Ruby on Rails、PHP 等。由于其复制能力,网站可以很容易地向外扩展,以纳入尽可能多的数据库服务器,你需要的。
  • 科学数据:研究和科学项目会产生万亿字节的数据,必须以尽可能实用的方式处理这些数据。PostgreSQL 具有出色的分析能力,并提供强大的 SQL 引擎,因此处理大量数据不会造成问题。PostgreSQL 也很容易扩展。可以集成 Matlab 和 R 来执行几个数学和聚合函数。

什么是 MySQL?

The MySQL logo, showing the text below a tilted, stylized blue dolphin body.

MySQL logo (Image source: Mecdata)

MySQL 是一个简单的关系数据库系统。它非常高效和用户友好,使其成为最受认可的技术之一。使用 SQL,可以快速掌握几个结构化查询语言概念(SQL)概念,构建强大的数据存储系统。它是免费的,并且是开源的,尽管它也可以在各种专有许可下使用。

本节将讨论它的历史、主要特性和用例。让我们开始吧!

历史

MySQL 是由瑞典公司 MySQLAB 于 1995 年由 Michael“Monty”wide nius、瑞典人 David Axmark 和 Allan Larsson 创建的。Sun Microsystems 随后收购了 MySQLAB。

MySQL 的目的是为企业和家庭用户提供高效可靠的数据管理选项。该平台的 Alpha 和 beta 版本于 2000 年发布,大多数版本都与主流平台兼容。

大约在同一时间,它开始开源。这允许第三方开发者对系统进行重大修改。然而,开源意味着收入的损失,但随着 MySQL 开始流行,这种损失最终得到了弥补。

截至 2001 年底,活跃安装数量高达 200 万。客观地说,这几乎是斯洛文尼亚的人口!2002 年初,公司扩大业务,在美国开设了总部。到那时,该平台已经拥有 300 万用户,收入总计 650 万美元,而且从那以后,它还在继续流行。

主要特征

MySQL server 是多线程、多任务的,设计用于高负载的生产系统。它有事务性和非事务性引擎,是最容易安装的数据库系统之一。MySQL 深受用户喜爱,因为它易于使用、可靠且快速。

既然你已经知道了 MySQL 是如何产生的,让我们来讨论一下它的一些关键特性。

易用性

MySQL 因其易用性而广受欢迎。它保证了一些特性,比如触发器、存储过程等等。它还包括各种实用程序,如崩溃时的备份程序、mysqladmin、管理客户端和用于管理的 GUI (MySQL workbench)。对于初学者来说,它通过一个全面的 GUI 提供了广泛的选项,有助于使它成为当今使用的五大数据库之一。

高灵活性

MySQL 为大容量项目提供了有效和安全的交易。它足够灵活,可以在动态环境中工作。因为它是开源的,所以代码是免费的,可以根据你的喜好进行修改。

可靠性和安全性

就像 PostgreSQL 一样,MySQL 也坚持 ACID 模型。因此,在处理事务时无需担心:由于时间点恢复和自动提交功能,它确保了数据保护。

如果系统崩溃,它将恢复到上一个检查点,从而确保没有数据丢失。此外,由于它是开源的,有一个庞大的开发者社区来确保系统正常工作,在论坛中扩展他们的支持,并修复各种错误。

此外,它通过支持外键约束提供了数据完整性,避免了跨表的数据不一致。因为它有一个密码系统,所以它提供了一个安全的接口,并保证在访问数据库之前根据主机验证密码。密码在连接到服务器时会被加密。

高性能

MySQL 非常快速、可靠,而且便宜,因为它的存储引擎架构非常出色。这意味着它可以提供高性能,而不会失去软件的重要功能。它能够快速加载,因为它的高速缓冲存储器。

随着时间的推移,MySQL 通过确保具有索引压缩的 B 树磁盘表、优化的嵌套循环连接和基于线程的内存分配等特性,提高了性能。存储引擎中的行级锁定和常量读取为多用户并发提供了额外的性能优势。

可攀登的

除了免费和开源之外,MySQL 程序可以用多种语言编写。MySQL connector/NET 允许开发人员将他们的数据链接到数据库。连接器/J 接口为使用 JDBC 关联的 Java 客户端程序提供了 MySQL 支持。用 C 编写的客户端库可用于用 C 或 C++或任何提供 C 绑定的语言编写的客户端。

也可以访问 C、C++、Eiffel、Java、Perl、PHP、Python、Ruby 和 Tcl 的 API。它也是最受欢迎的跨平台数据库系统之一,可以在 Linux、Windows、Solarix 等平台上使用。这一切都表明,它适用于几乎任何软件和操作系统,这使得它具有很高的可扩展性。

开源许可证

MySQL 在开源许可下对用户开放。这使得用户可以自由地使用和修改代码,使其与其他领域兼容。

由于它是开源的,它得到了开发人员的大量支持,这些开发人员确保错误和安全问题得到快速修复。MySQL 拥有用户组、论坛和支持,以提供一个内置的网络来尽快解决问题,同时传授数据库方面的知识。

用例

MySQL 被证明对 web 应用程序很有用,因为大多数服务器都依赖于 MySQL。除了被用作 WordPress 数据库之外,许多非 WordPress 企业,如 Joomla、TYPO3 和 Drupal,也使用 MySQL 作为他们的主要数据库。

以下是 MySQL 的几个用例,证明它是一个可靠而高效的数据库系统:

  • OLTP 事务:事务要求速度和准确性。MYSQL 可以轻松高效地扩展到每秒 1000 次查询。事务需要确保原子性、一致性、隔离性和持久性(ACID)。MySQL 也坚持 ACID 原则,使其对于关键事务是安全的。如果系统在事务期间出现故障,它将回滚到一个检查点。
  • LAMP 开源栈 : MySQL 对于运行在 LAMP 开源软件栈(LAMP 代表 Linux、Apache、MySQL 和 PHP/Python/Perl)上的众多应用来说是必不可少的。LAMP 是 web 服务的通用解决方案堆栈,被广泛认为是动态网站和高性能 web 应用程序的首选媒介。
  • 电子商务应用 : MySQL 是电子商务平台上最流行的交易机器之一。它有利于管理客户数据、交易和产品目录。在电子商务解决方案中,MySQL 通常与其他非关系数据库同时使用,包括用于同步订单数据和存储非产品数据的文档和键值存储。

PostgreSQL 与 MySQL 的比较

如果您不确定适合您业务的数据库,本节将帮助您选择最佳途径。虽然 PostgreSQL 和 MySQL 方便、实用且受欢迎,但选择更适合您需求的数据库是势在必行的。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

本节将深入探讨这两个数据库之间的不同之处。

句法

说到语法,Postgresql 和 MySQL 都很相似。以下是两者的选择查询:

SELECT * FROM STUDENTS;

然而,MySQL 不支持几个子查询,比如“LIMIT”或“ALL”它也不支持标准的 SQL 子句,如“INTERSECT”或“OUTER JOIN”

MySQL 不像 PostgreSQL 那样完全符合 SQL,PostgreSQL 的不支持上面提到的所有子查询。如果您的业务需要经常使用这些子查询,那么 PostgreSQL 将是更合适的选择。

支持的语言

PostgreSQL 和 MySQL 支持许多相同的语言,只是有一些差异。

另一方面,PostgreSQL 支持更广泛的编程语言:

  • C/ C++
  • 德尔斐
  • 占线小时
  • Java 语言(一种计算机语言,尤用于创建网站)
  • java 描述语言
  • 咬舌
  • 。网
  • 计算机编程语言
  • 稀有
  • TCL 集团股份有限公司(TCL Corporation 的缩写)
  • 其他编程语言

以下是 MySQL 支持的语言列表:

  • C/C++
  • 德尔斐
  • 占线小时
  • Java 语言(一种计算机语言,尤用于创建网站)
  • 咬舌
  • 节点. js
  • Perl 语言
  • 服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
  • 稀有

速度

在为您的业务需求选择最佳数据库时,速度是一个不可或缺的因素。一个快速的数据库不仅可以确保你的网站运行得更快,还可以通过指出你可以删除的未使用的数据来帮助减轻服务器的压力。

PostgreSQL 和 MySQL 都以市场上最快的 DBMS 解决方案而闻名。然而,在这个类别中没有明确的赢家。您可以很容易地找到基于配置、测试和硬件推荐一个数据库的基准。一个可能在并发性上占上风,而另一个可能在内存很少的单核机器上表现得更好。

最终,这取决于你如何使用它们。众所周知,MySQL 的只读命令速度更快,但代价是并发性,而 PostgreSQL 在读写操作、海量数据集和复杂查询方面表现更好。

体系结构

MySQL 是纯关系数据库,而 PostgreSQL 是对象关系数据库。PostgreSQL 提供了更复杂的数据类型,并允许对象继承属性。另一方面,这也使得使用 PostgreSQL 变得更加复杂。PostgreSQL 包含一个单一的、符合 ACID 的存储引擎。除了默认的存储引擎 InnoDB 之外,MySQL 还支持 15 种不同的存储引擎。大量的存储引擎允许您快速将它们用于其他使用情形。

PostgreSQL 通过为每个建立的客户端连接分配内存来生成一个新的系统进程。这在有许多客户端连接的系统上需要大量内存。另一方面,MySQL 使用单个进程,并为每个连接维护一个线程。这使得 MySQL 更适合企业范围之外的应用程序。

表演

PostgreSQL 符合标准,功能丰富,可扩展。以前,PostgreSQL 的性能相当稳定——读取速度通常比 MySQL 慢,但它可以更高效地写入大量数据。最重要的是,PostgreSQL 比 MySQL 更好地处理了并发性。

在过去的几年里,他们之间的能力差距已经大大缩小。如果您使用旧的 MyISAM 引擎,MySQL 读取数据的速度仍然很快。它还经过优化,在大量数据写入方面赶上了 PostgreSQL。

在为您的目的选择合适的工具时,性能不应该成为大多数普通应用程序的约束因素。PostgreSQL 和 MySQL 在大多数情况下性能相当。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

复制和集群

复制是一个让开发人员将数据从一个数据库复制到其副本数据库的过程。这确保了每个用户都拥有相同级别的信息。复制还带来了各种好处,如容错、可伸缩性、自动备份,以及在不影响主群集的情况下执行长时间查询的能力。

信息

除了数据库备份,一些主机还提供全站点自动备份。金斯塔也不例外。看看我们的灾难恢复协议如何保护您和您的数据安全。

MySQL 和 PostgreSQL 都支持复制。PostgreSQL 提供同步复制,这意味着它有两个数据库同时运行,主数据库与副本数据库同步。您甚至可以使用 PostgreSQL 执行同步和级联复制。然而,在 MySQL 中,复制是单向异步的。这意味着一个数据库服务器充当主服务器,其他服务器是副本服务器。

MySQL 和 PostgreSQL 也支持集群。群集利用共享存储将一组相同的数据复制到环境中的每个节点。这使得数据库能够容忍故障,因为在一个环境中的不同节点之间复制数据会产生冗余。

数据和表格结构

JSON 支持仍然是 MySQL 包含的主要 NoSQL 特性之一。相比之下,PostgreSQL 支持用户定义的类型、数组、hstore 和 XML。能够处理更多数据类型的主要好处是增加了功能。例如,通过接受数组作为数据类型,PostgreSQL 还可以提供与这些数组兼容的主机函数。

然而,尽管使用替代格式存储数据有很多优点,但是执行这种数据格式可能会更复杂,因为它们不遵循长期的基准。因此,与数据库一起使用的组件可能并不总是符合 PostgreSQL 格式。

就 SQL 符合性而言,MySQL 只是部分符合 SQL,因为它不支持像 no check 约束这样的所有特性。也就是说,它确实提供了很多扩展。

相比之下,PostgreSQL 比 MySQL 更符合 SQL,支持大多数主要的 SQL 特性——准确地说,是 179 个必需特性中的 160 个。

展开性

PostgreSQL 被认为是一个高度可扩展的工具,因为它支持 MySQL 中没有的各种高级数据类型。这将包括网络地址类型、本地 UUID、几何/GIS、可被索引的 JSON 以及时区感知时间戳。如果这没有使 PostgreSQL 成为这一轮的明显赢家,您可以添加您的操作符、数据类型和索引类型。

因此,如果您的应用程序正在处理非结构化数据或任何可用的独特数据类型,PostgreSQL 可能是更好的选择。但是,如果您只处理基本的数字和字符数据类型,这两个数据库都应该工作得很好。

指数

为了提高数据库性能,在处理大型数据表时,可以通过加速 SQL 查询来使用索引。如果没有索引,查询将会很慢,并成为 DBMS 的主要负担。

PostgreSQL 和 MySQL 都提供了不同的索引选项。PostgreSQL 索引类型包括以下几种:

  • 仅排列表中某一部分信息的部分索引
  • b 树索引和散列索引
  • 由表达式函数而不是列值生成索引的表达式索引

另一方面,MySQL 提供了以下索引选项:

  • 存储在 R 树上的索引,例如空间数据类型上的索引
  • 存储在 B 树上的索引,如主键、索引、全文和唯一
  • 使用全文索引时的倒排列表和散列索引

安全性

PostgreSQL 和 MySQL 都支持组和用户管理,并向各种角色授予 SQL 特权。MySQL 支持原生窗口服务、PAM 和 LDAP 进行用户认证,而 PostgreSQL 支持基于 IP 的客户端认证和使用 Kerberos 和 PAM 的过滤。所以,这两个数据库在安全性方面并驾齐驱。

支持和社区

PostgreSQL 和 MySQL 都有有用的社区为用户提供支持。

PostgreSQL 拥有一个庞大的志愿者社区,他们通过邮件列表和 IRC 向用户提供免费建议。此外,您甚至可以通过第三方提供商购买付费支持。您甚至可以通过浏览市场上各种有用的 PostgreSQL 书籍和手册来排除故障。

MySQL 也有一个庞大的志愿者社区,他们会花时间为你提供免费的建议和支持。您可以在 Percona 和 MySQL 网站上获得这种支持。除了免费的社区支持,Oracle 还为其所有产品的商业版本提供 24/7 付费支持。像 PostgreSQL 一样,您也可以通过钻研大量免费且有用的 MySQL 指南、书籍和教程来进行故障排除。

总而言之,对 PostgreSQL 的支持可能有点挑战性,因为它需要更多的技术专业知识来设置和使用。此外,PostgreSQL 专家的数量比您现在可以支配的 MySQL 专家的数量要少。所以,在用户支持和管理的简易性方面,MySQL 稍微好一点。

PostgreSQL vs MySQL vs 替代品

当然,MySQL 和 PostgreSQL 并不是您可以使用的唯一数据库选择,甚至也不是您仅有的两个开源数据库选择。关于 PostgreSQL 和 MySQL 已经说得够多了。让我们介绍一些其他的选择,可以让这两个运行他们的钱!

1.MongoDB

The MongoDB logo, showing the text beside an upright, green leaf.

MongoDB logo (Image source: Kubirds)

MongoDB 是一个免费使用的、源代码可用的、面向文档的、跨平台的数据库程序。这个 NoSQL 数据库程序利用带有可选方案的类似 JSON 的文档来有效地运行。MongoDB 确保您可以使用适合任何用例的统一内部查询接口和灵活的文档数据模型,将发布和迭代速度提高 3-5 倍。

MongoDB 是每个行业的基础,无论您是在构建任务关键型应用程序,还是在拓展客户体验的极限。以下是 MongoDB 的一些关键特性,这些特性帮助它成为 PostgreSQL 和 MySQL 的可行替代品:

  • 分片 : MongoDB 允许其用户通过分片来水平扩展应用程序,分片是一种用于将大型数据集分布到多个数据集的方法。MongoDB 用户可以利用一个分片键(包含单个或多个副本的主键)来确定集合中的数据分布,并将数据划分到分片的不同范围。
  • 即席查询:即席查询是为实现查询提供不同回报的替代命令。MongoDB 还支持正则表达式(Regex)、范围查询和字段搜索。
  • 文件存储:你可以利用 MongoDB 作为一个文件系统,称为 GridFS,它带有负载平衡和数据复制功能,可以让多台计算机存储文件。GridFS 或网格文件系统由 MongoDB 驱动程序组成,可以通过 Lighttpd 插件和 Nginx 或 mongofiles 实用程序访问这些驱动程序。

2.MariaDB

The MariaDB logo, showing the text below a stylized brown sea lion outlined in blue.

MariaDB logo (Image source: Docker Hub)

MariaDB 是 MySQL 关系数据库管理系统的商业支持分支,其专门构建的可插拔存储引擎支持以前需要各种特殊数据库的工作负载。对于分析、事务或混合用例,您可以在几分钟内部署 MariaDB。

MariaDB 拥有由纳斯达克(Nasdaq)、德意志银行(Deutsche Bank)、星展银行(DBS Bank)、ServiceNow、威瑞森和沃尔格林(Walgreens)等公司组成的杰出客户群,以提供无与伦比的运营灵活性而闻名,同时又不放弃完全 SQL 和 ACID 合规性等关键企业功能。

以下是 MariaDB 的一些关键特性,这些特性使它成为一个不可或缺的工具:

  • 虚拟列:对虚拟列的支持是 MariaDB 的关键特性之一。虚拟列可用于在数据库级别执行计算。当多个应用程序访问一列时,用户不必在每个应用程序中单独编写计算。相反,数据库代表他们做这件事。
  • 数据库视图:视图是很好的数据库性能优化特性。当在视图查询期间涉及虚拟表时,MariaDB 采取了与 MySQL 不同的方式。
  • 线程池(Thread pooling):在处理管道中的多个数据库连接时,线程池有助于加速 MariaDB 的工作。线程池为您提供了一个开放线程池,而不是为每个连接打开一个单独的线程。

PostgreSQL vs MySQL:你该选哪个?

总结一下,在两个数据库之间做出选择并不总是简单明了的。因为这里没有错误的答案,所以归结为上下文。

如果您正在寻找一个功能丰富的数据库,它可以顺利地处理大量的数据库和复杂的查询,同时允许您将任何应用程序扩展到企业范围,那么您应该选择 PostgreSQL。

另一方面,如果你是一个初学者,正在寻找一个更容易管理和设置,同时又可靠、快速和容易理解的数据库,你可以试试 MySQL。

如果你只是不能决定,一个选择是在做最后决定之前把它们都拿去试驾。你可以下载并使用 DevKinsta,我们的免费本地开发工具来试用 MySQL,以及一个不同的本地开发工具或服务来试用 PostgreSQL。

PostgreSQL vs. MySQL: what makes these two open source databases difference? 🤔 Read on to learn more...🚀Click to Tweet

摘要

在本文中,我们讨论了 PostgreSQL 和 MySQL 之间的主要区别。其中包括关键因素,如速度、性能、语法、可扩展性、安全性、支持和社区、索引和架构等,以帮助您就适合您独特业务需求的工具做出明智的决策。

我们得出结论,这是两者之间的一场势均力敌的战斗,PostgreSQL 和 MySQL 各有不同的优点和挑战。“正确”的选择最终将取决于你和你计划如何经营你的企业。

在 PostgreSQL 和 MySQL 之间,你打算在你的下一个项目中使用哪一个,为什么?我们很想听听你的想法!请在下面的评论区分享它们。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

PostgreSQL 与 SQL Server: 16 个关键差异

原文:https://kinsta.com/blog/postgresql-vs-sql-server/

市场上有各种各样的数据库可供选择,用户通常可以仔细考虑 PostgreSQL 和 SQL Server,以选择更适合他们用例的选项。利用 PostgreSQL 进行运营的组织可能希望转换到 Microsoft SQL Server 这样的数据库,因为它主要满足不同的数据仓库解决方案、电子商务和其他业务线的需求。

从历史上看,Microsoft SQL Server 一直是依赖于其他 Microsoft 产品的组织的最爱,但 PostgreSQL 已经迅速崛起,不仅因为开源的好处,还因为其活跃的用户社区和方便的功能。

这就是我们进行这次讨论的原因。比较 PostgreSQL 和 SQL Server 将有助于您更好地了解两种系统的可能优势和权衡,以及哪一种更适合您的目的。

让我们开始吧!

PostgreSQL 是什么?

The PostgreSQL logo, showing the text below a stylized blue elephant head outlined in black and white.

PostgreSQL logo (Image Source: Uberconf)

PostgreSQL 已经成为一个企业级的高级开源数据库,支持 JSON(非关系)和 SQL(关系)查询。这个强大而稳定的数据库管理系统得到了三十多年活跃的社区开发的支持,这有助于它在完整性、可靠性、弹性、性能和正确性方面的声誉。
PostgreSQL 被用作各种移动、web、分析和地理空间应用的主要数据仓库或数据存储。PostgreSQL 还拥有支持高级数据类型以及性能优化的丰富历史,这在它的商业数据库同行中很常见,如 Microsoft SQL Server 和 Oracle。

除了免费和开源,PostgreSQL 还具有高度的可扩展性。例如,您可以生成自定义函数,定义数据类型,甚至用各种编程语言编写代码,而不必重新编译数据库!

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

历史

以下是历年来 PostgreSQL 的简要概述:

  • Ingres 最初是在 1977 年开发的。
  • 迈克尔·斯通布雷克和他的同事在 1986 年开发了 Postgres。
  • 1990 年,PostgreSQL 中增加了对 PL/ pgSQL 和 ACID 遵从性的支持。
  • NYCPUG(纽约市 PostgreSQL 用户组)早在 2013 年就加入了 PgUS(美国 PostgreSQL 协会)。
  • 2014 年,PGconf 为 PostgreSQL 用户开启了一个新时代。

主要特征

现在,让我们继续来看看 PostgreSQL 的一些特性,这些特性使它成为市场上不可或缺的工具:

  • 标准符合性和可靠性: PostgreSQL 的预写日志功能使其成为一个高度容错的数据库。PostgreSQL 也是 ACID 兼容的,并以各种语言提供对视图、外键、触发器、连接和存储过程的全面支持。它包括大多数 SQL: 2008 数据类型,包括布尔、数字、整数、日期、VARCHAR、时间戳、间隔和 CHAR。
  • 健壮的扩展: PostgreSQL 拥有健壮的特性集,如时间点恢复、多版本并发(MVCC)、表空间、粒度访问控制和在线/热备份。PostgreSQL 在区分大小写、排序和格式方面也是区域设置敏感的。它在可管理的数据量和可容纳的并发用户数量方面都具有高度的可扩展性。
  • 开源许可:您可以在开源许可下使用 PostgreSQL 源代码,让您可以自由地修改、使用和实现它,而无需支付任何费用。最重要的是,PostgreSQL 不会产生许可成本,这消除了过度部署的风险。PostgreSQL 的爱好者和贡献者社区定期发现修复和错误,有助于数据库系统的整体安全性。

用例

PostgreSQL 的多功能性允许它在广泛的用例中使用,例如:

  • 联邦中心数据库: PostgreSQL 的 JSON 支持和外来数据包装器允许它与其他数据存储(包括 NoSQL 数据类型)链接,并作为多语言数据库系统的联邦中心。
  • 通用 OLTP 数据库:大型企业和初创公司都使用 PostgreSQL 作为主要的数据存储,以支持其互联网规模的应用程序、产品和解决方案。
  • 地理空间数据库: PostgreSQL 在与 PostGIS 扩展一起使用时支持地理对象。它还可以用作地理信息系统(GIS)和基于位置的服务的地理空间数据存储。
  • LAPP 开源堆栈: PostgreSQL 也可以运行动态应用和网站,作为 LAMP 堆栈的强大替代方案的一部分。LAPP 代表 Linux、Apache、PostgreSQL、Perl、PHP 和 Python。

If you're confused by the difference between ll PostgreSQL and SQL Server 🤔, this post will help you decide which one is the right choice for your needs. 🚀Click to Tweet

什么是 SQL Server?

The SQL Server logo, showing the text next to a stylized gray and Microsoft deep red dynamic grid symbol.

SQL Server logo (Image Source: Software Engineering Stack Exchange)

SQL Server 是由微软开发的关系数据库管理系统,拥有悠久的历史,准确地说有 32 年。Microsoft SQL Server 被认为是一种软件产品,其主要功能是根据其他软件应用程序的请求检索和整理数据。

这些应用程序可能运行在网络中的不同计算机上,也可能运行在同一台计算机上。多年来,Microsoft SQL Server 经历了许多更新,成为当今市场上最受支持和最负盛名的 RDBMSs 之一。

SQL Server 的受欢迎程度很大程度上要归功于它的创造者微软。当 MS SQL Server 处于萌芽阶段时,微软已经确立了自己作为科技巨头的地位。

SQL Server 凭借其广泛的应用程序和工具简化了数据处理工作,成功地成为一种数据库管理系统。其全面的图形用户界面(GUI)允许直观、轻松地使用数据库,同时允许您为报告生成统计数据。

历史

以下是这些年来 Microsoft SQL Server 的简要概述:

  • SQL Server 的发展始于 1988 年,当时微软与 Sybase 和 Ashton-Tate 合作开发数据库维护和创建软件,为微软的商业数据库市场提供了动力。
  • SQL Server 1.0 于 1989 年推出。当时,它利用系统管理员工具(SAF)来生成数据库。它没有任何文档,但仍然允许用户运行 SQL 查询和设置参数。Microsoft SQL Server 的第一个代码片段是由 Sybase 编写的。
  • 渐渐地,更新的版本发布了更多的改进和特性。SQL Server 2019 或 Aries 是综合版本万神殿的最新成员,因为它专注于使数据库功能更加直观。这包括大数据集群选项,让用户可以选择使用巨型数据集。

主要特征

历史谈够了。让我们来看看使 SQL Server 如此受欢迎的几个关键特性:

  • 强大的安全平台: SQL Server 通过内置的数据保护、数据分类、警报和监控功能,让您能够保护动态和静态数据。使用 SQL Server,您可以轻松加密敏感数据并对加密数据执行丰富的计算,并允许基于角色的自定义数据访问以及复杂的行筛选。
  • 行业领先的性能: SQL Server 在 Linux 和 Windows 上拥有破纪录的性能,因为它在 TPC-H 数据仓库工作负载、TPC-E OLTP 工作负载和实际应用程序性能基准测试中一直领先。您还可以使用 SQL Server 的内存数据库功能(如内存优化的 tempdb 和持久内存支持)来提高关键任务工作负载的性能。
  • 通过大数据集群实现所有数据的智能化: SQL Server 允许您通过查询整个数据资产(Azure SQL 数据库、SQL Server、Teradata、 MongoDB 、Azure Cosmos DB 等)中的数据,从所有数据中获得有价值的见解,而无需复制或移动数据。您甚至可以通过将 SQL Server 中的非结构化和结构化数据结合起来,并通过 Spark 或 T-SQL 访问数据,来构建一个共享数据湖。

用例

SQL Server 的可扩展性和性能使其能够在广泛的使用案例中得到利用,例如:

  • 复制服务: SQL Server 利用 SQL Server 复制服务来协调和复制数据库对象,或者作为现有对象的子集,或者作为其整体。复制服务遵循订阅者/发布者模型,即修改由一个数据库服务器(发布者)发出,由其他服务器(订阅者)收集。
  • Notification services:Notification services 最初是作为 SQL Server 2000 发布后的附加组件发布的。它是一种创建数据驱动的修改的机制,然后将这些修改发送给 notification services 订阅者。
  • 机器学习服务: SQL Server 机器学习服务在 SQL Server 实例中运行,使人们能够执行数据分析和机器学习,而不必在网络上移动数据或受到计算机内存的阻碍。
  • 分析服务:SQL Server Analysis Services(SSAS)为 SQL Server 数据库增加了数据挖掘和 OLAP 功能。OLAP 引擎支持数据的关系联机分析处理(ROLAP)、多维联机分析处理(MOLAP)和混合联机分析处理(HOLAP)存储模式。SQL Server analysis services 还支持 XML 作为分析标准的基本通信协议。

PostgreSQL 与 SQL Server 的比较

既然我们已经对 SQL Server 和 PostgreSQL 的突出方面有了一个概念,那么让我们深入研究一下两者之间的区别。您可以使用下面提到的因素来确定哪个数据库管理系统最适合您的需求。

有效性

PostgreSQL 提供了各种各样的解决方案来确保用户的高可用性,包括预写日志传送、共享磁盘故障转移、数据分区和各种复制方法。像 EDB Postgres 故障转移管理器这样的工具通过监控和识别数据库故障来提供自动故障转移以确保高可用性。

另一方面,SQL Server 包括各种高可用性工具,如日志传送、故障转移群集和复制。当满足特定条件时,全天候工作的 SQL Server 可用性组提供自动故障转移。但是,此产品只能在 SQL Server 企业版中访问。

数据和表格结构

为简单起见,PostgreSQL 为其用户提供了 PL/pgSQL 过程编程语言。PostgreSQL 中标准 SQL 的附加功能包括用户定义的类型、自定义模块、扩展、JSON 支持以及触发器和其他功能的额外选项。

SQL Server 使用 T-SQL,它与标准 SQL 有相似之处。T-SQL 包括对数据和字符串处理、过程编程和局部变量的额外支持。

如果您想更好地了解系统如何缓存和处理请求,PostgreSQL 通过将进程视为独立的操作系统进程来隔离它们。每个数据库都有单独的内存,并运行自己的进程。这使得监控和管理变得非常容易,但同时也增加了扩展多个数据库的难度。

SQL Server 使用的缓冲池可以根据处理需要进行限制或增加。所有的工作都在单个池中进行,没有多个页面,不像 PostgreSQL。

PostgreSQL 和 SQL Server 都支持临时表,因为它允许您存储来自分支复杂逻辑和复杂过程的中间结果。通过将中间信息与基本信息隔离开来,临时表有助于改进数据库的组织和性能。

碎片整理

当开发人员修改 SQL 数据库的不同部分时,修改发生在系统的不同点,并且可能难以跟踪、读取和管理。因此,维护还应该包括碎片整理—通过分配索引、生成新页面和重新访问结构来整理更新的数据库的过程。然后,数据库可以释放未被适当利用的磁盘空间,以便数据库可以以更快的速度运行。

PostgreSQL 扫描数据层的表以寻找空行并去除不必要的元素。通过这样做,系统释放了磁盘空间。但是,这种方法需要大量的 CPU,并且会影响应用程序的性能。

另一方面,SQL Server 提供了高效的垃圾收集器,不会产生超过 15-20%的开销。从技术上来说,开发人员也可以连续运行垃圾收集器,因为它非常有效。总而言之,SQL Server 提供了比 PostgreSQL 更多的碎片整理方法。

指数

数据库处理索引的方式证明了它的可用性,因为索引用于精确定位数据,而不是查找特定的行。您还可以使用索引来引用多列或多行。您可以为文件分配相同的索引,将它们呈现在数据库的不同位置,并通过一次搜索收集所有这些片段。

PostgreSQL 支持基于索引的表组织,但早期版本不使用自动索引更新。它还允许您在一次搜索中查找许多索引,这意味着您可以发现大量信息。

SQL Server 为索引管理提供了丰富的自动化功能。它们可以组织成簇,并保持正确的行顺序,无需人工干预。SQL Server 还支持部分索引和多索引搜索。

特征

与其他 SQL 数据库不同,PostgreSQL 不提供内置的作业调度程序。重复性任务需要外部工具,如 Linux 上的 cron、pgAgent 或 pg_cron,以及 Windows 上的 SQLBackupAndFTP 或任务调度器。

另一方面,SQL Server 中的任务可以通过 SQL Server Management Studio 轻松安排。

PostgreSQL 有完善的多版本并发控制(MVCC)来同时处理多个过程。MVCC 提供了数据库信息的快照,以避免显示由于其他数据库系统中发生的同时事务或数据锁定而导致的不一致。PostgreSQL 利用可序列化快照隔离(SSI)来确保事务隔离。

SQL Server 的多版本并发控制系统开发程度较低,默认情况下,它依赖数据锁定来避免并发事务导致的错误。SQL Server 还提供了开放式并发功能,该功能假定这种问题很少发生。因此,与锁定行相反,它会根据缓存的版本进行验证,以确定是否发生了任何更改。

分区和分片

当性能提升对于大型数据库至关重要,并且存储过程已经达到极限,并且硬件也进行了升级时,您需要将工作分配到不同的服务器上。这就是分区和分片发挥作用的时候了。

虽然分片和分区本质上都是将大型数据集分成较小的子集,但分片意味着数据分布在多台计算机上,而分区则不是。

从 10.0 版开始,PostgreSQL 支持声明性分区,即按范围、列表或散列进行分区。

MS SQL Server 支持水平分区,即将一个多行的表分成几个行数较少的表。

MS SQL Server 还通过联合支持分片。“联邦分区视图”是表分布在不同服务器上以平衡处理负载的视图。

要从服务器检索记录,您需要某些命令。这些命令称为分布式分区视图。他们使用典型的 SQL 语句和关键字 UNION 从所有分布式服务器中提取数据。

同样,当在底层表上观察到特定的规则时,可以使用 DML 语句(INSERT、UPDATE 和 DELETE)。另外,请注意,只有企业版支持联合分区视图。

虽然联邦分区视图可以在任何其他版本上实现,因为它们没有明显的语法,但是它们不会被识别为联邦分区视图。将视图识别为跨服务器分区的规则仅适用于企业版。

使用这种分区技术,大多数应用程序的性能通常会提高 20%到 30%。因此,如果您的企业管理大量数据,这是一个非常有用的工具。

分身术

分区是将数据库分成更小的子集,并将分区表分布到不同的节点,而复制是在多个数据库之间复制数据库,以提供快速查看和更短的响应时间。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

PostgreSQL 提供主从复制。这可以是异步或同步的。预写日志(wal)允许与副本节点共享更改,因此支持异步复制。

其他类型的复制主要包括逻辑复制、流复制和物理复制。

  • 逻辑复制遵循发布和订阅模型。更改基于数据复制的身份,如其主键,而不是其物理位置。
  • 流式复制本质上是在文件创建后立即对 wal 进行流式复制,从而使备用服务器能够快速更新,而不是等待文件被填满。
  • 最后,物理复制通常使用文件和目录来实现,不考虑物理位置中的内容。PostgreSQL 本身不提供多主复制,但是可以在其他第三方工具的帮助下执行。

SQL Server 复制将数据从发布服务器复制到订阅服务器。它可以是异步的,也可以是异步的,具体取决于 SQL Server 版本。它提供三种类型的复制,即:事务复制、快照复制和合并复制。

  • 事务复制通常在服务器到服务器的环境中实现,在这种环境中,修改在发生时从发布者传递到订阅者。
  • 合并复制通常在服务器到客户端环境中可能发生冲突的情况下实现,或者在订阅服务器或发布服务器上可以更改和跟踪数据并随后进行同步的情况下实现。
  • 快照复制在数据不经常更新、不需要增量更改或者数据完全按照特定时刻出现的样子复制的情况下实施。此外,企业版提供对等复制作为多主节点复制的替代解决方案。

语言和语法

PostgreSQL 用 C 语言写,MS SQL 用 C 和 C++写。在语言绑定方面,PostgreSQL 非常容易使用和连接,因为它的外部 API libpq ,这是非常好设计和记录的。

但是,SQL Server 外部语言绑定可能取决于其他几个因素。您可能需要安装额外的驱动程序或创建类来存储被查询的数据;因此,你必须知道数据在编译时是什么样子。您可能需要参考文档,并且后续工作可能相当耗时。

谈到过程语言特性,PostgreSQL 和 SQL Server 都提供了强大的支持。PostgreSQL 支持 JSON 数据类型,用户可以轻松地将 Python、Java、PHP、Perl 和 R 与 SQL 一起使用,因为它们受到过程语言特性的支持。

虽然 SQL Server 确实提供了支持,但该功能还有待改进,因为会出现一些小错误,并且由于速度较慢,可能需要一些时间来实现。用户需要将代码编译成一个。dll 文件。

在 PostgreSQL 中,不需要创建一个。dll 文件。PostgreSQL 还提供了大量的正则表达式(regex)作为分析工作的基础。

相比之下,MS SQL Server 的正则表达式较少,并且支持某些命令,如 substring 和 pattern index,它们可能不如 PostgreSQL。

表演

说到性能,PostgreSQL 在几个方面胜过 SQL Server。我们谈到了分区,虽然 PostgreSQL 和 SQL Server 都提供分区,但 PostgreSQL 免费提供,效率更高。

PostgreSQL 还提供了更好的并发性,这是多个进程可以同时访问和修改共享数据的一个重要特性。PostgreSQL 的 MVCC 特性确保了死锁的可能性较小,只有当两个查询试图同时修改同一行并序列化对该行的更新时才会阻塞。

为查询数据而获取的 MVCC 锁与为写入数据而获取的锁并不冲突。这最大限度地减少了锁争用,并在多用户环境中提供了更好的性能。

另一方面,SQL Server 具有欠发达的并发性,一些进程甚至可能被死锁。与 MVCC 功能相反,每当更新一行时,都会创建该行的新版本,而不是覆盖同一行,并且两者都被维护。渐渐地,旧版本转移到名为 tempdb 的系统数据库中。但是,它的并发性还有很长的路要走。

PostgreSQL 还为几个扩展提供了索引支持,这提高了数据库的性能。

另一方面,SQL servers 还没有改进它们的索引实现,它们还没有包括数组——最常用的变量类型之一。

定价

PostgreSQL 是在 PostgreSQL 许可证下发布的,这是一个自由的开源许可证。PostgreSQL 全球开发小组一直致力于使 PostgreSQL 永远成为免费的开源软件。没有计划在不同的许可证下修改或发布 PostgreSQL。

MS SQL Server 是在商业许可下作为 Microsoft 产品的一部分发布的。2016 年初,该数据库作为开发人员的免费工具提供,但它只支持一个处理器和 1GB 的最大内存。虽然它是免费的,但它缺少一些你做生意可能需要的功能。如果您需要更多的服务器,您可能需要为每台服务器支付 899 美元。最近,SQL Server 企业版的价格为 13,748 美元。

可量测性

当数据增加以满足用户需求时,数据库系统在不影响其性能的情况下继续良好运行的能力称为可伸缩性。

PostgreSQL 在可伸缩性方面提供了许多特性,并且可以使用几个 CPU 内核来快速并行实现查询。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

SQL Server 也可以使用核心,但是,标准版本仅限于 24 个核心的 CPU。企业版允许使用无限的 CPU 内核。SQL Server 还拥有超大规模特性,您可以确定上限和下限,从而根据需要向下和向上扩展。

安全性

随着数据盗窃、黑客和盗版的增加,安全性确实成为数据库系统中最重要的需求。然而,SQL Server 和 PostgreSQL 都提供了出色的数据加密和身份验证。

认证方法

在服务器端,PostgreSQL 提供了高级认证方法,包括轻量级目录访问协议(LDAP)和可插拔认证模块(PAM),这可能会减少 PostgreSQL 数据库服务器的攻击面。PostgreSQL 的其他服务器级安全性增强包括 PostgreSQL 服务器监听地址、基于主机的身份验证和证书身份验证。

在 MS SQL Server 中,有两种服务器级安全增强功能:Windows 身份验证模式和混合模式,混合模式包括 Windows Server 和 MS SQL Server 的身份验证过程。MS SQL Server 的安全模型是 Windows Server 的 Windows 身份验证模式和数据库之间的紧密集成。

数据加密

PostgreSQL 提供数据加密,并允许您在数据通过 web 或公共网络高速公路传输时使用安全套接字层(SSL)证书。它还允许您将客户端证书身份验证工具作为一个选项来实现。此外,您可以使用 cryptogenic 函数在 PostgreSQL 中存储支持对称密钥和公钥加密的加密数据。

在 MS SQL Server 中,可用的数据加密功能包括透明数据加密(TDE)、始终加密和列级加密。TDE 使用高级加密标准(AES)算法来加密物理文件,包括数据和日志文件。始终加密功能允许您在静态或动态两种状态下加密某些列(即数据在内存中也保持加密)。

用户级权限

此外,您可以在 PostgreSQL 和 SQL Server 中管理不同的用户及其权限(读、写)。

PostgreSQL 包括作为角色分配的用户级权限、通过角色的表级权限和角色继承。审计选项允许您检查数据库中用户和组的数据访问活动,这提供了一层额外的安全性。

SQL Server 通过用户组和角色来实现这一点。资源权限直接授予用户帐户,权限继承自父资源。

您还可以通过监视和审核 SQL Server 中的活动来识别并发问题、长时间运行的查询和常规工作负载指标。

储存;储备

存储是任何数据库系统性能的关键因素之一。随着服务器处理能力和大规模内存支持的增加,数据库在系统中允许更多的存储能力变得几乎是必不可少的。

PostgreSQL 是对象关系数据库,而 Microsoft SQL Server 是关系数据库系统。这意味着 PostgreSQL 提供了更复杂的数据类型,并允许对象继承,尽管这也使使用 PostgreSQL 变得更加复杂。它有一个与 ACID 兼容的存储引擎,并使用为每个客户端连接分配的内存来初始化一个新的系统进程。因此,随着系统上客户端连接的增加,需要分配更多的内存。

SQL Server 2016 及更高版本最多可以使用一百台计算机或虚拟机,每台计算机最多运行五个实例。然而,这也取决于它的版本。企业版允许最大的带宽,因此将授予更多的存储能力。虽然最新的标准版允许使用高达 128GB 的内存,但您可以在企业版中使用无限的内存。

支持和社区

PostgreSQL 定期免费发布更新版本。最近,PostgreSQL 全球开发组发布了对数据库系统所有支持版本的更新修复了过去三个月报告的超过 55 个 bug。PostgreSQL 拥有一个庞大的开发人员、第三方公司和爱好者社区,他们提供支持,并试图通过修复报告的错误来开发系统。

SQL Server 每隔几年就会发布一个新版本。支持费用取决于许可证的条款和条件。Microsoft SQL Server 还有一个支持社区,数据库分析师、开发人员、系统管理员或任何对该平台感兴趣的人都可以在这里提问,或者通过播客和网络广播(如 Guy Glantser 和 Eitan Blumin 主持的 SQL Server Radio)了解更多有关 SQL Server 的信息,在这里用户可以了解许多有关 SQL Server 及其与其他 Microsoft 工具的兼容性的信息。

PostgreSQL 和 SQL Server 都可以配备插件。价格和兼容性取决于插件。插件有助于管理、清理、备份数据库等等。

例如, Adminer 是一个数据管理工具,可以用来管理 PostgreSQL 和 MS SQL Server 中的数据。其他几个数据库插件也可以用来提高数据库的效率,例如:WP 优化、更好的搜索替换、WP 数据库备份等等。当您升级任何数据库系统时,可能会有数据迁移成本,但这对于任何其他标准 DBMS 来说都是正常的。

Seeing unexpected behavior? The PostgreSQL community takes pride in releasing software that will reliably store your data. If you believe you've discovered a bug, please click the button below and follow the instructions on how to submit a bug.

PostgreSQL bug discovery message (Image Source: PostgreSQL)

触发器和事件

PostgreSQL 有各种高级触发器,您可以根据自己的使用情况进行选择。支持的触发事件有 AFTER、BEFORE 和 INSTEAD OF,它们可用于插入、更新和删除事件来操作数据。如前所述,PostgreSQL 可以动态运行这些触发器,不需要将它们编译成一个。执行前的 dll 文件。当触发器被调用时,上述函数可用于执行复杂的查询。

SQL Server 为不同类型的数据库事件提供了各种触发器,即 DML 触发器、DDL 触发器和登录触发器:

  • DML 触发器或数据操作语言触发器是用于通过插入、更新或删除记录来操作数据的触发器。
  • DDL 触发器用于数据定义语言(DDL)事件,如创建、删除或更改数据库。
  • 登录触发器用于登录事件,如用户会话建立时。这些触发器在身份验证成功之后、建立用户会话之前触发。它们对于审计和控制登录活动非常有用。

视图

视图本质上是虚拟表,并不在物理上存储数据。它们通常用于安全目的,以限制用户对数据的访问。PostgreSQL 和 SQL Server 都支持可更新视图。

但是,在 PostgreSQL 中,除非满足以下先决条件,否则更新不会自动进行:

  • 在该视图的查询中,FROM 子句中应该有一个部分。该节可以来自表或另一个可更新的视图。
  • 选择列表中不应有窗口函数、聚合函数或集合返回函数。
  • 查询不能在顶级包含命令 HAVING、LIMIT、DISTINCT、WITH、INTERSECT、EXCEPT、OFFSET 或 LIMIT。

简而言之,用简单查询创建的视图可以更新,而用复杂查询创建的视图几乎不可能更新。另一方面,复杂视图可以通过使用规则来更新。虽然 PostgreSQL 可能没有提供运行物化视图的工具,但它有一个名为 matviews 的模块,可以帮助重建任何物化视图。

在 SQL Server 中,视图可以自动更新,同时支持用户定义的视图和系统定义的视图。此外,如果两个表视图有不同的键,并且 update 语句不涉及多个表,那么它们会被同时更新。

此外,用户可以利用触发器来更新复杂视图。SQL Server 还提供了运行物化视图(也称为索引视图)的工具。与其他关系数据库中的物化视图不同,索引视图与底层数据同步,因此可以自动更新。

SQL Server 和 PostgreSQL 的缺点

虽然我们已经讨论了 PostgreSQL 和 SQL Server 的所有细节,但它们都有各自的缺点。

虽然 PostgreSQL 是免费的,但它并不归某个组织所有。正因为如此,尽管它被大量报道,却很难在大众中找到立足之地。PostgreSQL 也更注重兼容性而不是速度。因此,为提高速度而进行的修改需要更多的工作。

另一方面,SQL Server 经常因其糟糕的用户界面而受到批评。它具有复杂的性能调优特性,并且不支持源代码控制。如果你为你的公司使用它,企业版可能会在你的口袋里烧一个洞。仅 SQL Server 2019 企业版就需要 13,748 美元,相当于 13 个房间的宜家家具!此外,许可可能很难理解,并且在不断变化。

如果 PostgreSQL 和 SQL Server 不太合您的胃口,您可以针对您的独特用例尝试使用 MongoDBMariaDB

MongoDB 是一个面向文档、免费使用的跨平台数据库程序,可以轻松利用类似 JSON 的文档。

另一方面,MariaDB 是 MySQL 的商业支持分支,其可插拔和专门构建的存储引擎支持通常需要大量不同数据库的工作负载。

PostgreSQL vs SQL Server:应该选择哪个数据库?

PostgreSQL 和 SQL Server 都是广泛使用的关系数据库,但是谁拿走了蛋糕?从上面的比较来看,PostgreSQL 在几个场景中胜过 SQL Server。它不仅是开源和免费的,而且它还具有几个易于使用和可以自动实现的功能,这与 Microsoft SQL Server 不同。

而且 PostgreSQL 有更适合的并发管理系统。它可以出色地处理多个进程可以同时访问和修改共享数据的情况。

如果你正在经营一个小企业,PostgreSQL 可能是一个适合你的选择,因为它是免费的,并提供了几个有用的功能来管理数据。它易于安装,可以在几乎所有类型的操作系统中实现。然而,对于在 Microsoft SQL Server 堆栈上有大量投资的企业来说,SQL Server 比 PostgreSQL 更有优势。
对比 PostgreSQL 和 SQL Server 有助于你了解两个系统的优势,以及哪一个最适合你。🤝让我们开始吧!✅ 点击推文

摘要

总而言之,PostgreSQL 和 SQL Server 都是功能性和多面性的数据库。虽然 PostgreSQL 几乎可以用于任何操作系统,并且适合于需要最大功能的小型企业,但是 SQL Server 最适合于大型企业,尤其是那些需要使用 Microsoft 产品的企业。

在本文中,我们讨论了 PostgreSQL 和 SQL Server 之间的主要区别及其功能。“正确”的选择最终将取决于你计划如何经营你的企业。

在 PostgreSQL 和 SQL Server 之间,你计划在你的下一个项目中使用哪个数据库,为什么?我们很想听听你的想法!请在下面的评论区分享它们。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

为什么高级 DNS 不再是可选的

原文:https://kinsta.com/blog/premium-dns/

你可能听说过“高级域名系统”这个词,也许你根本没想过。大多数人知道使用高级 DNS 提供商可以帮助他们,但不主动实施,或者可能不知道如何实施。

2016 年 10 月 21 日,历史上最大的 DDoS 攻击发生,搞垮了 PayPal、Spotify、Twitter、Reddit、易贝等大公司。有些人甚至称之为互联网的 DNS 末日。今天我们想深入探讨一个优质的 DNS 提供商如何在这些情况下帮助你,如果设置正确的话,并防止你的 WordPress 站点宕机。

什么是 DNS?

DNS(域名系统)是互联网的主干。你可以把它想象成万维网的电话簿。你访问的每个网站和域名都被映射到一个 IP 地址。

当您在地址栏中键入 Google.com 时,您的 ISP 会执行 DNS 查询,请求与该域名相关联的域名服务器。然后,到 IP 地址的映射由服务器在后台完成,这样您就可以使用域名来访问它。如果没有域名系统,你将不得不输入类似 216.58.217.206 这样的东西来进入谷歌。那岂不是很有趣!

how dns works

How DNS works

当您注册您的域名时,域名注册商通常会提供免费的 DNS 服务。比如 NameCheap、 GoDaddy 、Google Domains 等。所有这些都为您提供了设置域名服务器和将您的域名路由到您的 web 主机的 IP 地址的能力。谷歌域名可能是域名注册商提供的最好的免费 DNS 服务,因为它有一个非常大的基础设施。其他几家受欢迎的免费 DNS 提供商包括 Cloudflare飓风电气互联网服务。查看这 10 家免费 DNS 提供商的列表,寻找其他选择。

然而,如果你对你的业务和网站很认真,我们强烈建议你选择一家高级 DNS 提供商,我们将在下面详细介绍。
T3】

影响整个互联网的 DNS 攻击

2016 年 10 月 21 日,对很多公司来说,最糟糕的事情发生了。一场大规模的分布式拒绝服务 (DDoS)攻击针对一家流行的高级 DNS 提供商 Dyn 爆发,并设法开始使服务和网站离线。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

基本上发生的事情是,他们设法关闭了 Dyn 的域名服务器,正如我们上面解释的那样,没有这些服务器 DNS 查找就会开始失败。Dyn 开始在他们的官方状态页面上报告此事,并设法在持续约 11 小时的整个攻击过程中提供一致的更新。

dyn dns ddos attack status

Dyn DNS DDoS attack status

我们将继续针对托管 DNS 网络缓解 DDoS 攻击。欲了解更多信息,请访问我们的状态页面。

—Dyn(@ Dyn)2016 年 10 月 21 日

PrestaShop 与 WooCommerce:并列比较

原文:https://kinsta.com/blog/prestashop-vs-woocommerce/

如果你想建立一个网上商店,你对电子商务平台的选择将对你能使用的功能起到决定性的作用。在 PrestaShop 和 WooCommerce 之间做出选择是一个挑战,尤其是如果你不熟悉电子商务平台的话。理解每个选项之间的差异是做出正确决策的关键。

当比较电子商务软件时,你需要考虑几个因素。这些包括定价、易用性、总体功能和支持。

我们将对 PrestaShop 和 WooCommerce 在这些方面进行比较,以帮助您为自己的商店选择完美的电子商务平台。我们将根据您的需求来分析每个平台提供的功能和最佳选项。

我们开始吧!

查看我们的视频指南比较 PrestaShop 和 WooCommerce

预铺(主要特点和缺点)

PrestaShop 是一个开源电子商务平台,几乎可以推出任何类型的在线商店。您可以在任何网络主机上安装 PrestaShop,并访问广泛的社区模板和模块,以扩展您商店的功能:

PrestaShop website home page

PrestaShop

如果你不熟悉电子商务,PrestaShop 与一些网络主机和代理合作,提供全面的入职体验。这个过程可能意味着一切,从简单地设置 PrestaShop 到帮助你定制商店,包括你选择的产品。

使用 PrestaShop(以及大多数其他开源电子商务平台)的一个缺点是,你无法获得专门的支持。有大量的在线文档可以帮助您排除错误并实现您的目标。不过,除非你愿意花钱请专家帮忙,否则你基本上只能靠自己了。

WooCommerce(主要特点和缺点)

如果你使用 WordPress ,你很可能熟悉 WooCommerce 。这是 WordPress 提供的最受欢迎的电子商务插件,有超过五百万的活跃安装。

该插件向 WordPress 添加了一个完整的电子商务平台,而没有删除任何内容管理系统(CMS) 的核心功能:

WooCommerce

WooCommerce

结果是,你得到一个混合系统,它可以启动一个在线商店,并添加几乎任何你能想象到的功能。WooCommerce 和 WordPress 一样,都是开源软件。因此,一个充满活力的用户和开发人员社区创建了独特的主题和扩展来增强各种类型的商店。

和 PrestaShop 一样,WooCommerce 的开源特性意味着你无法获得专门的支持。然而,你也不必为使用软件付费。此外,有大量的文档可以帮助你学习如何充分利用 WooCommerce(包括我们的博客)。

想开网店?您对电子商务平台的选择将在您可以访问哪些功能方面发挥重要作用💪在这里了解更多⬇️ 点击推文

PrestaShop vs WooCommerce:面对面的比较

既然你已经对每个电子商务平台能提供什么有了一个概念,是时候并排比较 PrestaShop 和 WooCommerce 了。先说价格。

定价

PrestaShop 和 WooCommerce 都是开源软件。你可以下载任一电子商务平台,并安装在任何服务器上。如果你想在预算有限的情况下开一家电子商务商店,这种便利性让 WooCommerce 和 PrestaShop 都成为了绝佳的选择。

要建立 WooCommerce,你需要一个现有的 WordPress 网站。这意味着你还需要主机和一个域名。不同公司的主机价格相差很大。在 Kinsta,我们提供每月 35 美元起的计划

平均来说,如果你支付便宜的共享主机。com 域名,你可以花 15-20 美元用 WooCommerce 建立一个 WordPress 网站或者安装 PrestaShop。不过,这是基本方法,你可能还想购买高级主题(或模板)和插件来扩展商店的功能:

PrestaShop templates

Premium templates from PrestaShop.

PrestaShop 模板和插件往往比 WordPress 主题和插件更贵。如果你使用 WordPress,你也可以访问大量的插件和主题来选择。

WooCommerce 和 PrestaShop 都提供免费和付费的插件和主题/模板。您不需要使用它们,但在许多情况下,它们可以扩展您商店的功能。

装置

有几种方法可以同时安装 PrestaShop 和 WooCommerce。首先,你可以从它们各自的网站(或WordPress.org 库)下载这两个软件选项,上传到你的服务器,然后手动安装:

The PrestaShop download page

PrestaShop download page.

这个过程听起来可能很复杂,但是如果您有在服务器上安装软件的经验,应该不会有任何问题。如果你使用的是 WordPress,这个过程会变得简单得多,因为你可以从仪表盘安装 WooCommerce:

Downloading WooCommerce

Installing WooCommerce.

根据你使用的网络主机,你可能会在启动一个新网站时选择安装 WordPress + WooCommerce。例如,Kinsta 在创建新网站时提供了这一选项:

Installing WooCommerce during the Kinsta signup process

Easily install WooCommerce in MyKinsta.

对于大多数其他网络主机,你可以使用软件安装程序,如 Softaculous 。有了 Softaculous,你只需点击几下就可以安装 WordPress 或 PrestaShop。这样,您就不必手动下载、上传和安装软件:

Using Softaculous to install PrestaShop

Softaculous to install PrestaShop.

WooCommerce 和 PrestaShop 都是新电子商务商店非常受欢迎的选择。这意味着大多数网络主机将提供简化的安装选项,使商店设置更容易。现在我们来谈谈你安装软件后会发生什么。

易用性

安装 WooCommerce 和 PrestaShop 都相对简单。然而,您还需要考虑配置这两个平台并使用它们来发布产品有多容易。

PrestaShop 和 WooCommerce 都可以让你轻松地使用带有启动向导的平台。使用 PrestaShop,向导将引导您创建您的第一个产品,定制您的商店,并对其进行配置:

The PrestaShop onboarding wizard

PrestaShop onboarding wizard.

当使用 PrestaShop 发布产品时,您有一个编辑器,它使您能够定制该项目的每个方面。您可以添加产品图片、描述、变化、功能、运输选项等:

The PrestaShop product editor

PrestaShop product editor.

同样,WooCommerce 也提供了全面的产品编辑器。如果你熟悉 WordPress 经典编辑器,创建 WooCommerce 产品应该是你的第二天性:

The WooCommerce product editor

WooCommerce product editor.

WooCommerce 和 PrestaShop 都可以让你将产品配置到最细微的细节。每个产品编辑器之间的主要区别来自它们的界面。

PrestaShop 通过商店配置更容易为您的商店找到单独的设置。大多数设置类别都可以从 PrestaShop 主导航菜单中获得:

Configuring PrestaShop payment options

Configure PrestaShop payment options.

有了 WooCommerce,你的商店设置不会被隐藏,但也不容易访问。你必须在仪表盘中进入 WooCommerce 并跳转到设置页面。在这里,您可以找到每组配置选项的单独选项卡:

Configuring WooCommerce general settings

Configuring WooCommerce general settings.

与 PrestaShop 相比,WooCommerce 提供了更多的配置选项。然而,值得注意的是,您可以使用模块和插件来扩展 WooCommerce 和 PrestaShop 的功能。

总的来说,如果这是你第一次使用电子商务平台,你将需要查看 WooCommerce 或 PrestaShop 的文档。这两个选项都是用户友好的,但有太多的功能和设置,你可能会浪费时间试图自己搞清楚一切。

有了 WooCommerce,你可以查看我们关于启动和配置新店的完整指南。

性能和可扩展性

对于一个成功的电子商务商店,它需要快。这意味着整个商店的页面需要快速加载,当对网站进行更改时,软件不应该感觉很慢。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

由于 PrestaShop 和 WooCommerce 都是开源软件,你获得的性能将在很大程度上取决于你的托管平台。如果你为一个有数百种产品和大量流量的商店使用共享主机,你不会在获得像样的业绩

有多种手动方法来优化 WooCommerce 和 PrestaShop 商店的性能。例如,由于 PrestaShop 和 WooCommerce 需要 PHP,更新您的 PHP 版本会显著影响您商店的性能。

使用 Kinsta,您可以从 MyKinsta 仪表板轻松更改 PHP 版本:

Switching PHP versions using MyKinsta

PHP versions in MyKinsta.

您选择的托管提供商和计划将显著影响您可以访问的性能配置。由于您无法配置真实的服务器设置,因此您通常无法通过预算共享计划来提高性能。

从可伸缩性的角度来看,PrestaShop 和 WooCommerce 都可以处理数百甚至数千种产品。然而,这种扩展只有在正确的主机主干和配置下才有可能。

安全性

如果你打算经营一家网上商店,你需要尽力保护你网站上存储的任何客户数据。考虑到 WooCommerce 和 PrestaShop 如此受欢迎,这两个软件选项都是攻击者的大目标也就不足为奇了。

看看过去几年公开披露的这两个平台的漏洞,PrestaShop 比 WooCommerce 发生了更多的安全事件。自 2017 年以来,已有 69 个已披露的 PrestaShop 漏洞,相比之下,WooCommerce 有 18 个。同样值得注意的是,这些漏洞大多排名不高。

安全性的另一个重要方面是更新频率。过时的软件更容易受到攻击,使您的商店面临潜在的攻击。

在这方面,PrestaShop 和 WooCommerce 都获得了近乎完美的分数。这两种软件选项通常每月(或在某些情况下几乎每月)发布更新和补丁程序:

A list of the latest PrestaShop releases

A list of PrestaShop releases.

谈到安全性,使用 PrestaShop 或 WooCommerce 应该不会有太大的不同,除非你不更新软件。理想情况下,我们建议你在新版本或补丁一出来就更新你的电子商务软件(最好使用升级网站)。

这个最佳实践同样适用于扩展、主题、模板和附加组件。如果您使用这些组件中的任何一个,并且不更新它们,随着时间的推移,它们会使您的商店更容易受到攻击。

展开性

在功能方面,PrestaShop 和 WooCommerce 可以独树一帜。在这两种情况下,基础软件使您能够创建一个功能齐全的在线商店,可以托管数百种产品。

然而,如果你想获得额外的功能,你总是可以求助于扩展和附加组件。WooCommerce 扩展也是 WordPress 插件。然而,它们更为人所知的是作为电子商务软件的扩展。

浏览WordPress.org 插件库和 WooCommerce 官方网站,你可以很容易地找到数百个扩展。官方的 WooCommerce 扩展目录有超过 700 个选项:

The WooCommerce extension catalog

WooCommerce extensions.

WooCommerce 扩展有免费和付费两种。高级选项的费用各不相同,一个年度许可证的平均费用在 70-130 美元左右。这意味着在此期间,您还可以获得支持和更新:

需要一个给你带来竞争优势的托管解决方案吗?Kinsta 为您提供了令人难以置信的速度、一流的安全性和自动伸缩功能。查看我们的计划

The WooCommerce Amazon Fulfillment extension

WooCommerce Amazon Affiliate extension.

需要注意的是,我们讨论的是特定于 WooCommerce 的扩展。如果你考虑到 WordPress 插件,有超过一千个选项。很多插件与电子商务无关,但它们同样可以帮助你为你的商店添加新功能。

PrestaShop 在附加组件和模块方面毫不逊色,有超过 4,000 个免费和优质的 PrestaShop 模块。你可以在官方附加数据库中找到它们:

The PrestaShop add-ons database

PrestaShop add-ons.

PrestaShop 模块的价格差异很大。通常,附加软件的年度许可起价约为 80 美元。不过,它们的价格可能高达 250 美元,这取决于你想要的功能。

WooCommerce 在扩展价格上有优势,尽管 PrestaShop 在选择数量上胜出。然而,一旦你考虑到 WordPress 插件,你会发现你有更多的选择来定制 WooCommerce。

举个例子,最流行的 WordPress 页面生成器也可以创建和定制 WooCommerce 产品和商店页面。你不会在官方的 WooCommerce 扩展目录中找到这些页面生成器。不过,它们可以帮助扩展电子商务平台的功能。

营销和搜索引擎优化

开箱即用,PrestaShop 为电子商务提供了比 WooCommerce 更多的选择搜索引擎优化(SEO) 。产品编辑器使您能够为每个产品添加自定义元标题和描述。您还可以配置产品重定向,这对于整合您的目录非常方便:

PrestaShop's SEO tab for products

PrestaShop SEO settings.

您可以使用 WordPress SEO 插件轻松地为 WooCommerce 添加类似的功能。最流行的搜索引擎优化插件都与 WooCommerce 兼容。

例如,Yoast SEO 可以让你设置元描述和标题。您还可以预览产品在社交媒体网站上的显示方式,并向您的页面添加模式标记:

Using Yoast SEO to optimize WooCommerce products

Yoast SEO.

说到营销,PrestaShop 和 WooCommerce 都能让你追求你想要的任何类型的推广。换句话说,你只能靠自己了。

PrestaShop 推出了几款附加软件,让你更容易在搜索引擎和社交媒体上为自己的产品做广告。例如,PrestaShop Marketing 是一个免费的附加软件,可以将您商店中的产品与 Google Merchant Center 链接起来:

PrestaShop Marketing

PrestaShop marketing.

类似的 WooCommerce 工具还有很多,比如Product Feed PRO for woo commerce。然而,WooCommerce 并没有推广很多具体的附加产品。相反,它让您找到您需要的扩展并决定使用哪一个。

值得注意的是,你不需要扩展和附加产品来推销你的商店产品。你可以依靠内容营销、付费广告、邮件营销,以及社交媒体来推广你的店铺。使用推荐的 PrestaShop 和 WooCommerce 扩展并不能保证任何销售——它只是让你更容易推销你的产品(在某些情况下)。

支持

因为 WooCommerce 和 PrestaShop 都是流行的开源平台,所以它们不缺少文档。您可以找到几乎任何您能想到的问题的在线故障排除指南。相同的文档可用于实现特性。

如果你是一个喜欢自己动手的人,这种设置可能是完美的。然而,如果您正在寻找专门的支持,这两个平台都提供了几个选项。

WooCommerce 主页可以让您与来自 Codeable 的合作伙伴机构和电子商务开发商联系:

WooCommerce support partners and options

WooCommerce support partners.

无论哪种情况,你都不会得到 WooCommerce 开发团队的支持。相比之下,PrestaShop 提供直接支持计划,但他们的起价为每月 280 美元,最多支持三个小时:

PrestaShop support plans

PrestaShop support plans.

简而言之,WooCommerce 和 PrestaShop 的大多数专用支持选项对于小型商店来说都过于昂贵。如果您需要获得直接支持,最好考虑 Shopify 等托管电子商务选项。

无论如何,如果你使用的是 WordPress 友好的网络主机,它应该能够提供大多数一般技术问题的支持(包括 WooCommerce 特有的问题)。但是,您的里程数将因您的主机提供商而异。

PrestaShop vs WooCommerce:概述

我们已经介绍了很多关于 PrestaShop vs WooCommerce 的信息。现在,让我们简要总结一下这两个电子商务系统的独特之处:

| | WooCommerce | 预铺 |
| 价格 | 免费(但需要付费托管) | 免费(但需要付费托管) |
| 流线型安装 | 是的,取决于你的网络主机 | 是的,取决于你的网络主机 |
| 所需的专业知识水平 | 初学者友好,具有高级功能 | 初学者友好,具有高级功能 |
| SEO 工具 | 访问 WordPress SEO 插件 | 基本产品搜索引擎优化选项和对附加模块的访问 |
| 支持 | 没有官方支持 | 官方支持需要额外付费 |
| 扩展性 | 数百个 WooCommerce 特定扩展和数千个 WordPress 插件 | 数千个模块 |
| 电子商务模块的平均价格 | $70-130 | $80-250 |

理论上,WooCommerce 和 PrestaShop 看起来几乎一样。谈到这些电子商务平台,最大的区别是 WordPress。

如果你使用 WooCommerce,你就是在选择 WordPress。WordPress 的灵活性使你可以建立几乎任何类型的网站,同时还可以使用 WooCommerce 访问电子商务功能。

使用 PrestaShop,您只能进行电子商务。这不一定是一件坏事,但这是一个值得指出的区别。

PrestaShop or WooCommerce — which one is right for you? 👀Click to Tweet

摘要

没有一个适合所有商店的电子商务平台。PrestaShop 和 WooCommerce 都是小型和大型商店的预算友好和高度可扩展的选择。

不幸的是,这两个平台都没有提供专门的支持。然而,对于开源软件来说,这是意料之中的事情。当谈到 PrestaShop vs WooCommerce 时,他们不仅仅是用简单的安装、大量的附加选项和用户友好性来弥补。

然而,WooCommerce 在扩展性方面胜出,因为 WordPress 提供了大量的插件和主题来定制你的商店。WooCommerce 用户也可以使用专门满足他们需求的网络主机。

例如,当你建立一个新网站时,每一个 Kinsta 计划都能让你自动安装 WordPress + WooCommerce。另外,如果你遇到任何问题,你可以从 WordPress 专家那里获得的专门帮助。

你对 PrestaShop vs WooCommerce 有什么疑问吗?请在下面的评论区告诉我们!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

最好的 WordPress 价格表插件比较

原文:https://kinsta.com/blog/pricing-table-wordpress/

你的网站上有价目表吗?这些价格可能是草坪护理等服务的价格,也可能是软件包的价格。从科技界到瑜伽馆,大多数公司都可以使用价格表来更好地展示他们提供的产品。主要的方法是通过查看最好的 WordPress 价格表插件,然后在你的网站上实现一个。

但这回避了一个问题,为什么定价表如此重要?

这个问题的答案似乎是显而易见的(你想提高转化率,对不对?)但是理解定价表背后的原因是很好的。为什么定价表插件比常规的项目列表、段落甚至图片更能有效地促进销售?

  • 价格表可以让你对你的服务或套餐有一个清晰的轮廓和比较。
  • 最重要的功能显示在价格表中,清除混乱,并留到另一页。
  • 价格表上有清晰的行动按钮,向人们展示如何继续购买。
  • 大多数定价表使用套餐/计划名称,使客户更容易理解。
  • 您可以通过使用更大的字体或图形来强调某些单词、计划或功能。
  • 阅读基于图形的价格表要比阅读只有文本的价格表有趣得多。
  • 你可以提高紧急转换(即。“时间快用完了”)或免费试用。
  • 价格表在网页上只占很少的空间,所以你可以添加额外的信息,比如为你的销售人员提供一个 FAQ 或者一个聊天框。

Having a sleek looking prices page can make your services pop and increase conversions. Check out these handy WordPress pricing table plugins. 🛒Click to Tweet

在 WordPress 价格表插件中寻找什么

现在我们知道了 WordPress 价格表插件的好处,让我们来看看你应该想要的一些特性:

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

  • 免费和高级选项–我最喜欢的定价表插件给你一个标准表,让你的定价看起来不错。之后,带有额外功能的高级版本应该不会超级贵。
  • 与顶级页面构建器的集成–一些页面构建器甚至自带定价表。一些比较流行的页面生成器包括 Divi Builder、Elementor 和 WPBakery。
  • 用于在几秒钟内启动定价表的皮肤或主题。我们也希望看到颜色、字体和图标的定制工具。
  • 用于显示某些计划上的标记的设置,例如“最佳价值”或“最受欢迎”的计划。
  • 多种货币选项全球通用。
  • 支持每个定价方案上的可定制大按钮
  • 一个拖放构建器也是很好的选择。
  • 我们也希望看到对 CSS 和 HTML 的访问,因为更高级的开发人员会想要复杂的调整机会。

我们可以在价格表上浏览几十个有意义的功能,但这是从基本要素开始的良好开端。

最好的 WordPress 价格表插件比较(以及如何编写自己的代码)

  1. WP Darko 的响应定价表
  2. 去定价
  3. 价格表 WordPress 插件-简易价格表
  4. sup systems 定价表
  5. CSS3 Responsive WordPress 价格比较表
  6. ARP rice-Responsive WordPress 定价表插件
  7. 定价表–价目表、价格表、简易定价表
  8. WRC 定价表
  9. 如何在 WordPress 中从头开始建立一个定价表

当谈到定价表插件和 WordPress 网站时,有很多可用的选项。一些最好的可以免费使用,而另一些是没有任何免费选项的高级。也就是说,下面的所有插件都值得在这个列表中占有一席之地,其中一些插件具有独特的功能,对于一些特定的行业或公司来说非常棒。

1.WP Darko 的响应定价表

响应式价格表是制作价格表的更加用户友好、功能丰富的插件之一。它提供了一个优秀的免费版本,对你包含多少计划或如何为你的网站制作表格没有限制。然而,你可以升级到高级版本来获得更好的功能,例如皮肤和一个“均衡器”,使所有的列高度完全相同。

Responsive Pricing Table WordPress Plugin

Responsive Pricing Table WordPress Plugin

您构建的价格表由简单的字段和后端按钮完成。例如,您可以使用的一些内置字段包括定价、描述、计划标题和图标框。一些自定义按钮允许链接到 Stripe 和 PayPal 等地方,而自定义 CSS 类肯定会帮助高级开发人员。

费用

有一个免费的计划。

你可以在一个网站上花 19 美元获得高级插件,或者花 49 美元获得无限制的网站

Darko 开发人员出售其他插件,所以你可以以 79 美元的价格获得所有插件。这可能对一些公司有用。

使响应式价格表成为最佳选择的特性

  • 免费计划为各种小型企业提供了必要的工具,因为您可以获得无限的表格和计划。
  • 溢价定价也相当低。
  • 皮肤看起来很现代,开箱即可高度定制,有大量的按钮和字体可以调整。
  • 图标和其他视觉效果是可访问的。
  • 您可以在定价计划中包含任意多的功能。
  • 行动号召按钮可以链接到 PayPal 等第三方支付系统。
  • 各种各样的货币符号可用于接触不同的国家。
  • 您可以展示推荐计划的徽章。
  • 定期计划(每月或每年)可以用特殊设置显示。

2.开始定价

Go Pricing 应用没有免费版本,但它在 CodeCanyon 市场上拥有数千份销售和一些好评。更不用说,只需 27 美元就能获得市场上最好的定价表插件之一。

Go Pricing - WordPress Responsive Pricing Tables

Go Pricing – WordPress Responsive Pricing Tables

是什么让 Go 定价插件如此特别?首先,它有令人难以置信的光滑的价格计划,现代的颜色和大量的留白,所以它看起来不杂乱。您还可以从大量的主题集合中进行选择,其中一些主题是专为某些行业设计的。我们还喜欢这个插件集成了几个页面生成器,并且有短代码来确保没有人必须是编码高手才能制作价格表。

费用

27 美元的一次性费用,可选择将支持延长至一年,费用为 8.25 美元。

使 Go 定价成为最佳选择的功能

  • 在可视化编辑器中,价格表的每个部分都被分解成各自的部分。这包括标题、正文和按钮区域。
  • 超过 250 个演示表会在你购买插件后给你。这应该能让大多数公司在几分钟内拿到一个模板并推出一个定价页面。
  • 页面生成器集成支持拖放元素。Go Pricing 与 Beaver Builder、Elementor 和 WPBakery 配合得很好。
  • 价格表的制作过程对所有经验水平的人来说都很容易。该插件有一个很棒的后端界面,有短代码、导入和设置选项。
  • 包括动画,使你的定价表更有吸引力。
  • 使用 2000 多种字体图标,让您的表格更加直观。
  • 为那些想超越基本特性的人提供了一个定制的 CSS 模块。
  • 添加独特的功能,如媒体元素、PayPal 按钮和谷歌地图。

3.价格表 WordPress 插件-简易价格表

如果你对干净的比较和没有花里胡哨的价格表感兴趣,那么价格表 WordPress 插件看起来是一个不错的选择。它有免费版和高级版,从一个网站每年 29 美元开始,到无限网站每年 99 美元。一些高级功能开始变得非常酷,包括 WooCommerce 插件和谷歌分析集成。

Pricing Tables WordPress Plugin – Easy Pricing Tables

Pricing Tables WordPress Plugin – Easy Pricing Tables

高级版本的其他一些集成包括简单的数字下载、Stripe 和一个价格切换插件。此外,您可以从 10 个预设设计开始设计过程。如前所述,这是一个更简单的定价表插件,所以我们喜欢那些不想要动画和图形等元素的人。

费用

核心插件是免费的。

高级插件一个站点每年 29 美元,五个站点每年 59 美元,无限站点每年 99 美元。

使简易价格表成为最佳选择的功能

  • 价格表的设计简洁明了,看起来很现代,没有任何不必要的效果。
  • 您可以调整价格表上几乎每个项目的颜色和其他元素。这包括栏、按钮和字体。
  • 所有的价格表都是由后端的一个简单的可视字段列表构成的。设置的格式就是价格表在前端的样子。
  • 您可以指定一个或多个计划优先于其他计划。
  • 您可以拖放列来重新排序它们。
  • 提供了一个自定义 CSS 模块,用于对您的价格表进行更高级的自定义。
  • 即使是免费版本也支持无限数量的定价表行。
  • 一些高级版本对 WooCommerce、Google Analytics 和 Stripe 进行了很好的集成。

4.按系统分类的价格表

众所周知,Supsystic 开发团队为照片库、弹出窗口、数据表等制作了各种插件。但是我们正在看一个价格表插件,它是一个免费的解决方案,有相当多的功能供你使用。事实上,该插件的免费版本具有预置模板、悬停动画和按钮定制的功能。您甚至可以轻松地导入和导出表格信息。

Pricing Table by Supsystic

Pricing Table by Supsystic

我们也喜欢高级插件的外观,看到它如何从一个网站 39 美元开始,你会收到一大包高级模板和角色限制。总的来说,我认为这是最好的价格表插件之一,可以使用核心的免费插件,跳过付费版本。然而,高级模板是非常酷的,他们不会花费你太多。

费用

提供免费计划。

在一个网站上以 39 美元的价格升级到高级版。五个站点的支持费用为 69 美元。或者 149 美元在无限的网站上。

使 Supsystic 价格表成为最佳选择的特性

  • Supsystic 的价格表插件是免费版本中最完整的价格表解决方案。你在高级插件中得到的唯一升级是一些更好的模板。
  • 所有的定价表看起来都很漂亮,有响应的元素和明亮的颜色。
  • 免费版的模板很棒,高级版的模板也很神奇。
  • 选择一个向人们展示特殊交易的开关——比如提前一年付款或今天购买。
  • 用视觉图标突出你的一些计划。
  • 使用短代码、颜色滑块和可视化构建等工具,确保在创建过程中不接触任何代码。
  • 该插件有悬停动画,使你的计划更吸引游客。
  • 还支持图像和视频,以便您可以展示您的业务的某些功能或部分。
  • 拖放构建器位于你的 WordPress 仪表盘的后端。

5.CSS3 Responsive WordPress 比较价格表

20 美元的价格, CSS3 响应式定价表插件是一个令人难以置信的价值。它只在 CodeCanyon 市场上出售,但你应该记住,没有免费版本可用。也就是说,大多数人不会介意花 20 美元买一个评级很高的审查定价插件。总的来说,插件有一些漂亮的模板供你开始使用。你可以改变周围的颜色和字体,同时也突出你提供的一些最好的计划。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

CSS3 Responsive WordPress Compare Pricing Tables

CSS3 Responsive WordPress Compare Pricing Tables

这个列表中的大多数价格表都是有响应的,但在我的手机和平板电脑上测试后,这个看起来特别好。开发人员似乎也乐于创造新的特性并以更新的形式发布。例如,在撰写本文时,我目前看到了三个主要的特性发布——滑动列、响应模式以及数据导入和导出。

费用

所有功能 20 美元。

您可以支付 5.63 美元将您的客户支持延长至一年。不提供免费插件。

使 CSS3 定价表格成为最佳选择的特性

  • 定价是我们在定价插件中看到的最好的功能。
  • 大量的定制工具允许数千个独特的定价表。这包括 20 个颜色版本、60 个色带、42 个十字图标和两种表格样式。
  • 创建无限数量的行和列。
  • 利用 CSS 和 HTML 模块进行额外的定制。
  • 您可以选择调整所有列和行的宽度和高度。
  • 多站点兼容性
  • 帮助您在网站上的任何地方实施价格表的短码。
  • 数据导入和导出工具,以便您可以将数据移动到另一个表或从电子表格导入。
  • 图标支持包括视觉效果,如复选标记和 x。
  • 动画和媒体支持,用于添加更多视觉效果,让您的计划脱颖而出。

6.ARPrice 响应式 WordPress 定价表插件

ARPrice 插件也在 CodeCanyon 网站上出售,但价格为 23 美元。我们开始注意到,许多公司和个人支付这些超低价格来获得他们需要的所有功能可能会更好——而不是使用缺乏一些功能的免费插件。不管怎样,这个价格表插件拥有这个列表中最好的视觉效果,因为它支持多种类型的媒体项目,比如背景图片和图标。

ARPrice - WordPress Pricing Table Plugin

ARPrice – WordPress Pricing Table Plugin

后端设计器是一个可视化的编辑器,它可以准确地显示出你的在线价格表。然后,您可以选择您的定价计划是基于年度、月度还是许多其他可用的时间选项。您可以通过选择一个模板来开始这个过程,然后您可以进入并导入数据,改变周围的效果,并选择您的字体。总的来说,ARPrice 插件提供了一个漂亮的用户界面,前端效果更好。

费用

23 美元的一次性费用,6.75 美元的费用可将您的支持延长至一年。

使 artprice 成为最佳选择的特性

  • 对于一个高级插件来说,这是相当实惠的。
  • 插件提供了 300 多个价格表模板供您下载。
  • 定制工具非常出色,有无限的颜色选项、完全响应的模板、切换定价按钮和超过 3000 个图标。
  • 动画效果一定会让你的定价表更有吸引力。
  • 有一个 CSS 模块和 CSS 指导系统用于高级定制。
  • 你会收到一些与谷歌地图等第三方程序的独特集成。
  • 实时模板编辑器提供了一个漂亮的可视化界面,用于调整列、标题和背景等项目。
  • 还有一个额外的“团队展示”功能,基本上采用相同的专栏格式,允许你在网站上分享你的员工的信息。
  • WordPress 价格表插件兼容最流行的页面生成器,如 Elementor、Gutenberg 和 WPBakery。

7.价格表–价格表、价格表、简易价格表

定价表-价格列表插件来自 WP Life 的人们。这是一个较新的、但备受推崇的解决方案。免费版有漂亮的定制选项,包括插件附带的一些模板。提供了动画,您可以插入图标和功能列表等项目。在列表上放置“立即购买”按钮,并为“热门”或“流行”商品添加标签。

Pricing Table – Price list, Price Table, Easy Pricing Table

Pricing Table – Price list, Price Table, Easy Pricing Table

这个插件的高级版本给了你所有相同的特性,以及额外的 19 个模板。只要 9.99 美元,所以如果你找到适合你的品牌的模板,就去用吧。

你的慢速网页对你的销售数字有负面影响吗?利用 Kinsta 的性能优化架构,销售更多产品!查看我们的托管计划

费用

免费版和 9.99 美元的高级版。

使价格表成为最佳选择的功能

  • 您将获得免费版本的所有优秀特性。升级的唯一原因是如果你想要一个不在免费插件中的模板。
  • 免费版中包含了一些好看的价格表模板。也可以多 20 左右升级。
  • 插件附带的所有表都被认为是完全响应的。
  • 图标允许您创建更具视觉吸引力的表格。
  • 短码有助于将您的表格放在网站的任何位置。
  • 只需点击一个按钮,就可以在您的网站上添加或删除价格表。
  • 定制选项包括无限制的颜色、按钮颜色、标题颜色等等。
  • 自定义 CSS 样式可以在仪表板中完成。
  • 设计区域并不是一个完全可视化的生成器,但是它设置了多个列来模拟以前的表格。

8.WRC 定价表

WRC 价格表插件是免费提供的,但是你可以选择花 10 美元升级。高级版更高级一点,有 500 多个额外的模板,一个 PayPal 集成,以及在月计划和年计划之间切换的定价切换。额外收费计划还附带了一些其他功能,因此价格如此之低,绝对值得考虑。

WRC Pricing Tables

WRC Pricing Tables

这个免费插件非常适合构建简单的价格表,你可以创建无限数量的行和列。所有的设计都是在拖放编辑器的帮助下完成的。我们最喜欢 WRC 定价表插件的一点是,你可以使用颜色选择器,它可以根据你的颜色生成一个随机的表格设计。

费用

免费。保险费 10 美元。

使 WRC 定价表成为最佳选择的特性

  • WRC 定价表插件在免费版本中有很好的特性,一个完整的高级解决方案只需 10 美元(一次性费用)。
  • 当你需要在你的 WordPress 网站上的任何地方放置你的价格表时,插件提供了简码。例如,从技术上来说,短代码可以出现在任何页面、帖子甚至潜在的小部件上。
  • 令人敬畏的字体图标给你的设计增加了一些视觉冲击力。
  • 该插件还支持谷歌字体。
  • PayPal 按钮集成确保您可以从客户那里收款。
  • 插件附带了相当多的模板。
  • 您可以添加无限数量的行和列,同时还可以复制定价表并保存它们以备后用。
  • 高级开发人员有机会使用自定义 CSS 来改进他们的表格。

哪个 WordPress 定价表插件最适合你?

上面列出的插件都已经准备好让你测试了。不过,我也可以提供一些额外的建议,让你觉得简单一点。

这个列表中的所有其他价格表插件也有它们的优点。然而,这些是我最喜欢的。

但是,如果您对使用插件不感兴趣,而是想编写自己的价格表,该怎么办呢?

下面是怎么做的!

如何在 WordPress 中从头开始建立一个定价表

从头开始构建一个价格表是用 HTML 代码完成的,它将为我们提供表的结构,然后用 CSS 对其进行样式化。

首先,登录你的 WordPress 网站,导航到仪表盘,点击 Pages → Add New。您还可以将代码添加到您希望显示价格表的现有页面中。

一旦 WordPress 编辑器加载,切换到文本模式并粘贴以下代码:

<div class="pricing-table">
<div class="one-third first">
<ul>
       <li class="header">Basic</li>
       <li class="grey-blue">$ 9.99 / year</li>
<li>List Item #1</li>
<li>List Item #2</li>
<li>List Item #3</li>
              <li>List Item #4</li>
              <li>List Item #5</li>
</ul>
<a class="pricing-button" href="#">Sign Me Up!</a>
</div>
<div class="middle one-third">
<ul> 
       <li class="header-blue">Pro</li>
       <li class="light-blue">$ 99.99 / year</li>
<li>List Item #1</li>
<li>List Item #2</li>
<li>List Item #3</li>
               <li>List Item #4</li>
               <li>List Item #5</li>
</ul>
<a class="pricing-button" href="#">Sign Me Up!</a> 
</div>
<div class="one-third">
<ul>
       <li class="header">Business</li>
       <li class="grey-blue">$ 199.99 / year</li>
<li>List Item #1</li>
<li>List Item #2</li>
<li>List Item #3</li>
               <li>List Item #4</li>
               <li>List Item #5</li>
</ul>
<a class="pricing-button" href="#">Sign Me Up!</a> 
</div>
</div> 

代码相当简单:首先,我们创建一个 div 来保存我们的价格表代码,并使用 CSS 样式化它们变得容易。然后,因为我们创建了三个表,所以每个表都包含在三分之一的列中。最后一部分是表格本身,添加了标题和价格点类,这将使它们在表格中脱颖而出。

在点击“发布”或“更新”之前,请确保将[pre]

  • and[/pre]标签之间的文本替换为您自己的文本,并将链接添加到您的付款表单中链接的 href 部分之后。

一旦您替换了所有信息,如果您创建了一个新页面,请单击 Publish,如果您将表格添加到了一个现有页面,请单击 Update。

如果你现在看你的页面,你会注意到价格表看起来非常简单。让我们给它添加一些样式。

如果你正在使用一个子主题,你应该添加下面的代码到你的子主题的样式表中,或者添加到定制的 CSS 编辑器中。

代码的第一部分将确保我们的定价表显示在列中,如果您想要或需要显示三个以上的表,这些类将允许您轻松地替换它们:

/* ## Column Classes
--------------------------------------------- */
.five-sixths,
.four-sixths,
.one-fourth,
.one-half,
.one-sixth,
.one-third,
.three-fourths,
.three-sixths,
.two-fourths,
.two-sixths,
.two-thirds {
float: left;
margin-left: 2.564102564102564%;
}
.one-half,
.three-sixths,
.two-fourths {
width: 48.717948717948715%;
}

.one-third,
.two-sixths {
width: 31.623931623931625%;
}
.four-sixths,
.two-thirds {
width: 65.81196581196582%;
}

.one-fourth {
width: 23.076923076923077%;
}
.three-fourths {
width: 74.35897435897436%;
}
.one-sixth {
width: 14.52991452991453%;
}
.five-sixths {
width: 82.90598290598291%;

}
.first {
clear: both;
margin-left: 0;
} 

代码的第二部分将给出表格的实际样式。

/* ## Pricing Table
 --------------------------------------------- */

.pricing-table {
 line-height: 1;
 }
 li.header {
 background-color: #2f79a9;
 color: #fff !important;
 font-size: 25px;
 border-bottom: 1px solid #2f79a9 !important;
 margin-bottom: 0 !important;
 }
 li.grey-blue {
 background-color: #569dcc;
 color: #fff !important;
 font-size: 20px;
 }

li.header-blue {
 background-color: #00b9eb;
 color: #fff !important;
 border-bottom: 1px solid #00b9eb !important;
 font-size: 25px;
 margin-bottom: 0 !important;
 }
 li.light-blue {
 background-color: #72dffd;
 color: #fff !important;
 font-size: 20px;
 }

.middle {
 box-shadow: 0 8px 12px 0 rgba(0,0,0,0.2)
 }
 .pricing-table .one-third {
 background-color: #fff;
 margin: 20px 5px;
 padding: 40px;
 width: 32.33%;
 }

.pricing-table .one-third:nth-child(3n+1),
 .pricing-table .one-third:nth-child(3n+2),
 .pricing-table .one-third:nth-child(3n) {
 border: 1px solid #ddd;
 }

.pricing-table .one-third ul {
 margin: 0;
 }

.pricing-table ul li {
 border-bottom: 1px solid #ddd;
 color: #333;
 margin-bottom: 10px;
 padding: 10px;
 text-align: center;
 list-style-type: none;
 }

.pricing-table a.pricing-button {
 background-color: #00b9eb;
 border: 3px solid #00b9eb;
 color: #fff;
 display: block;
 text-align: center;
 padding: 16px 24px;
 }

.pricing-table a.pricing-button:hover {
 background-color: #000;
 border: 3px solid #000;
 color: #fff;
 }

/* Pricing Table - Media Queries for Mobile Devices
 --------------------------------------------- */

@media only screen and (max-width: 1140px) {
 .pricing-table .one-third {
 width: 32%;
 }
 }

@media only screen and (max-width: 800px) {
 .pricing-table .one-third {
 width: 100%;
 }
 }

@media only screen and (max-width: 568px) {
 .pricing-table .one-third {
 width: 100%;
 }
 }

@media only screen and (max-width: 480px) {
 .pricing-table .one-third {
 width: 100%;
 }
 }

@media only screen and (max-width: 420px) {
 .pricing-table .one-third {
 width: 100%;
 margin: 20px 0;
 }
 } 

我们为定价表添加了一些简单、基本的样式,并对标题和价格进行了不同的样式设计,以使它们更加突出。我们还在中间的桌子周围添加了一个方框阴影,以突出显示特定的包。最后,我们添加了一些媒体查询,以确保这些表能够响应。

pricing table in wordpress with code

What your pricing table should look like when all is said and done.

一旦你粘贴了两个 CSS 片段,继续点击更新文件。现在看一下你的页面,确保所有内容都按照你想要的方式显示。

如果你对价格表有任何疑问,或者你对其他人有任何建议,请在评论中告诉我们!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

如何获得一个自定义域的专业电子邮件地址

原文:https://kinsta.com/blog/professional-email-address/

电子邮件仍然存在。尤其是在专业环境中,美国员工平均每周要花 28%的时间阅读、回复和发送电子邮件。

尽管有 Slack T1 或其他协作工具等替代的交流方式,90%接受调查的 15 岁以上的美国人仍然积极使用电子邮件。

底线是:电子邮件是工作场所的主要沟通渠道。

因此,如果你正在考虑创业,开自己的公司,或者自由职业者,拥有一个正确的专业邮箱是必不可少的。

在本文中,我们将解释为什么这很重要,提供一些例子,并带您了解如何获得一个带有自定义域的专业电子邮件。

我们开始吧!

更喜欢看视频版

为什么创建一个专业的电子邮件地址很重要?

你会定期给潜在客户和现有客户发邮件的几率非常高。这通常是在网上建立关系的第一步。

这使得你的电子邮件地址成为你品牌的重要组成部分,你应该尽可能地保护和改进它。

作为一名自由职业者或企业主,你无法承受像“【电子邮件保护】”这样的电子邮件地址给人的第一印象。

首先,很难一眼就判断出邮件来自谁。第二,即使是像“【邮件保护】”这样更严肃的邮件,你的邮件收件人也没有简单的方法来确认你的身份。

任何人都可以用任何名字创建 Gmail 或 Outlook 地址。除非你的电子邮件地址支持你,否则一个潜在的客户怎么能确认你就是你所说的那个人呢?

不愿意投资一个专业的电子邮件地址表明你对你的事业不是很认真。这就是为什么你想要一个像【电子邮件保护】【电子邮件保护】
这样的电子邮件地址

专业电子邮件地址创意

下面,我们将为您的商务电子邮件地址提供一个完整的示例列表。你应该选择的电子邮件地址的风格取决于你为你的企业注册的域名。

如果您使用公司名称作为域名和电子邮件地址,您应该将其与您的名、姓或首字母混合搭配。如果你需要额外的授权,你也可以在邮件地址中注明你在公司的职位。

一般来说,任何包含你真实姓名或首字母的东西都足够好了,没有必要把事情搞得太复杂。如果你曾经在一家大公司工作过,你很可能会有一封这样的邮件。

如果你注册的域名是你的全名或者姓,那就没必要加倍。你可以使用一个填充词,如联系人或邮件,或者你可以使用你的职位或姓名首字母来完成一个个人域名电子邮件地址。

你的商务邮件中最重要的变量是你选择的域名。如果你想被其他公司当作生意认真对待,你最起码能做的就是注册正确的域名。

当你的名字被盗用时,如何创建一个专业的电子邮件地址

我们介绍了许多模板和备选方案,您可以使用它们来创建电子邮件地址。但是大多数都依赖于你能够在上得到你的名字或者你的公司名称。com 或其他高度信任的域

如果你的全名和首字母,以及你的公司名称的所有变体都被采用,不要放弃希望。

最好的方法是将您的公司名称或名称与您的位置结合起来。

这不仅会让人们更容易在网上找到你,还会间接地帮助你的网站进行本地搜索的搜索引擎优化(SEO)和谷歌企业名录(Google Business listings)的搜索引擎优化(SEO)。即使在 2022 年,仍有如此多的企业被称为“你的城镇+水管工”和其他变体,这是有原因的。

如果你的公司不在一个地方,你也不会在你现在的城市呆很长时间,那么你必须有点创造力。

你可以先将首字母和你的名字混合搭配,或者将你的名字或首字母加到你公司的名字上,然后看看你觉得怎么样。

美国工人平均每周花 28%的时间在电子邮件上...这意味着使用自定义电子邮件地址对您的业务和品牌至关重要。💻在这里了解如何设置一个⬇️ 点击推文

什么是最好的专业电子邮件托管选项?

好了,你已经决定了一个自定义的电子邮件域。但是,存放和处理电子邮件的最佳选择是什么呢?

你有几个不同的选择,从使用你的主机提供商提供的选项到选择一个高级解决方案,比如 Google Workspace(以前的 G Suite) ,这就是我们在 Kinsta 使用的。

Google Workspace landing page

Google Workspace

我们的整个团队获得了值得信赖的品牌电子邮件地址,但他们也可以使用熟悉的 Gmail UX 进行业务交流。

这只是冰山一角。

为什么 Google Workspace 是专业品牌邮箱的最佳选择?

凭借同类最佳的垃圾邮件过滤器、智能搜索、直观整洁的收件箱体验以及广泛的附加集成,Gmail 是最好的电子邮件服务之一。

最棒的是,我们得到的不仅仅是电子邮件。我们所有的团队成员都获得了 30gb 的存储空间,并可以访问整个谷歌云应用套件中的高级功能。

您还可以使用 Google Hangouts Chat 作为 Slack 的替代方案,甚至可以使用 Google Apps 脚本扩展和创建自定义工作流。阅读我们关于Google Workspace优势的专题文章,了解更多深入信息。

如何用 Google Workspace 制作专业邮箱

创建和注册你的第一个专业邮箱地址可能会让人不知所措。但是当你一步一步分解的时候就变成了一个简单的过程。

首先,如果你还没有域名,你需要注册一个。你还需要有 DNS 支持的高级虚拟主机

如果你已经有了域名和网站,你可以直接跳到第三步。

1.注册你的域名

选择一个可靠的域名注册商,比如谷歌域名或 T2 域名。搜索可用的。com,。co ,或其他流行域名与您的全名或您的公司名称的组合。

远离不可信或廉价的域名,如。biz 和其他。当你选择了你的域名后,去结帐,你将会成为一个新域名的骄傲的拥有者。

2.创建您的 Google Workspace 商业帐户

首先,前往谷歌工作区,点击“开始”按钮。完成后,您将开始注册过程。

Google Workspace sign up window

填写所需的基本信息,包括员工数量、公司名称和国家。选择你公司注册的国家很重要。

不要因为希望语言是英语而选择美国。

单击“下一步”继续。

Google Workspace contact info

Google Workspace contact info

下一步是填写您的姓名和现有的电子邮件地址。完成后,单击“下一步”按钮。

Google Workspace domain

接下来,确认你是否已经有了自己的域名。如果没有,您可以在继续之前向 Google 域名注册机构注册一个。

Google Workspace enter domain

如果您已经有一个域,请填写该域,然后单击“下一步”继续。

Google Workspace signup domain

仔细检查域是否正确,然后单击“下一步”确认您的选择。

Google Workspace finalize signup domain

最后,创建用户名和密码,以完成您的 Google Workspace 帐户。检查验证码,然后按“同意并继续”按钮进入下一步。

注意:如果您已经有了专业电子邮件的电子邮件提供商,请确保您输入了正确的用户名。

Reviewing payment plan on Google Workspace

Reviewing payment plan on Google Workspace

Your Google Workspace Account Has Been Created

在继续之前,请确认您为 Google Workspace 选择了正确的支付计划。

如果您顺利地跟随我们到目前为止,那么您已经成功创建了您的 Google Workspace 帐户。

3.验证您的 Google Workspace 域

现在你已经创建了一个用户,进入谷歌管理控制台,用你的新凭证登录。

登录后,会有一个教程帮助你设置 Google Workspace。您将从验证您的 Google Workspace 域开始。

Verifying a domain in Google Workspace

Verifying a domain in Google Workspace

单击“验证”按钮打开您的域验证选项。

Choosing a verification method for Google Workspace

Choosing a verification method for Google Workspace

默认选项是将 TXT 记录添加到业务站点的 DNS 记录中。将 TXT 记录添加到您的 DNS 不会以任何方式影响您的网站或域名。

如果你使用的是 Kinsta DNS,一定要看看这篇关于如何在 MyKinsta 中添加你的 Google MX 记录的教程。

Setting up Google Workspace TXT record

Google Workspace TXT record

一旦你选择了 TXT 选项,Google 就会生成一个以 google-site-verify 开头的代码。单击“复制”按钮将代码复制到剪贴板。

现在你需要在一个新的标签或窗口中访问你的主机提供商的 DNS 工具。不要关闭谷歌工作区标签。

现有的 Kinsta 客户应该使用 Kinsta DNS 工具

Kinsta DNS

Kinsta DNS

单击页面顶部的“添加新的 DNS 记录”按钮。这将打开一个新的选项卡,您可以在其中添加记录。

从“类型”下拉菜单中选择“TXT”。

复制并粘贴验证码到,并按下“添加 DNS 记录”按钮。

Adding a TXT record

Adding a TXT record

完成后,返回到带有 Google Workspace 注册页面的标签页。

Verifying your Google Workspace domain

Verifying your domain

滚动到页面底部,然后单击“验证我的域”按钮完成验证。

注意:DNS 记录可能需要几分钟的时间才能生效,所以 Google 需要一段时间才能完成认证。

4.添加 Google Workspace 用户

如果您不是公司的唯一员工,这是添加其他用户的最佳时机。尤其是如果你已经使用不同的电子邮件服务来处理电子邮件。

Creating new Google Workspace users

Creating new Google Workspace users

单击“创建帐户”按钮继续。

Adding new Google Workspace users

Adding new Google Workspace users

填写名称和用户名,然后单击“添加新用户”按钮。

对所有员工重复上述步骤。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

如果您的公司已经有了个电子邮件地址,请确保每个用户名都与现有的完全匹配。

5.为您的 Google Workspace 帐户激活 Gmail

最后一步是为您的 Google Workspace 帐户激活 Gmail。

Activating gmail in Google Workspace account

Activating Gmail

单击“激活”按钮继续下一步。

Setting up Google Workspace MX Records

Google Workspace MX Records

在页面上,您将看到以下 MX 记录:

  • aspmx.l.google.com/优先级= 1
  • alt1.aspmx.l.google.com/优先级= 5
  • alt2.aspmx.l.google.com/优先级= 5
  • alt3.aspmx.l.google.com/优先级= 10
  • alt4.aspmx.l.google.com/优先级= 10

您需要打开一个新标签,并转到您的主机的 DNS 工具,或重新打开之前的 DNS 工具标签。

通常,您需要手动复制和粘贴,但不需要使用 Kinsta。由于我们是 Google Workspace 的忠实粉丝,我们创建了一个一键式解决方案来帮助我们的客户快速设置。

只需通过 MyKinsta 访问 Kinsta DNS,点击页面顶部的“添加 Gmail MX 记录”按钮

Easily add MX records through MyKinsta

Easily add MX records through MyKinsta

MX 记录和名称服务器一样,无论用户是谁,都是相同的,因此您不必做任何更改。按“添加 5 条记录”按钮继续。

Gmail MX records confirmation

Gmail MX records confirmation

由于这些更改可能需要一段时间才能生效,所以您可以在继续之前喝点茶或咖啡休息一下。

其他主机的替代方法

对于其他主机,您需要访问您的 DNS 工具,例如,通过登录到您的 cPanel 并打开 DNS 区域编辑器。

选择适当的域,然后单击“添加记录”按钮打开一个新窗口。

填写适当的优先级,然后复制并粘贴目的地。仔细检查所有内容是否正确,然后单击“添加记录”完成。对四个备选 MX 目的地重复该过程。

如果您的主机默认启用了电子邮件,您可能需要删除现有的 MX 记录。

完成后,您应该返回到 Google Workspace 注册选项卡,滚动到页面底部,然后按下“激活”按钮。

Activating Gmail in Google Workspace

Activating Gmail in Google Workspace

需要一点时间来验证。如果一开始,它没有检测到新的记录,给它几分钟,然后按下“重试激活”按钮。

一旦更改生效,Google 将找到 MX 记录并带您进入最终屏幕。

Finalizing Google Workspace business email

Google Workspace business email finalized

您现在已经通过 Google Workspace 设置好了您的专业电子邮件地址,可以通过 Gmail 登录来访问和发送电子邮件。

现在剩下的就是测试你新的专业邮箱地址是否正常工作。

7.测试您的电子邮件地址

由于 Google 确认您正确地输入了 MX 记录,这在技术上不是一个必要的步骤。

但这是让你的新品牌邮件在 Gmail 收件箱中转一圈的最快方式。

再开个邮箱,Gmail,Outlook,AOL,都没关系。撰写一封新邮件,并在“收件人”栏中输入您的新电子邮件地址。

写一个类似“第一封邮件”的随机主题,然后发送出去。

现在,前往 Gmail,使用您的 Google Workspace 凭据登录。

需要一个给你带来竞争优势的托管解决方案吗?Kinsta 为您提供了令人难以置信的速度、一流的安全性和自动伸缩功能。查看我们的计划

Google Workspace gmail test email

Testing your new Gmail address

如果你做的一切都正确,你应该会在收件箱里看到你从另一个账户发送的测试邮件。

你也可以试着反过来撰写和发送电子邮件,以确认你也可以顺利发送邮件。

如何在桌面/移动应用程序中接收发送到专业邮箱的电子邮件

在这一部分,我们将快速介绍如何使用新的专业电子邮件设置不同的应用程序。

在 Mail for Windows 10 中设置新的 Google Workspace 电子邮件

如果你更喜欢使用你的 Windows 10 邮件应用而不是你的浏览器,设置起来很轻松。

如果你还没有设置电子邮件帐户,你所要做的就是打开应用程序。它会自动提示您“添加帐户”

如果您已经有一个活动帐户,请注销,然后单击“添加新帐户”链接。

windows email app google

Windows Mail’s add Google account window

接下来,单击“Google”按钮,使用您的 Google Workspace 凭据登录。

Google 会提示你确认是否允许 windows 访问这些数据。

windows email app google authentication

Google integration prompt

只需滚动到底部并点击“允许”

完成后,你就可以在 Windows 10 邮件应用中阅读和发送电子邮件了。

windows email app google setup

Google Workspace email in Windows Mail

设置已经完成,您根本不需要做任何其他事情。

在 Mac 上设置新的 Google Workspace 电子邮件

如果您不想通过浏览器访问 Gmail web 应用程序,您可以轻松地将新的 Google Workspace 电子邮件地址添加到邮件应用程序中。

首先,打开您的邮件应用程序。然后单击顶部菜单中的“邮件”选项,展开主首选项。

选择“添加帐户”选项,选择“Google”,然后点按“继续”。

从那时起,您将开始简单的激活过程。

Adding Gmail to Mail app

Adding Gmail to Mail app

如果你愿意,你现在甚至可以选择要与帐户同步的应用程序,不仅是邮件,还有日历和笔记。

现在,您可以使用 Mail 应用程序从新地址发送和接收电子邮件。

如何在移动设备上使用您的专业电子邮件地址

由于你已经通过 Google Workspace 设置了你的电子邮件地址,在你的手机上访问它非常简单。

使用 Gmail 官方应用程序

如果你还没有使用 Gmail 应用程序,该应用程序在 iOSAndroid 上都可用,下载它并用你新创建的 Google Workspace 凭证登录。很简单。

如果您已经使用了另一个地址,则需要添加新的专业电子邮件地址。

为此,请打开手机上的 Gmail 应用程序。

在 Android 设备上,按汉堡图标展开菜单,滚动到底部,点击“设置”。

mobile gmail add account

Gmail App settings – add account

在这里,你需要做的就是点击“添加帐户”链接。

gmail app google login

Gmail App login

接下来,单击“Google”按钮打开 Google 帐户登录页面。

您可能需要输入智能手机的 pin 码才能继续。

看到“设置电子邮件”页面后,使用您的 Google Workspace 帐户登录。

就是这样。

如果你用的是 iPhone,步骤非常相似。点击 Gmail 应用程序右上角的缩略图

How to add professional email addresses to Gmail

Adding a new email address in Gmail (iOS)

这将打开一个新窗口,您需要选择“添加另一个帐户”选项:

Adding a new account in Gmail (iOS)

Adding a new email account in Gmail (iOS)

现在,您应该可以添加新创建的专业电子邮件地址,只需在此选择 Google 作为您的首选:

Adding Gmail address to iOS device

Adding Gmail address to iOS device

如果您不想使用 Gmail 应用程序,而是使用设备上的标准邮件应用程序,该怎么办?好吧,下面就告诉你怎么把你的专业邮箱地址加进去。

使用标准的 Android 电子邮件应用程序

要从 Android 手机上默认的“邮件”应用程序访问您的 Gmail 电子邮件地址,您需要做的第一件事就是进入帐户设置。

android add account

Android – add account

接下来,点击“添加帐户”选项,选择“邮件”或“电子邮件”应用程序(电子邮件是三星手机的默认设置)。

samsung email android

Samsung Email – add account

最后,选择 Gmail/Google Workspace,登录新的 Google Workspace 帐户。

Google Workspace email android

Samsung Email – Google Workspace

登录后,您将收到来自您的专业地址的电子邮件和通知。

在 iOS 设备上使用邮件应用程序

在 iPhones 上,你也可以遵循同样的过程。

Password and Accounts options in iOS

Password and Accounts options in iOS

打开 iOS 通用设置中的“密码与帐户”菜单。

Adding a new account (iOS)

Adding a new account (iOS)

点击“添加账户”选项,然后选择谷歌:

Adding a new Google account in iOS

Adding a new Google account in iOS

完成登录,并等待邮件应用程序验证您的登录。

最后,选择附加设置,如联系人和地址簿,并保存新帐户。

现在,您可以从 iOS 驱动的设备上访问您的 Google Workspace professional 电子邮件地址。

Want to instantly make your business look more professional? 💡Add a custom email address with this easy guide⚡️Click to Tweet

摘要

建立一个专业的电子邮件地址就像是为你未来的商务交流打下基础。您可以选择通过传统主机及其 cPanel 仪表板设置您的电子邮件地址。或者你可以选择托管选项,只需点击几下鼠标就可以整合你的 Google Workspace 账户。

简单地试着不要花太多时间纠结于电子邮件地址,只要确保它包括你的真实姓名或首字母,让你的业务开始。这才是重要的部分!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

8 个最佳阅读进度条插件(大多数是免费的)

原文:https://kinsta.com/blog/progress-bar-wordpress/

想给 WordPress 添加一个阅读进度条?

阅读进度条是改善网站用户体验的一个很好的方式,它通过一篇文章给读者一个可视化的进度指示器。

如果你想在你的网站上添加一个,有大量免费或便宜的插件可以帮助你添加一个进度条,并使它的设计与你网站的其他部分相匹配。

在本帖中,我们收集了 8 个首选,其中 6 个是完全免费的。

下面,我们将分享每个插件的细节,以及进度条如何工作的快速介绍,以及为什么它们对你的网站有益。

什么是阅读进度条?

阅读进度条就像它的名字一样——它让你网站的访问者看到他们通过你文章的内容已经前进了多远。

通常,你会在页面的顶部或底部贴一个水平条。当用户在文章中滚动时,滚动条会“填满”以显示他们离文章的结尾还有多远。

一些插件也给你在内容的左边或右边创建一个垂直进度条的选项。在这些情况下,它看起来几乎像一个滚动条。然而,关键的区别在于进度条将基于实际内容的长度,而浏览器滚动条基于页面的全长。

这里有两个网站使用阅读进度条的典型例子…

HubSpot 增加了一个橙色的进度条,出现在它的粘性标题的正下方:

A HubSpot reading progress bar

A reading progress bar example from HubSpot.

Thrive Themes 有一个绿色的阅读进度条,它也出现在粘滞标题的下方:

A reading progress bar example from Thrive Themes.

A reading progress bar example from Thrive Themes.

但是,您可以根据您的站点尝试不同的进度条位置。

A simple way to instantly improve your site's UX? 👀 Adding a reading progress bar! Get started here ⬇️Click to Tweet

为什么要给 WordPress 添加阅读进度条?

从高层次来说,阅读进度条是提高网站可用性和用户体验的一种方式,它对重要指标有更直接的影响,如页面停留时间和跳出率。

首先从总体上说一下用户体验。

大多数人在花时间阅读你的文章之前,都想知道他们将会进入什么样的领域。这是一篇他们可以在任务间隙阅读的 5 分钟的文章,还是一篇需要认真关注的 20 分钟的冗长文章?

当读者开始阅读时,进度条可以让他们很好地了解你的文章会带来什么。为了帮助解决这个问题,一些网站除了进度条之外还增加了估计阅读时间,下面的几个插件都支持。

一旦你的访问者开始阅读,进度条也可以鼓励他们完成文章。例如,如果读者看到他们已经完成了 80%的内容,他们会被鼓励完成最后的 20%,因为他们已经完成了文章的大部分。

用户体验的这些改进可以对两个关键指标产生积极影响:

  • 停留时间(Dwell time)–鼓励读者在开始阅读后就完成一篇文章,这样可以增加他们在页面上停留的时间。
  • 跳出率——通过增加访问者在你的页面上停留的时间,你将增加访问者继续关注你的网站的机会(也许通过阅读另一篇帖子),这可以帮助降低你的跳出率

如果你把进度条和其他提升用户体验的策略结合起来,比如 T2 的优质导航结构和 T4 的分页使用,你可以为访问者创造一个非常好的、吸引人的体验。

8 个最佳阅读进度条插件

现在,让我们进入 8 个最好的进度条插件来帮助你添加一个阅读进度条到你的网站。

虽然你可以找到通用的进度条插件,让你为任何事情创建一个自定义的进度条,但这篇文章特别关注那些根据页面内容的长度添加阅读进度指示器的插件。

在定价方面,其中 6 个插件是完全免费的,而剩下的 2 个插件是负担得起的,并增加了一些额外的灵活性,你不会在大多数免费选项中找到。

最棒的是,所有这些插件应该可以与几乎所有的 WordPress 主题兼容。

读取仪表

The Read Meter plugin.

Read Meter

Read Meter 是 Brainstorm Force 的一个阅读进度条插件,这是流行的 Astra WordPress 主题背后的同一个团队(这使得成为我们最快的 WordPress 主题列表)。

这个插件可以让你自动添加一个阅读进度条,贴在页面的顶部或底部。你也可以选择显示文章的预计阅读时间和进度条。

以下是您可以从 Read Meter 获得的所有信息:

  • 顶部或底部放置–在用户屏幕的顶部或底部显示进度条。
  • 帖子类型定位——您可以选择只添加某些帖子类型的阅读进度(包括自定义帖子类型)。例如,您可以将它显示在博客帖子上,但不能显示在页面上。
  • 阅读时间–自动将预计阅读时间添加到文章的各个部分(如标题下方),或使用短代码手动放置。
  • 可定制的颜色——你可以定制每个元素的颜色和风格,使其与你的网站相匹配。

价格:抄表 100%免费。

阅读进度条

The Reading progressbar plugin.

Reading progressbar

与 Read Meter 一起, Reading progressbar 是 WordPress.org 最受欢迎的进度条插件之一。然而,与 Read Meter 不同的是,这个插件没有给你添加估计阅读时间的选项——它只用于进度条。

然而,它确实给了你一些 Read Meter 所没有的额外的目标灵活性。例如,除了后期类型定位之外,您还可以将进度栏定位到特定的模板。

以下是你通过阅读 progressbar 可以获得的一切:

  • 灵活定位–你可以自动将进度条贴在页面的顶部或底部。或者,也有一个自定义的定位选项,让您坚持任何 CSS 元素。例如,如果你有一个粘性标题,你可以把它放在标题导航菜单的下面,而不是一直放在页面的顶部(就像上面的 HubSpot 例子)。
  • 可定制的设计–改变进度条的高度和颜色,以匹配您的网站。
  • 定位选项–您只能在的某些模板和/或帖子类型上显示您的进度条。

价格:阅读进度条 100%免费。

值得一读

The Worth the Read plugin.

Worth the Read

值得一读是最可定制的进度条 WordPress 插件之一,如果你发现以前的插件太局限,这是一个很好的选择。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

它包括一些其他插件没有提供的独特的位置和定位选项,以及一些其他独特的东西。如果愿意,它还可以让您选择添加一个估计的阅读时间。

以下是值得一读的所有内容:

  • 水平或垂直定位选项–包括屏幕顶部或底部的水平进度条或屏幕左侧或右侧的垂直进度条。垂直选项是独一无二的,因为大多数其他插件不支持它。
  • 文章类型定位–仅在某些文章类型上包含您的阅读进度条。
  • 设备定位–您可以选择关闭移动设备和平板电脑(或台式机)的进度条。
  • 评论进度–你可以选择在阅读进度中加入评论,如果你有活跃的评论区提供有用的信息,那就太好了。
  • RTL 支持-这是少数几个允许你切换到 RTL 的插件之一,这对于 RTL 语言的网站来说是个好消息。
  • 样式选项–自定义颜色、厚度、不透明度等。如果您启用了注释,您甚至可以使用单独的颜色来指示进度条上的注释部分何时开始。
  • 预计读取时间–如果您启用了读取时间,您可以自定义其功能,并使用短代码自动或手动设置。

价格:值得一读 100%免费。

捕捉滚动进度条

The Catch Scroll Progress Bar plugin settings area.

Catch Scroll Progress Bar

捕捉滚动进度条是另一个为你的网站添加一个基本进度条的轻量级选项。

它让事情变得非常简单,只有你需要放置和样式进度条的最少选项。

以下是您将从“捕捉滚动进度条”中获得的所有内容:

  • 顶部或底部位置–将进度条贴在页面的顶部或底部。
  • 文章类型定位–仅将您的进度条添加到某些文章类型。
  • 模板定位–在那些帖子类型中,只在某些模板上显示。例如,您可以将其添加到单个帖子中,但不能添加到存档页面中。
  • 颜色和样式选项–定制进度条的颜色、不透明度和高度。

价格:抓滚动进度条 100%免费。
T3】

WP 阅读进度

The WP Reading Progress plugin.

WP Reading Progress

WP 阅读进度是另一个免费的进度条插件,可在 WordPress 获得。

像之前的插件一样,它只给你定制阅读进度条所需的最小设置。但对大多数人来说,这就是你所需要的,这使它成为另一个可靠的选择。

以下是你在 WP 阅读进度中得到的一切:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

  • 灵活定位–自动将横条贴在页面的顶部或底部。或者,你可以手动将它粘到任何一个 CSS 选择器上。
  • 文章类型定位–仅在某些文章类型上包含进度条。在存档页面上还有一个启用/禁用选项。
  • 风格定制–可以定制进度条的颜色和粗细。然而你只能选择一种颜色,没有不透明度选项。

价格 : WP 阅读进度 100%免费。

阅读时间

The premium Reading Time plugin.

阅读时间是这个列表中第一个只有高级版本的阅读进度插件。

然而,它仍然很实惠,并通过 Envato 的 CodeCanyon marketplace 提供终身更新。

有两个主要原因让你考虑阅读时间而不是免费的替代品:

  • 8+预设样式–你可以得到一些独特的样式选项,比如在进度条中使用竖条代替纯色填充(如上图)。
  • 高级定位规则-除了定位帖子类型和模板,您还可以通过非常具体的规则定位您的进度条,例如用户角色、URL、设备等等。

您还可以获得您期望从插件中获得的所有“标准”特性:

  • 灵活定位–除了自动顶部或底部放置,你还可以使用自定义定位将你的进度条粘贴到任何 CSS 选择器上。
  • 样式选项–除了 8 种以上的预设样式,您还可以使用通用选项来定制进度条的颜色和高度。

价格:阅读时间花费 15 美元,附带单个网站的终身更新和 6 个月的支持。

读数位置指示器

The Reading Position Indicator plugin.

Reading Position Indicator

阅读位置指示器是 WordPress.org 的另一个轻量级免费进度条插件。

它没有给你太多的设置,但一个独特的选项是,它可以让你为你的阅读进度条使用自定义渐变(除了纯色)。

以下是阅读位置指示器带给您的一切:

  • 顶部或底部位置–没有 CSS 选择器目标,但您可以添加偏移量。
  • 文章类型定位–将你的进度条定位到特定的文章类型。
  • 风格定制选项–从纯色或渐变色风格中选择。您也可以调整进度条的粗细。

价格:读数位置指示器 100%免费。

钢筋

The premium ReBar plugin.

ReBar

ReBar 是另一个高级阅读进度条插件,通过 Envato 的 CodeCanyon 市场出售。

与阅读时间一样,这里有一些它提供的独特功能,可能值得花这笔钱:

  • 8+预设样式–您可以获得许多超越纯色填充的独特样式,如塑料、渐变、iOS 风格等。
  • 高级定位规则–除了定位帖子类型,您还可以通过非常具体的规则定位您的进度条,例如用户角色、URL、设备等等。
  • 无限滚动支持–ReBar 仍然支持无限滚动布局,这使得它成为这些网站的一个很好的选择。你可以定义基于 CSS 选择器的滚动区域,它会为无限滚动中的每篇文章生成一个独特的进度条。

以下是其他一些值得注意的特征:

  • 水平和垂直样式–在页面的顶部或底部放置一个水平进度条,或者在页面的左侧或右侧放置一个垂直进度条。
  • 可定制的样式–除了 8 种以上的预设样式,您还可以定制进度条的颜色和高度/宽度。
  • RTL 支持–您可以反转 RTL 语言的进度条。

价格 : ReBar 售价 15 美元,附带单个站点的终身更新和 6 个月的支持。

看看这些免费且易于使用的阅读进度条插件——其中 6 个是完全免费的!😄 点击推文

摘要

这就是我们收集的 8 个最佳阅读进度条插件。

对于添加基本进度条的最简单的选项,您可以考虑插件,如 Read Meter 或 Reading progressbar。

另一方面,如果你想免费获得最大的可定制性,你可能想从值得一读开始,因为它包含了许多其他插件没有的独特选项和特性。

如果你想超越进度条的纯色填充,你也可以考虑 CodeCanyon 的高级选项——阅读时间或 ReBar。同样,这些插件最独特的细节是它们都有 8 种以上的预设样式和更高级的目标选项。

每个插件都有自己独特的风格和特性,所以值得一探究竟,找到适合你网站的选项。

他们中的大多数在 WordPress.org 都有免费版本,这使得测试变得很容易。如果你用 Kinsta 托管你的站点,你可以轻松地创建一个临时站点来安全地测试每个插件在你的站点上会是什么样子。

为了找到其他可以改进你网站的插件,你也可以浏览我们的最佳 WordPress 插件列表。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

博客作者的 19 个校对技巧(写出更好的内容)

原文:https://kinsta.com/blog/proofreading-tips/

校对常常没有得到应有的重视。很容易把它留到最后一分钟,然后被迫快速完成。

但是校对是重要的,应该被看作是写作过程中的一个关键步骤,需要大量的时间。⌛:没有什么比写了一篇非常有趣的博客文章,却发现自己错过了一些错误更糟糕的了。

校对不一定很难,只需要时间和几个好的策略。这里有一些校对你的博客的好方法。

Proofreading helps you look professional and avoid the grammar police! 🚓 Check out these tips.Click to Tweet

1.早上校对

好吧,不是每个人都是早起的人。不管你的日程安排如何,都要在一天的早些时候做好校对工作。在工作日开始时做校对意味着你会更加警觉和清醒。如果你累了就不要校对,你很可能会错过一些东西或者犯一个错误。很多人发现自己在下午昏昏欲睡,因为他们的咖啡因开始消退。

Tired

Tired (Image source: SayingImages.com)

底线:每当你最清醒的时候,就是校对的时候
T3】

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

2.休息一下,然后再回来

正如学院的校对马德琳·琼斯写道:

一旦你写完了,觉得你已经准备好开始编辑了,离开一会儿是个好主意。现在你的大脑太习惯于你所写的东西了,以至于不能进行适当的编辑工作。

你很可能会漏掉一些错误,因为你已经看了这篇文章一段时间了。几个小时后,甚至几天后,如果你有足够的时间,带着新鲜的眼光回来。用新鲜的眼光编辑可以让你带着一种超然的感觉去看文字,阅读那里的东西,而不是你想写的东西。

这一点在那些超长 10000+字的内容片上尤为重要!😉

3.特别注意标点符号

糟糕的标点符号看起来很糟糕。注意放错位置的撇号和句号。分号似乎也是很多人纠结的一件事。记住分号是用来连接单句中两个密切相关的独立分句的。

这里有一个例子:

明天我有一篇很大的博文要发表;今晚不能玩 Xbox 了。

上面的两个分句由分号分隔,但是如果您在它们之间加一个句点,它们可以作为自己的句子:

明天我有一篇很大的博文要交。今晚不能玩 Xbox 了。

如果你觉得它们令人困惑,最好避开它们。你可以不用分号就写出一篇完美的博文。

另一个博主们有时会纠结的问题是标题或页眉中哪些词要大写。有四种主要的标题大写风格:芝加哥风格,APA 风格,MLA 风格和 AP 风格。没有正确或错误的选择,但选择一个并坚持下去,这样你的写作感觉都一样。你可以随时在免费的在线工具上检查你的工作,比如大写我的标题。当你写作的时候,在你的浏览器中把它加入书签。

Capitalize titles

Capitalize titles

在一篇文章中,正确使用标点符号非常重要。
T3】

4.用手指或鼠标跟随

有效校对最重要的一点是慢慢读。很多人都在为此挣扎,但是有办法让事情慢下来。一种方法是在阅读时用食指指着每个单词。一些作者使用的另一个流行习惯是在他们前进的时候用鼠标突出显示单词。通过这样做,你将能够专注于每个单词。

当你校对时,自然的冲动是浏览你的文档。你觉得自己快完成了,只需要在提交之前快速浏览一遍。慢下来,你以后会感谢你自己的。👏

5.排除杂念,保持专注

澳大利亚帮助网站的编辑约兰达·费特建议如下:

在一个没有干扰的安静的地方做校对。关掉手机,远离社交媒体,关掉电视。将自己置身于一个不太可能被打扰的环境中。

有时,这甚至意味着完全断开互联网连接,打印文档,关闭笔记本电脑,用笔编辑。这也是一个好主意,有一个明确定义的编辑时间,而不是不停地编辑。如果你边走边编辑,你会不断地在写作和编辑之间来回切换模式。像这样切换模式可能会分散注意力,导致错过一些东西。

当你校对的时候,也很容易走神,不能完全集中注意力。如果你发现你在编辑的时候走神了,那么你需要想办法让自己重新集中注意力。如果你只是部分地集中注意力,你就不能很好地校对。校对是你需要敏锐的时候,因为它很容易错过一个错误。监控你自己,如果你发现自己偏离了,回头重新检查你校对的部分是很重要的。

当你读每个单词的时候,试着用脚或手敲击来保持注意力集中。有时候你只需要起来伸展一下,呼吸一下新鲜空气,几分钟后再回来。你常常很想一直坚持到完成,但是如果你在疲惫或分心的时候校对,你的文章质量会受到影响。

有时候在写作的时候做笔记会有所帮助,这样你就能保持写作状态,不会分心,失去思路。稍后再回来,看一下笔记,然后进行修改,会容易得多。

Take advantage of comments in @googledocs for when you give your blog post its final proofread. ✏️Click to Tweet

6.确保你有使用这些材料的许可

你的博客可以真正受益于包含来自其他人的材料,他们的知识和观点是你尊重的。在使用它来增强你的博客文章之前,确保它是没问题的。应该不用说,但是抄袭是不行的。如果你要使用其他人的材料,你需要注明他们是原作者,或者在你不确定的时候征得他们的同意。
T3】

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

7.找出你的弱点是什么

找出你最常犯的错误。即使是有经验的作家也会告诉你,他们有自己倾向的特定错误。也许你在混淆“二”、“太”和“到”时有问题,或者你有不正确放置撇号的坏习惯。无论你的弱点是什么,最重要的是你要找出它们,这样你就可以在校对时特别注意留意它们。

开始列出你常犯的错误,并在校对时随身携带,作为提醒。将这份清单放在手边也可以省去你在网上查找的麻烦。Google Keep 和 Evernote 非常适合这类列表。

8.让别人阅读你的作品

如果可以的话,让一个朋友、同事或家人阅读你的帖子。没有什么比一双真正新鲜的眼睛来审视你的作品更好的了。不熟悉主题材料的人更有可能找出不一致的地方或需要更多解释的地方。因为你非常熟悉你的文章和它的主题,你的大脑可以很容易地填补你的文章缺乏解释的地方。找一个不熟悉的人,他们会给你反馈,让你的文章更容易被普通读者理解。

9.大声读出来

Cornelia Jefferson, PaperFellows 的作者建议:

大声朗读你的文章,而不是默读。大声读出来会帮助你识别出那些不流畅的句子,或者那些读起来很别扭的句子。这也是确定你哪些句子太长的好方法。

通过在头脑中默读来编辑,发现这些缺陷的可能性要小得多。大声朗读的时候就明显多了,是不是哪里出了问题。通过大声朗读,你把自己放在读者的位置上,这有助于写作更容易理解和令人愉快。

10.改变字体

这听起来很简单,但有时一个简单的改变就足够了。在编辑文章之前,尝试更改字体或打印文章。你的眼睛已经非常习惯你输入的字体了。你已经盯着那个字体看了几个小时了,所以改变一下,让你看起来更新鲜。你也可以试着改变页边距。重要的是文字看起来不一样,这样你就可以把它当成你以前没见过的东西来接近。无意中浏览你的文章是很容易的,因为你已经看了很多遍了。

如果你有一个 WordPress 站点,有时候跳出编辑器使用不同的工具会很好。🤓对于那些在 MacOS 上的人来说,小熊应用程序很棒,字体很漂亮(一定要阅读我们关于 WordPress 字体的深度指南)!它也可以导出到 markdown,HTML 等。为了方便转移到 WordPress。或者你可以尝试潜入古腾堡。

Bear writer app

Bear writer app (Image source: Bear)

11.仔细检查你的介词

介词是像 under、on、with 和 after 这样的词。他们被用来描述某事的位置,某事发生的时间,和某事被做的方式。介词可能很难,尤其是如果英语不是你的第一语言,因为它们不一定符合逻辑。这对夫妇是星期天到达的,还是星期天到达的?如果你有困难,像 Google Ngram Viewer 这样的工具可以在图表上显示哪种方式是最常用的。如果你不确定一个单词的意思和如何使用它,你也应该查字典。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

12.分阶段校对

避免遗漏错误的一个好方法是分阶段校对,而不是试图一次看完所有内容。校对一次拼写错误,然后再校对一次行文,再校对一次标点符号,再校对一次语法,等等。一次专注于一种类型的错误会给你更高的准确率。创建一个系统,这样你就不会错过任何东西。只要确保你给自己足够的时间,因为这种方法显然会更费时。

不要 100%依赖拼写检查,因为他们并不完美;你会想把拼写作为你的一个阶段。拼写检查器无法读懂你的想法,也不知道你试图拼写的是“痛苦”,而不是“感情”尽管像 Grammarly 这样的工具可以帮助你找出常见的错误。尤其是当你在最不清醒的时候校对的时候。但是记住,你不应该这样做。😉

Grammarly example

Grammarly example

另一个你应该看看的伟大的小工具是海明威编辑器。它突出了冗长、复杂的句子和常见的错误。

Hemingway Editor

Hemingway Editor

13.注意你的宫缩

是他们的还是他们的?大多数作者都知道这两者的区别,但是当你一天内打出几千个单词时,错误就会发生,拼写检查不会标记出来。留意你的宫缩和其他宫缩。错过它们真的会让你的作品显得业余。语法警察会找到你的!🚓

Grammar police

Grammar police (Image source: Rysis on DeviantArt)

14.试着倒着读

校对的一个好方法是简单地向后阅读你的文章。当你向后读时,没有流动,所以你专注于每个单词。你将能够专注于每个单词的正确拼写,而不是被句子的内容分散注意力。这种方法确实需要相当多的时间,所以这是优先提前完成写作的又一个原因,这样你就有足够的时间校对。

15.在线资源可以帮助你校对

校对是很少有人喜欢做的事情,但是对于任何作家来说都是一项重要的技能。校对困难是很常见的,但是有很多资源可以用来提高你的技能。

  • 写作状态我的写作方式
    • 试试这些写作指南,让你的写作过程更有条理,更易管理。写作涉及到很多步骤,按照自己的方式完成这些步骤是创作一篇令你自豪的作品的关键。这些指南将使你的写作过程更加简单和容易。
  • 萨罗大任务
    • 校对通常是事后才想到的,是在最后一刻匆忙完成的事情。但是它和写作过程中的任何一步一样重要。这些是由评审推荐的编辑工具。你会惊讶于自己编辑和在一些专家的帮助下编辑之间的差别。
  • ViaWritingstudemic
    • 语法是许多优秀作家都存在的问题。有很多规则要记住,很容易出错。这些语法资源可以帮助你检查你的写作,确保一切看起来专业。
  • BoomessaysUKWritings
    • 简单 Grad in Boomessays review 已经认可了这些在线校对资源。不要冒险在你的博文中留下一两个错别字,这些工具可以保证你的写作完美无瑕。即使你写了一篇令人惊叹和有启发性的文章,如果有错误,对读者的影响也不会一样。使用这些工具来确保你的帖子既有趣又有价值,在技术上令人印象深刻。
  • 写人口表让学生学习
    • 最好的学习方法之一是看看其他作家在做什么。这些校对博客上充满了校对作者的信息和经验。从他们的错误中吸取教训,并利用这些教训来改进你的校对过程。

16.标题、题目和列表

很多人忘记检查和校对他们的标题、题目和清单。确保你校对一切。对于一些人来说,这有助于使这些成为校对阶段之一,以确保他们不会被遗忘。标题和题目很容易忘记,但是如果有错误,阅读的人会完全看得出来。不要忘记仔细检查帖子中的任何列表,确保号码顺序正确,没有遗漏号码。

17.那些最后一分钟的变化

有时候,当你在校对阶段,你意识到你需要添加一两个句子来表达清楚。当这样做的时候,重要的是你要回去重读一遍段落,以确保所有的内容都合适。对于作者来说,添加信息,然后忘记回去调整段落中的其他相关单词是很常见的。确保你在校对阶段编辑了那些额外的句子。

18.仔细检查你的事实、姓名和地点

重要的是你要掌握正确的事实。像拼写检查这样的工具在这里帮不了你。你需要做一些事实核查。确保你在帖子中提到的任何地点或人物都使用了正确的名称。如果你引用统计数据,确保你已经得到了他们的权利,并包括适当的引用。

如果你忘记了这一点,你的帖子会被完全破坏,给你的读者留下你甚至不知道澳大利亚的首都是哪里的印象(提示:它不是悉尼😉)一个快速的事实核查步骤不需要花太多时间,就你的可信度而言,它会带来很大的不同。只要确保你有一些可以依赖的高质量来源。

19.不要忘记你的格式

在最后格式化,但是要确保你没有忘记。仔细检查并确定段落间距、项目符号、列表、文本换行、缩进等格式都正确。您可能希望将这一步留到最后,因为在校对过程中事情可能会发生变化。保持格式一致。如果你把标题加粗了一次,那就在你的文章中一直这样做。挑一个自己喜欢的风格,坚持下去。

摘要

校对不一定很难。如果你给自己充足的时间并使用一些策略,你的博客文章将会很专业。找出你的弱点,并专注于这些方面。写完之后,在开始校对之前休息一下。注意缩写、格式和介词。

学习如何放慢速度,一个一个地读每个单词。如果这意味着用你的食指指着,或者全部倒着读,那也没关系。不要让糟糕的校对过程破坏了一篇好的博文。养成在提交前留出充足时间润色你的博客文章的习惯。找出适合你的方法,并准备好在你的校对过程中投入一些时间。

当你写博客的时候,有没有其他的校对技巧或窍门?请在下面的评论中告诉我们它们是什么。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

如何保护网站上的图像(失窃后怎么办)

原文:https://kinsta.com/blog/protect-images/

不幸的是,随着互联网的发展,图像盗窃变得越来越普遍。作为一名内容创作者,我们不得不在 Kinsta 处理这个反复出现的问题。最糟糕的事情莫过于看到你所有的努力成果被简单地复制到另一个网站,不管是有意还是无意。这对创作者来说一点也不公平,但我们也看到过它在谷歌图片搜索中引起问题的例子(这甚至是一个更大的问题)。这对某些行业尤其不利,比如摄影师,因为有时图像是他们的主要收入来源。今天,我们将深入探讨一些保护图片的方法,如何找到被盗的图片,以及在未经许可的情况下如何处理。

为什么图像盗窃不好?

首先,让我们来看看为什么图像盗窃是不好的。除了事实上你在抢劫创造者,在很多情况下,这也是违法的。就拿金斯塔来说吧。我们实际上为我们在博客上的很多特色图片中使用的图标付费。我们是 Iconfinder 的忠实粉丝,它帮助我们加快了图形的创作速度。如果有人复制并使用我们的特色图片,他们实际上违反了 Iconfinder 许可协议,该协议规定:

标准许可授予您,购买者使用许可材料的非排他性、不可转让的权利……(来源

既然我们付了图标的钱,只有我们有权使用它。许多图片网站也是如此。它们都采用相同的许可模式。这就是为什么你永远不应该从谷歌图片搜索得到你的图片。许多付费购买的图片在谷歌图片搜索中被编入索引。如果你复制一个并使用它,你就违反了法律。这会给你带来很大的麻烦。Getty Images 是一个股票图片网站,众所周知,会威胁用户,如果他们发现你未经许可使用照片,就起诉他们。

在网上有很多地方,你可以找到用于你的网站和项目的免版税图片。所以,用正确的方式去做,避免让自己陷入困境的所有压力。
T3】

如何找到被盗图像

在我们进入如何保护图像之前,让我们讨论几种不同的方法,你可以找到被盗的图像。重要的是要记住不是所有的盗窃都是故意的。尽管对某些人来说这似乎是常识,但我们已经看到了很多博主或内容创作者可能不知道他们做错了什么的例子。此外,大多数网站雇佣第三方作者,并在他们准备好的时候简单地批准/发布帖子。很多时候,出版商并不检查图片,而是依靠作者来获取。

1.偶然发现的

找到被盗图像的第一个方法就是偶然发现它。这听起来可能很奇怪,但实际上,这种事在我们金斯塔经常发生。有时是在谷歌图片搜索、时事通讯、推特上,或者我们只是在做研究时偶然发现一篇文章。你发布的内容和图片越多,这种情况发生的几率就越大。我们不会指名道姓,但我们已经在网上许多高权威网站上看到了我们的特色图片和截图。我们将在下面与您分享我们对此所做的更多工作。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

2.反向图像搜索

找到抄袭你的图片的人的一个简单方法是利用一个工具进行 反向图片搜索TinEye 有一个很棒的工具,可以让你通过图片进行搜索,并找到该图片出现在网上的位置。

Reverse image search

Reverse image search

我们通过输入一张来自我们更受欢迎的博客帖子的图片,对他们的工具进行了快速测试。在我们的第一次搜索中,我们发现一个第三方网站(将保持匿名)一直在复制我们所有的文章,包括我们所有的图片!很快也很容易。当然,它不会总是找到所有的东西,但它可以是一个很好的起点。注意:TinEye 只打算免费供个人使用,而非商业用途。

Finding copied image

Finding copied image

你也可以做一个谷歌图片搜索并输入文件名。有时,如果网站复制了图片,他们不会费心去重命名它,这样你就可以很容易地找到它。正如你在下面的例子中看到的,它使用我们的 SEO 清单特色图片返回了一个第三方网站。然而,在这种情况下,它是可以的,因为它是一个链接到我们文章的社交分享网站。

Google image search by filename

Google image search by filename

您也可以通过点击小相机图标上传图像。然后,它会进行搜索,试图找到类似的图像。

Search by image

按图像搜索

3.利用反向链接监控工具

我们发现复制或窃取图像的第一个方法是利用反向链接监控工具。我们喜欢 Kinsta 的 Ahrefs ,这是一个 SEO 工具(点击这里查看更多:【WordPress 的最佳 SEO 插件和必备 SEO 工具),你可以用它来做关键词研究,进行竞争对手分析,监控反向链接等等。它拥有网络上最大的数据库之一,我们在很多事情上都依赖于它的数据。

网站通常会在图片上留下链接或者直接链接到图片。这就是所谓的热链接,我们将在下面详细讨论。但是正如你在下面的例子中看到的,我们发现了一个垃圾邮件域,它正在编译各种 PDF 文件,然后将我们的图像复制到其中。这很可能是由刮擦工具完成的。

Ahrefs backlinks to copied images

Ahrefs backlinks to copied images

这有时会对你的搜索引擎优化造成负面影响。阅读更多关于负面搜索引擎优化以及如何拒绝这些类型的链接。这就是我们在上面的案例中所做的。

如何保护图像

现在是时候探索如何保护你的 WordPress 网站上的图片了。实施这些建议中的部分或全部有助于防止盗窃和复制。

启用热链接保护

我们建议的第一件事是启用热链接保护。热链接的概念非常简单。你在网上某处找到一张图片,然后直接在你的网站上使用该图片的 URL。此图像将显示在您的网站上,但将从原始位置提供。这对于热链接者来说非常方便,但这实际上是盗窃,因为它使用了热链接网站的资源。这就像如果我们开着自己的车,带着从邻居车里偷出来的汽油离开。

Hotlinking is like driving away with gas you siphoned off from your neighbor's car. 🚗Click to Tweet

热链接是不好的,原因如下:

  • 热链接花费了原网站所有者的钱
  • 在大多数情况下,热链接是非法的
  • 热链接会耗尽原网站所有者的服务器资源
  • 热链接只是简单的懒惰

查看我们关于如何启用热链接保护的深度帖子。

禁用右键单击图像

你可以使用的另一个策略是禁止右击你的图片。很多用户只需右击他们喜欢的图片,保存到桌面,然后上传到他们的 WordPress 网站。有一个很棒的免费小插件叫做防止内容盗窃将有助于阻止这种情况。它目前有 4,000 多个活跃安装,五星评级为 4.5 分。你可以从 WordPress 知识库下载它,或者在你的 WordPress 仪表盘的“添加新插件”下搜索它。没有设置,只需安装,你就可以走了。

Prevent Content Theft WordPress plugin

Prevent Content Theft WordPress plugin

这个插件不仅禁止右击你的图片,也禁止点击整个页面,因此也保护了你的内容。这决不会停止一切,尤其是对那些稍微懂点技术的人来说。但是我们发现大多数复制图片的用户是那些不知道更多的人。我们在我们的开发网站上安装并测试了这个,你可以在下面看到一个例子,当用户试图右键点击一个图像时会发生什么。他们会看到一个通知框,让他们知道这个功能被禁用了。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Disable right-click in WordPress

Disable right-click in WordPress

或者你也可以在新的免费包膜图像插件中使用这种方法。它没有对提示做任何事情,只是在你的网站上的所有图片上添加了一个微小的、不可见的图片。如果访问者右击你的一张图片,他们会下载清晰的小图片,而不是你的原始图片。

Shrinkwrap images example (Meme source: Meme Generator)

包膜图片示例(Img 来源:模因生成器 )

水印图像

你可以采取的另一种方法是给你的图片加水印。这对摄影师来说尤其重要。通过在你的图片上添加你的标志或标记,这可以阻止人们想要复制它们。如果他们这样做了,对你来说就是免费的宣传!当人们在社交媒体上分享你的图片时,水印技术也很有用。

免费的图像水印插件允许你自动给上传到 WordPress 媒体库的图像加水印,也可以批量给之前上传的图像加水印。它目前有 30,000 多个活跃安装,获得了 4 个五星评级。你可以从 WordPress 知识库下载它,或者在你的 WordPress 仪表盘的“添加新插件”下搜索它。

Image Watermark WordPress plugin

Image Watermark WordPress plugin

安装后,你可以在插件的设置中启用水印(见下面的设置示例)。您可以选择您希望水印出现的位置,上传您的水印图像,设置比例,设置透明度,甚至备份原始图像。这个插件也有基本的图像保护来禁止右键点击。如果你既想禁用右击又想实现水印,这个插件会是一个很好的组合。

Watermark settings

Watermark settings

下面是一个例子,在我们的开发网站上,有一个图像和我们的 Kinsta 徽标作为水印。当我们将图像上传到媒体库时,这被自动应用到图像上。多酷啊。

Kinsta watermark

Kinsta watermark

添加 DMCA 徽章

DMCA(Digital Millennium Copyright Act)是一部美国版权法,主要针对数字媒体,帮助内容所有者快速有效地删除被盗内容(包括图像)。这延伸到诸如互联网服务提供商(ISP)、网络托管提供商和搜索引擎等地方。一个 DMCA 撤下通知适用于内容物理托管的地方。因此,美国以外的人仍然可以向 DMCA 投诉。

DMCA protected

DMCA protected

你可以在你的 WordPress 网站上免费添加一个 DMCA 徽章,尽管他们也提供优质服务。想象一下,就像在你的房子周围安装没有启用的安全摄像头。人们在试图复制你的内容和图片之前可能会三思。还有一个 DMCA WordPress 插件

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

添加版权声明

最后,在你的 WordPress 网站上有一个版权声明总是好的。从技术上来说,这并不是必需的,因为你发布的所有东西都自动拥有版权,归你所有,但是,建议你这样做。通常版权声明放在网站的页脚。你可以在下面看到我们的一个例子。

Copyright notice

Copyright notice

为了给你的网站添加版权声明,我们建议你首先检查你的 WordPress 主题的文档。他们中的大多数应该有一个简单的方法来改变版权信息。如果没有,您可以将以下内容放入页脚小部件中。

<p>Copyright © 2017 Site Title</p>

你也可以添加一个动态版权声明到你的 WordPress 站点的页脚,通过添加下面的代码到你的主题的 footer.php 文件中。

Copyright ©
<?php $the_year = date("Y"); echo $the_year; ?>
<?php bloginfo('name'); ?>
All Rights Reserved.

如何处理被盗图像

现在你知道了更多关于如何保护你的网站上的图片,让我们来探讨一下你在事后该做什么。相信我们,这总有一天会发生在你身上。下面是我们在金斯塔使用的方法,效果很好。

1.首先分析复制的图像

当你发现有人窃取或复制你的图片时,我们建议你做的第一件事是首先检查确保他们在他们的服务器上托管它。这可以确保它们不会热链接和耗尽服务器的带宽。在 Chrome 中,你可以右击一张图片,点击“Inspect”,它会高亮显示该图片所在的 URL。

Inspect image

Inspect image

如果它是从他们的服务器加载的,那么看看他们是否给了你一个反向链接(引用你作为一个来源)。如果是的话,那么你可能真的想离开它。如果他们没有推荐你,给他们发一封电子邮件,让他们推荐你,因为这是一个获得免费反向链接的好方法,这对 SEO 来说非常有用。下面是一个模板示例:

Hello,

I work for _____ and we noticed you used one of our images in your article here: [link to their post]
You can see that we are the owner of the image here: [link to your original post]

We are OK with you using our image as long as you reference us. Please add a link to [term/phrase] in your article to [link on your site].

If you don't want to add a link we totally understand, but we'll need to ask that you remove the image as this is something created by us.
Thank you, if you have any questions please feel free to ask.

Name
[link to your site]

请记住,这仅适用于您创建的图像,而不是您许可的图像。许可证图片仍然需要被删除,因为他们没有使用它的许可。

2.发送礼貌的删除电子邮件

如果图片是许可的,或者你不想要反向链接,只是想让他们删除它,我们建议你先发一封礼貌的删除邮件。创建一个任务,然后过几天或几周再来检查。注意:根据我们的经验,这封礼貌的邮件通常可以解决 90%的问题。

Hello,

I work for _____ and we noticed you used one of our images in your article here: [link to their post]
You can see that we are the owner of the image here: [link to your original post]

We would kindly ask that you remove and or replace this image.
Thank you, if you have any questions please feel free to ask.

Name
[link to your site]

3.发送更具攻击性的攻击电子邮件

如果你在第一次尝试后没有收到网站所有者的回复,那么你可以发送一封稍微更具攻击性的删除邮件。根据我们的经验,这通常可以解决剩下的 10%你没有联系的问题。

Hello,

I work for _____ and haven't heard back from you regarding my first email.

We noticed you used one of our images in your article here: [link to their post]
You can see that we are the owner of the image here: [link to your original post]

We would kindly ask that you remove and or replace this image. If we don't hear back from you within the next two weeks we will have to file a DMCA complaint.

Name
[link to your site]

4.提交一份 DMCA 查封通知

最后,如果有必要,你可以申请 DMCA 下架通知。这可能是确保它被取下的快速方法。还有,我们有一篇关于这个话题的相关文章: WordPress 内容抓取(反击还是无视?)(对比实例)

摘要

作为内容创建者,保护网站上的图像非常重要。如果你付出了辛勤的劳动来创造它,或者支付了费用,第三方没有理由使用它。事实上,在大多数情况下这是非法的。希望现在您已经了解了一些防止这种情况发生的方法,以及当这种情况发生时应该怎么做。

您在图像盗窃方面有什么经历?你一定要发出那些要求搬走的邮件吗?请在评论中告诉我们。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

ProtonMail 与 Gmail:终极比较指南

原文:https://kinsta.com/blog/protonmail-vs-gmail/

虽然 Gmail 可能是世界上最受欢迎的电子邮件提供商,但 ProtonMail 的安全性是否让它成为更好的选择?

答案并不总是如此清晰。

虽然许多用户已经因为其出色的安全和隐私功能而转向 ProtonMail,但许多 Gmail 用户根本看不到它的好处。虽然 ProtonMail 肯定是两个提供商中更安全的,但一些用户可能会认为额外的安全性不是完全必要的。

但这真的是一个安全的假设吗,尤其是在安全风险不断增加的情况下?那么其他电子邮件功能呢,比如易用性或可扩展性?虽然这两个提供商各有所长,但每个都有独特的优点,也有独特的缺点。

请继续阅读,在这场势均力敌的比较中,了解更多关于 ProtonMail 和 Gmail 的信息。

ProtonMail 与 Gmail 的主要区别

Gmail 是迄今为止世界上最受欢迎的电子邮件提供商,拥有超过 15 亿用户。

Screenshot of email porviders

Gmail is the world’s most popular email provider

虽然使用(甚至知道)ProtonMail 的人少得多,但很多研究它的人倾向于做出改变。对于一个“小”电子邮件提供商来说,这是相当令人印象深刻的——但是为什么会这样呢?

答案因用户和他们的偏好而异。然而,隐私和安全往往是那些转向使用 ProtonMail 的人普遍关心的问题。虽然 Gmail 在这些方面并不一定“缺乏”,但 ProtonMail 的额外保护级别使它非常有吸引力。

这并不是说 Gmail 没有其他优势,或者说 ProtonMail 没有缺点。

一般来说, ProtonMail 更安全,而 Gmail 更灵活。正如我们将在快速对比中看到的,Gmail 的灵活性使其成为使用其他谷歌服务(如 Docs) 的绝佳选择。同样,当发送敏感数据时,ProtonMail 的安全性是无价的。

请继续阅读,了解更多细节。

While Gmail may be the world’s most popular email provider, does ProtonMail’s security make it the better option? 👀 Learn more here 🤓Click to Tweet

ProtonMail 概述

总部位于瑞士的 ProtonMail 是世界上最隐私和安全的电子邮件提供商之一。

The ProtonMail logo

ProtonMail

虽然许多电子邮件提供商会收集大量个人数据,但 ProtonMail 不会。除了匿名注册和没有 IP 地址记录,ProtonMail 是少数几个允许用户完全匿名的电子邮件提供商之一。他们的付费计划甚至允许用户使用匿名或分散的支付方式,如比特币

ProtonMail 还提供了非常强大的安全功能——至少对电子邮件提供商来说是这样。在其他安全功能中,ProtonMail 提供了完整的端到端加密,使得任何人(甚至 ProtonMail 本身)都不可能阅读你的电子邮件

如果这还不够,他们还提供地址验证来保证你的电子邮件被发送到预定的收件人。凭借强大的密码术和加密方法等其他功能,ProtonMail 的隐私和安全级别在免费电子邮件提供商中是无与伦比的。

这并不是说没有缺点或限制。

虽然 ProtonMail 用户可以享受顶级的隐私和安全性,但它也有一些限制。其中一些限制包括每天发送 150 条消息的限制和只有 500 MB 的云存储空间。我们将在下面进一步探讨这些限制。

ProtonMail Pros

寻找无与伦比的隐私和强大的安全性?只需看看 ProtonMail。

  • 完全隐私和匿名。 ProtonMail 允许其用户保持完全匿名,注册时不需要任何个人信息。ProtonMail 也不会跟踪用户的 IP 地址或审查他们发送的电子邮件,允许完全匿名的通信——这在任何电子邮件提供商中都是罕见的功能。付费用户也可以使用比特币等匿名方式支付。
  • 强大的加密和安全性。作为隐私功能的延伸,ProtonMail 还会加密每封邮件。截至 2022 年,ProtonMail 使用非常好隐私(PGP) 加密来保护电子邮件和发送的文件。椭圆曲线加密技术也于 2019 年 4 月推出,为用户提供了更快速度和额外安全性的双重优势。
  • 私人信件。虽然从技术上讲,这是上述优势的一部分,但也值得一提。有了 ProtonMail 的加密功能,除了你和你的记者,任何人都不可能阅读你的邮件——甚至 ProtonMail 本身。该提供商还包括地址验证,这样你就能知道谁会收到你的邮件。

质子邮件缺点

尽管 ProtonMail 有很多安全优势,但它并不是最灵活的电子邮件服务提供商。

  • 150 条消息的限制。 ProtonMail 每天只允许用户发送 150 封邮件。虽然这对于某些人来说可能是一个相当高的限制,但企业用户将需要付费订阅或另一个服务提供商来进行大规模通信。对于付费用户,这一限制增加到每天 1,000 封电子邮件。
  • 只有 500 MB 的存储空间。【Gmail 和其他电子邮件提供商提供大量(如果不是“无限”)数据上限,ProtonMail 只提供 500 MB 的安全云存储。然而,那些寻求隐私和安全的人通常对远程存储他们的文件不感兴趣。
  • 最小的组织工具。如果消息和数据上限还不够,ProtonMail 提供了最基本的组织工具(如果不是更少的话)。由于没有过滤器或标志,对于希望保持有序的用户来说,这不是一个很好的选择。然而,用户仍然可以使用提供商的免费 SMTP 服务器访问 Outlook 中的 ProtonMail 和其他应用

Gmail 概述

谷歌的 Gmail 成立于 2004 年,是世界上最受欢迎的电子邮件提供商之一。

The Gmail logo

Gmail

Gmail 拥有超过 15 亿用户,并且还在增长,是最受欢迎的电子邮件提供商。唯一的挑战者是电子邮件客户端部门,苹果 iPhone 的邮件在移动安装中略微领先。

即便如此,Gmail 的流行也不无道理。

像许多谷歌产品和服务一样,Gmail 提供了一个直观、易用的界面,去除了杂乱和不必要的工具。因此,即使是第一次使用 Gmail 的用户也可以轻松地浏览 Gmail 界面来发送和阅读电子邮件。此外,正如你对搜索引擎的期望一样,Gmail 还能让你轻松搜索收件箱和其他文件夹。

Gmail 最大的优势之一是它的动态邮件。这个强大的功能允许用户在邮件中完成某些操作(比如评论 Google 文档),节省了宝贵的时间。动态邮件通过谷歌工作区支持额外的应用和附加软件,包括谷歌表单和谷歌文档。

当然,所有这些便利和灵活性都是有代价的——而且代价是隐私。

除了收集你的个人信息之外,谷歌还会密切关注你在使用它的应用程序时所做的一切。这不仅限于电子邮件。无论你是在 Gmail 中发送邮件,还是在谷歌文档上回复评论,或者填写谷歌表格,谷歌都在关注。

然而,这并不是说谷歌将你的数据用于某种邪恶的目的。如果有的话,谷歌收集你的数据主要是为了定制你的体验,或者在最坏的情况下,为你提供广告。此外,数据收集在大多数电子邮件提供商中很常见,包括微软 Outlook 和雅虎!邮件

即便如此,对于一个易于使用且与其他应用高度兼容的免费电子邮件来说,这也不是一个糟糕的权衡。

Gmail 专业版

Gmail 的流行很大程度上是因为它的灵活性和易用性。

  • 简单直观的界面。 Gmail 的精简界面使发送电子邮件变得简单。动态邮件和其他强大的功能使大多数操作变得直观,即使是第一次使用的用户也能找到路。
  • 高度兼容。 Gmail 与 Google Workspace 高度兼容,其中包括 Google Docs 和 Google Forms 等应用。因此,Gmail 是任何使用这些服务的人的绝佳选择。用户还可以访问 Gmail SMTP 服务器,通过 Outlook 和其他第三方电子邮件客户端发送和接收电子邮件。
  • 没有垃圾邮件的收件箱。Gmail 收件箱以无垃圾著称,这部分要归功于谷歌尖端的垃圾邮件过滤技术。对于从雅虎等其他垃圾邮件提供商那里转移过来的用户来说,这通常是一种解脱。邮件。

Gmail 缺点

虽然 Gmail 是可用性的一个很好的选择,但它也有一些缺点,对一些用户来说可能不是很有吸引力。

  • 可疑的隐私。无论对错,谷歌和 Gmail 都会收集你的数据。这包括您的个人信息、应用程序使用情况以及您发送的任何电子邮件的内容。虽然这对一些用户来说并不是一个障碍,但那些寻求完全匿名和隐私的人应该考虑 ProtonMail。
  • 没有自定义文件夹。Gmail 的用户界面非常棒,唯一的缺点是缺少文件夹。与其他提供自定义文件夹来分类邮件的电子邮件服务不同,Gmail 使用了一个标签系统。虽然许多用户更喜欢它,但它需要一些时间来适应。
  • 昂贵的付费层级。 Gmail 的付费计划比竞争对手稍贵,最基本的计划每月 6 美元起。虽然这还不算多,但与 Google Workspace 集成的企业级计划的价格增长很快。当然,大多数用户对免费选项非常满意。

TL;DR:隐私与灵活性

不用说,Gmail 和 ProtonMail 是两个非常不同的电子邮件提供商。虽然两者都有自己的优点和缺点,但它们的主要区别在于隐私和灵活性。

  • ProtonMail 更私密,但灵活性较差。虽然 ProtonMail 用户拥有完全的匿名和隐私,但他们每天只能发送这么多消息。
  • Gmail 不太隐私,但更灵活。 Gmail 易于使用,与其他应用高度兼容,但它远没有那么私密。

显然,一个不一定比另一个“更好”。但是哪个更适合

虽然您现在可能已经知道了,但考虑隐私和灵活性之外的一些其他因素会有所帮助。在你作出最终决定之前,看看下一部分关于选择电子邮件提供商的一些有用的提示。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

如何选择电子邮件提供商

你需要从电子邮件提供商那里得到什么?

ProtonMail inbox

A ProtonMail inbox shown on a laptop

虽然有些人只想要一种简单的发送电子邮件的方式,但其他人可能有更特殊的要求。无论是完全的隐私还是与现有工具的兼容性(或其他完全的东西),了解您的需求是选择正确提供商的关键。

当然,还有其他因素需要考虑——没有一家供应商能满足所有这些因素。

1.评估你的需求

你打算如何使用你的电子邮件?例如,虽然 Gmail 是个人通信的绝佳选择,但它可能不太适合发送医疗记录和其他敏感数据。

内容营销也提出了几个独特的需求。虽然大多数电子邮件营销活动使用专门的电子邮件营销软件,但他们仍然依赖强大的电子邮件提供商来发送和接收电子邮件。在这里,更灵活的选项,如 Gmail 和私人电子邮件服务器,通常更有能力支持电子邮件营销活动和最佳实践。

无论如何,评估你的需求是选择电子邮件提供商的最好方法。例如,一些用户可能需要能够进行企业级部署的电子邮件提供商。虽然 ProtonMail 有一个商业版本,但对于某些组织来说,它的可扩展性或可用性可能不够。

相反,一个组织可能更喜欢 Gmail,仅仅是因为它的易用性和可扩展性。虽然它不像 ProtonMail 那样私密或安全,但对更简单、更灵活的提供商的需求超过了这些因素。

2.优先考虑隐私和安全

虽然电子邮件本质上是隐私的,但许多用户惊讶地发现,电子邮件提供商实际上并不一定是隐私的。

通常,注册一个电子邮件账户意味着牺牲一些个人数据。虽然这些数据通常只是你的姓名、电话号码和其他联系信息,但 Gmail 等提供商也会扫描你的电子邮件内容。

安全性也是一个关键因素,尤其是当你使用电子邮件处理银行业务或其他敏感任务时。在这里,最安全的电子邮件提供商提供强大的加密功能,以及多重或双因素认证(MFA 或 2FA)和其他形式的访问控制。

当然,无论你如何使用你的电子邮件,安全和隐私总是很重要的。虽然使用 Gmail、ProtonMail 或任何其他主要提供商不会出错,但有些提供商比其他提供商更安全。

3.检查与现有工具的兼容性

如果你经常使用电子邮件以及文字处理软件和其他应用程序,那么你可能需要找一个兼容的电子邮件提供商。

Gmail 和微软 Outlook 是两个很好的例子。正如我们之前报道的,Gmail 与 Google Workspace 高度兼容,为用户提供了一个直接链接到 Google Docs、Google Sheets 和许多其他工具的链接。微软 Outlook 对 Office 365 也是如此。

4.确保易用性

虽然大多数电子邮件服务都很容易使用,但原因却各不相同。

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

Gmail 和 ProtonMail 为这种对比提供了一个完美的例子。虽然两者都提供了一个“简单”的用户界面,但是它们简单的原因不同。Gmail 的简单是因为它的直观设计,而 ProtonMail 的简单是因为它几乎没有任何功能。你认为哪个会更容易使用?

企业用户也要考虑别人的可用性需求。例如,虽然提供商可能会提供某些好处,但如果很难让员工参与进来,他们可能就不值得了。在这里,重要的是要考虑普通用户适应新界面的难易程度,以及这会如何影响生产率、培训成本等等。

5.考虑成本

虽然大多数电子邮件提供商提供免费计划,但他们很少满足专业和企业用户的要求。随着付费计划成为唯一可行的选择,成本很快成为一个主要考虑因素。

像任何软件一样,成本取决于用户数量和使用范围。例如,Gmail 的基本计划从每个用户每月 6 美元开始,其商业计划将这一费用提高到近 20 美元。随着企业计划可能有更高的费用,电子邮件可能很快成为任何组织的主要开支。

6.尝试免费版本

无论你打算如何使用你的电子邮件,有时最好的选择是尝试每一个供应商。由于大多数提供商提供免费计划,比较不同的提供商是容易和负担得起的。

虽然企业用户可能无法在没有演示的情况下体验全面的部署,但尝试免费版本仍然是一个很好的策略。

ProtonMail 与 Gmail:详细比较

既然你已经知道要找什么(或者至少是你想要的),是时候看看 Gmail 和 ProtonMail 的真正优势了。虽然您现在可能已经知道了主要的区别,但是下一节将会更深入地探讨各个特性。

可用性

Gmail 和 ProtonMail 都提供简单的界面。虽然 ProtonMail 并不总是最用户友好的,但 2021 年的一次更新带来了一些重大改进。

  • 两家供应商都提供简单易用的界面。截至 2021 年,ProtonMail 和 Gmail 的布局非常相似。尽管相比之下,ProtonMail 仍然非常简单,但是用户可以毫不费力地找到任何一个界面。

The new ProtonMail user interface

ProtonMail user interface

  • 邮件分类:在 ProtonMail 使用标签和文件夹分类邮件的地方,Gmail 只使用标签。虽然这让事情变得简单了一点,但对于那些习惯更传统收件箱的人来说,这可能是一个很难的调整。
  • 兼容性:作为 Google Workspace 的一部分,Gmail 可以立即与 Google Docs 和其他生产力工具兼容。虽然 ProtonMail 没有这种兼容性,但它允许用户在 ProtonDrive、ProtonCalendar 和 ProtonVPN 之间快速切换。
  • 定制:尽管两家提供商提供不同的主题和布局,但 Gmail 提供的要多得多。Gmail 用户也可以为完全自定义的收件箱创建自己的主题。
  • 设备:【Gmail 和 ProtonMail 都可以在桌面、、网络浏览器和移动应用上使用。

隐私与安全

虽然 ProtonMail 无疑更加隐私和安全,但 Gmail 仍然提供了大量的安全功能。

  • 多因素身份验证(MFA): 两家提供商都提供双因素和多因素身份验证,以增加一层安全性。在这里,每次登录都需要在单独的设备上进行验证,比如移动电话。
  • 数据收集和记录:谷歌收集大量数据已经不是什么秘密,Gmail 也不例外。虽然这些数据主要用于识别趋势和定制体验,但对一些用户来说可能有点太具侵入性。相比之下,ProtonMail 不收集数据、 IP 地址或日志。
  • 加密: ProtonMail 提供强大的端到端加密,这样只有你和收件人才能阅读你的邮件。虽然 Gmail 也提供基本加密,但它只有在收件人使用相同类型的加密时才有效。
  • 电子邮件隐私:虽然两家供应商都没有兴趣阅读你所有电子邮件的有趣细节,但只有 ProtonMail 可以保证完全的隐私。使用他们的加密方案,即使是 ProtonMail 或其员工也看不到你发送的内容。

可量测性

Gmail 和 ProtonMail 都提供商务和企业级计划。然而,ProtonMail 的额外安全性也有局限性。

  • 用户数量:两家提供商对 Gmail 和【ProtonMail 的用户数量分别为 300 名和 50 名。然而,Gmail 的企业计划可以支持无限的用户,尽管需要大量的额外费用。
  • 电子邮件限制: Gmail 允许用户每天发送多达【2,000 封电子邮件。这比仅允许 150 个的 ProtonMail 多得多。虽然用户可以支付额外费用将这个数字提高到 1000 英镑,但这仍然远远低于 Gmail。
  • 存储限制: Gmail 的存储限制也很宽松,允许用户拥有高达 15 GB 的免费存储空间。相比之下,ProtonMail 只提供 500 MB,付费用户的最大容量为 5 GB 或 20 GB。

支持

虽然两家提供商都提供基本支持,但只有 Gmail 为其付费用户提供实时支持。

  • 知识库:两家提供商都提供免费的知识库。在这里,客户可以自我诊断并回答他们可能遇到的大多数问题。
  • 客户支持:两家提供商还提供不同层次的客户支持。虽然对大多数用户的支持通常仅限于联系方式,但 Gmail 也为付费计划提供 24/7 的实时支持。不幸的是,在撰写本文时,ProtonMail 还不提供实时支持。

定价和计划

Gmail 提供免费和企业级计划,以及定制的企业级计划。然而,升级的唯一方法是注册 Google Workspace,其中包括 Google Docs 和其他 Google apps 的升级版本。

Google Workspace pricing plans

Google Workspace plans and pricing as of April 2022

ProtonMail 也提供免费账户,尽管功能非常有限。虽然 ProtonMail 的入门级“Plus”计划比 Gmail 的最低付费计划便宜,但它仍然比 Gmail 的免费帐户更受限制。

ProtonMail plans and pricing

ProtonMail plans and pricing as of April 2022

ProtonMail and Gmail go head-to-head in this guide 💪Click to Tweet ## 摘要

Gmail 和 ProtonMail 都是优秀的电子邮件提供商。虽然两者都提供免费计划和类似的界面,但权衡归结为隐私和 T2 的灵活性。

  • ProtonMail 提供无与伦比的隐私和安全性,但灵活性非常有限。
  • Gmail 提供了高度的灵活性和大容量的存储空间,但隐私少得多,而且电子邮件分类也非常规。

无论你选择哪一个,你的网站都需要一个单独的托管包,尤其是在使用基于网络的电子邮件提供商的时候。要了解更多关于 Kinsta 托管包的信息,请联系我们与我们的专家交流并安排演示。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

代理与 VPN:你必须知道的 5 个关键区别

原文:https://kinsta.com/blog/proxy-vs-vpn/

现在,许多互联网用户比较代理和 VPN,想知道他们在浏览时应该使用什么来保护自己。

2020 年, 84% 的消费者表示,他们关心自己的隐私和数据,80%的人愿意采取行动保护隐私和数据。

虚拟专用网络(VPN)和代理是一个潜在的解决方案,因为它们在浏览器和任何数据跟踪公司或政府之间增加了一个额外的层。

但是代理和 VPN 有什么区别呢?如果您想提高您的在线隐私和安全性,哪个选项是最好的?

在本文中,我们将回答您的所有问题,并强调两者之间的重要区别。

什么是虚拟专用网络(VPN)?

虚拟专用网络(VPN)是一种专用网络,它对发送到互联网或从互联网接收的任何数据进行加密。它可以帮助您安全、私密地访问网站并使用您的程序和应用程序,无论您使用的是什么网络。

你可以把它想象成一个安全的信使,从网站上获取网站数据并安全地传送到你的电脑上。就像一辆运钞车在自动取款机上来回运送现金一样。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

它还隐藏了你的 IP 地址(这里有如何检查你的 IP 地址,并允许你改变你的位置,这样你就可以访问地理限制的内容。比如,如果你最喜欢的节目在你所去的国家的网飞频道上看不到。

您还可以使用“办公室 IP 地址”远程访问您公司的文件系统

VPN 工作在操作系统级别,对所有进出的互联网流量进行加密。

VPN 是如何工作的?

how a vpn works infographic

How a VPN works (Image source: yellowstonecomputing.com)

当与 VPN 服务器通信时,VPN 客户端使用数据加密,这可以远程访问您想到的网站或数据。双方都有一个中间人。客户端对您的路由器和互联网服务提供商( ISP )隐藏您的查询,而 VPN 服务器对您正在使用的网页或服务隐藏您的身份。

当你使用任何类型的公共 WiFi 网络时,它对安全性有很大的影响。有了 VPN,网上购物、银行业务,甚至通过开放网络发送工作邮件都要安全得多。

由于 VPN 加密了您的连接,潜在的黑客无法“窃听”传输来窃取易受攻击的数据,如您的帐号,或者更糟的是,您的密码。

它还可以防止您的 ISP 或雇主通过跟踪路由器流量来监视您的流量和您的在线活动。

如果您的公司使用支持 VPN 的路由器,您可以使用 VPN 远程连接到您的办公网络,并在旅途中访问办公文件、CRM 或其他软件。

什么是代理服务器?

代理服务器通常是通过代表您访问网页的 web 应用程序或桌面程序访问的远程公共服务器。

代理服务器工作在应用程序级别,一次充当一个应用程序(比如你的浏览器)的代理。

许多代理服务器不支持安全的 HTTPS 数据传输,并且默认情况下是不安全的。

代理服务器是如何工作的?

当大多数人使用代理服务器这个词时,他们指的是 HTTP 代理。

这些代理服务器是通过互联网访问网页,然后将数据转发到您的浏览器的 web 服务器。

Proxy Server

How a proxy server works (Image source: seobility.net)

您可以使用它们在浏览器中访问受地域限制的网站和页面

与 VPN 不同,您的代理连接没有加密。它只是作为你的计算机和最终服务器之间的媒介。

因此,HTTP 代理会对网站隐藏你的身份,但不会保护任何敏感数据。

SOCKS5 代理

SOCKS5 代理的工作方式类似于 HTTP 或 web 代理,但是您可以将它连接到其他应用程序,而不仅仅是您的 web 浏览器。

SOCKS5 代理将所有数据传输限制在第五层,有效地阻止了使用常见的黑客工具隧道或扫描您系统的企图。

因为您是在应用程序级别设置它,所以程序本身必须支持代理使用。它不像 VPN 那样控制所有的进出流量。但是你可以用它来进行点对点的文件共享、电子邮件、种子等等。

透明代理

透明代理是在网络上设置的代理,用于控制和监控网络流量。它是透明的,因为大多数用户不会注意到它的存在(直到它阻止他们访问某个页面)。

学校、办公室、甚至咖啡馆都用这些来限制对某些网站的访问,比如社交媒体或网飞。企业可能会使用它来让你专注于工作,或者确保你不会使用太多的带宽。

Proxy vs VPN - what's the difference, and most importantly, which one is best for privacy and safety?🔐 Click to see the full breakdown of these two solutions 🔍Click to Tweet

代理和 VPN 之间的 5 个主要区别

仅从技术定义来看,普通用户很难区分 VPN 和代理。为了帮助您理解 VPN 与代理服务器的不同,我们强调了 VPN 与代理在安全性、隐私、cookies、成本和速度方面的主要区别。

1.代理与 VPN:安全性

93% 的数据泄露本来可以通过基本的数据安全措施来避免。对于一个喜欢独处的人来说,这通常意味着在浏览互联网时要采取一些额外的预防措施。

尤其是当从公共网络使用互联网时。但是,在提高安全性方面,哪个选项是最佳选择呢?

让我们先来仔细看看代理服务器。

代理安全吗?

简短的回答是:可能不会。特别是如果你喜欢代理服务器,因为它们相对于 VPN 来说是免费的。

公共的、未加密的代理服务器对您访问的网站隐藏您的身份。但是它们不会加密您到代理服务器本身的连接。

通过使用公共代理服务器,你可能会比通过浏览器直接连接到 web 服务器的安全性差。

good and bad proxies chart

Good vs bad proxies

在一项对超过 13,000 个代理的里程碑式研究中,79%的测试公共代理服务器要么不安全,不允许 HTTPS 流量,要么直接有害于注入的 HTML 或 JavaScript。

带 HTTPS 连接和密码保护的付费代理服务器通常是安全的。但与专业级 VPN 的端到端加密相比,它们仍然是有限的。

接下来,让我们仔细看看 VPN 以及它们如何影响您的安全。

VPN 安全吗?

是的,绝大多数商用 VPN 都是安全使用的。VPN 在服务器端加载数据,然后在将数据发送到您计算机上的客户端之前对数据进行加密。

只有在数据被发送到客户端后,它才解密数据以供其他程序使用。因此,不仅你的身份对你访问的网站或服务是隐藏的,你的 ISP,甚至网络也不知道你在加载什么数据。

他们所能看到的是你正在从一个 VPN 加载加密数据。它保护您的数据免受开放网络上任何恶意黑客的攻击,以及政府或雇主的窥探。

它还会保护你的 IP 地址不被泄露,保护你的电脑免受 T2 DDoS 攻击和其他暴力攻击。

所有这些保护听起来可能是一个漫长的过程,但这一切都发生在几微秒内。它不会显著影响你的浏览体验。您甚至可以流畅播放高清电影,没有任何延迟,也可以畅玩在线游戏,没有延迟问题。

唯一的警告是,VPN 服务的可靠性取决于它的提供商。所以在选择 VPN 的时候要做好自己的尽职调查。

请记住,你给了一家公司完全访问你的互联网流量。选择一个有良好声誉和隐私保护的 VPN 提供商。

2.代理与 VPN:隐私

74%的美国人出于隐私考虑限制了他们的网上活动。

本地安装的 VPN 从数据离开您的计算机到到达目的地,为您的数据提供完全的加密。这意味着人们很难窥探你的数据。

即使你在一个开放的 WIFI 网络上,加密也能保护你的数据不被恶意黑客截获。

由于 VPN 使用端到端加密,你的 ISP、路由器、雇主或政府也不能访问你的数据。

这也是中国政府试图限制公众访问 VPN 的部分原因。因为当连 ISP 都无法窥探流量时,就没有办法控制你是否在访问被屏蔽的网站。

VPN 还会对您访问的网站隐藏您的 IP 地址和位置,使您更难识别身份。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

代理服务器只是充当中间人的角色,对你访问的网络服务器隐藏你的 IP 地址。

即使有了 VPN 或代理,你仍然容易受到设备指纹和其他技术的攻击,这些技术被谨慎的广告商用来显示“相关”广告。

但通过隐藏你的 IP 地址,你至少让公司更难将这些点联系起来。

3.代理与 VPN:cookie

随着法律(如 GDPR 和 CCPA)和对互联网隐私的日益关注,许多消费者担心网站和广告商如何使用 cookies 来跟踪他们的一举一动。

GDPR 合规性是欧盟商界的新热门话题之一。有充分的理由。由于这项新法律,几乎每个用 cookies 跟踪你的网站都必须征得你的同意。

The Guardian cookie prompt

The Guardian cookie prompt

你可能已经看过几百次这样的提示了。

还有关于 cookies 的事情,它们储存在你电脑的硬盘上。Cookies 将通过代理服务器或 VPN 下载到您的计算机上。

但是有了虚拟专用网,cookie 会把虚拟专用网的 IP 地址误认为是你自己的,这将提供某种程度的保护,防止指纹和其他数字跟踪技术。

代理服务器还会欺骗网站存储一个不同 IP 地址的 cookie。

所以当你开始使用 VPN 或代理服务器时,你必须清除你电脑上的所有 cookies。

否则,现有的 cookies 可能会干扰增加的隐私层。该网站会将它与您的原始位置和 IP 地址连接起来,并使用它来帮助您的设备进行指纹识别。

4.代理与 VPN:成本

我们将在博客文章的后面研究一些解决方案,但是现在,你应该知道大多数可用的代理是公共的和免费的,而 VPN 服务通常每月花费 5 到 12 美元。

如果您想安全地使用代理服务器,您还需要使用可靠的高级服务。高级 SOCKS5 代理提供商 IPVanish 每月收费 5 美元,其他替代产品的价格也类似。

因此,如果你对安全性很认真,VPN 仍然是最划算的。

5.代理与 VPN:连接速度

代理和 VPN 的另一个关键区别是连接速度。

使用公共代理服务器,你可能很难达到每秒 1 兆比特的速度,而一些 VPN 提供 50 兆比特或更高的速度。

虽然 VPN 的加密可能会增加几毫秒的延迟,但这并不明显,除非你是最高级别的专业游戏玩家或流玩家。

在某些情况下,使用 VPN 甚至可以加快连接速度。大多数主要提供商使用遍布全球的数据中心网络。因此,如果网站不使用 CDN ,或者 CDN 最近的数据中心很远,VPN 连接可能会更快。

3 安全高级 VPN,您今天就可以开始使用,以实现更安全的浏览(以及一个免费选项)

为了认真对待您的数据安全,您可以使用这些 VPN 解决方案之一,从今天开始更安全地浏览。

与宕机和 WordPress 问题做斗争?Kinsta 是一款考虑到性能和安全性的托管解决方案!查看我们的计划

1.ExpressVPN

express vpn

ExpressVPN VPN service

如果你收听播客或者观看任何主要的 YouTubers,你很可能已经听说过快速 VPN

它是全球最大的 VPN 服务提供商之一,当然也是广告宣传最多的一家。但是,ExpressVPN 不仅仅是广告费用。其庞大的预算和客户群也意味着它拥有超过 3,000 台 VPN 服务器的强大产品。

ExpressVPN 不会限制您的带宽,快速服务器意味着您可以看到高达 50 Mbps 或更高的下载速度,这取决于您的互联网连接和位置。

ExpressVPN 每月收费 12.95 美元,每年收费 8.32 美元。

  • 连接速度: 50 Mbps+
  • 带宽:无限制
  • Trustpilot 评分: 4.7 分(满分 5 分),6100+评论
  • 设备限制:最多 5 台设备
  • 价格:$ 12.95/月
  • 免费试用:

2.NordVPN

NordVPN VPN service

NordVPN VPN service

NordVPN 是 VPN 领域的另一个市场领导者,这是有充分理由的。

NordVPN 被反复测试为美国用户可用的最快 VPN,在 60 多个不同国家拥有超过 5000 台服务器。

它经常在年度计划中提供巨额销售,使其成为市场上最便宜的 VPN 服务之一。除此之外,你还有季节性黑色星期五/网络星期一交易(如果你经营电子商务,一定要看看我们与 WooCommerce agency Sau/Cal 合作的主题为的网络研讨会)。

NordVPN 还提供 30 天退款保证。

  • 连接速度: 50 Mbps+
  • 带宽:无限制
  • Trustpilot 评分: 4.4 分,共 4,955+条评论
  • 价格:$ 11.95/月
  • 设备限制:最多 6 台设备
  • 免费试用:

3.冲浪者

Surfshark VPN service

Surfshark VPN service

Surfshark 是另一项出色的 VPN 服务,无论你身在何处,它都拥有快速可靠的连接。

SurfShark 在超过 63 个不同的国家拥有超过 1,700 个服务器位置。带宽和设备是无限的,这对于 VPN 提供商来说有些不常见。这个 VPN 解决方案还带有内置的广告拦截功能

每月 12.95 欧元,与 ExpressVPN 的价格大致相同。

  • 连接速度: 40 Mbps+
  • 带宽:无限制
  • Trustpilot 评分: 4.3 分,共 6,410 多条评论
  • 价格:$ 12.95/月(每年针对黑色星期五/网络星期一这样的季节性活动都会有特价)
  • 设备限制:
  • 免费试用:

免费选项:ProtonVPN

ProtonVPN free VPN service

ProtonVPN free VPN service

ProtonVPN 提供 100%免费和无广告计划,支持一种设备和最多三个国家。

免费计划还保护您的隐私,政策是维护任何用户活动和浏览的 0 日志。

带宽和速度在技术上是无限的,但是由于你使用拥挤的免费服务器,速度相对较慢。

该高级计划包括 50 个国家的 1,077 台服务器,但一些用户报告说,美国等热门地点和服务器的速度很慢。

客户声誉不如上面提到的三种选择。

  • 连接速度: 20 Mbps+(免费计划)
  • 带宽:无限制(免费计划)
  • Trustpilot 评分: 3.0 分(满分 5 分),有 54 条评论
  • 价格:免费计划。起价 4 美元/月
  • 设备限制:自由计划上 1 台设备

代理与 VPN:常见问题

有 VPN 需要代理吗?

不,如果你正在使用 VPN,你不需要代理服务器。VPN 已经对您访问的服务器屏蔽了您的 IP 地址。此外,它加密的数据,并隐藏它从您的 ISP 和潜在的黑客。

我可以同时使用 VPN 和代理吗?

是的,从技术上讲,两者同时使用是可能的。但这不是必须的,也不会对你的安全产生任何重大影响。相反,它可能会大大降低你的连接速度,增加延迟,并破坏你的浏览体验。

代理可以被追踪吗?

代理服务器会对你访问的网站和服务隐藏你的 IP 地址。有人仍可能通过指纹识别来识别你的电脑或设备,但这与代理无关。

代理会隐藏你的 IP 吗?

是的,代理服务器和 VPN 都会对您访问和使用的网站和服务隐藏您的 IP 地址。

有免费的代理服务器吗?

网上有成千上万的免费代理服务器,但是很多都不安全、速度慢或者不可靠。

我应该使用免费的代理服务器吗?

如果你关心连接的速度、可靠性和安全性,免费的代理服务器不是正确的选择。相反,选择高级 VPN 服务或代理。

如果你只是想访问地理限制的内容,那么一个免费的代理服务器可能就足够了。

When it comes to keeping yourself safe and secure online, proxies and VPNs are two words you hear a lot - but what's the difference? 🔐 This guide dives deep into the privacy concerns of both solutions.Click to Tweet

摘要

说到安全和隐私,公共代理服务器比不上高级的加密 VPN。当然,VPN 要花一些钱,但它在可靠性、安全性、隐私性和连接速度方面弥补了这一点。

保护您的网络流量不仅仅是访问地理屏蔽的流媒体内容。它还可能对收集或分享在某人的国家无法获得的信息的自由产生更深层次的影响。

浏览互联网时,您是否使用 VPN 来提高您的隐私和安全性?你有什么经验?


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

为什么以及如何发布一个插件到 WordPress 插件目录

原文:https://kinsta.com/blog/publish-plugin-wordpress-plugin-directory/

拥有超过 50,000 个免费插件,WordPress 插件目录是每个 WordPress 用户的城市购物中心,在那里你可以找到覆盖你下一个网站所有特性和功能的插件。然而,你很可能找不到一个插件来提供你的客户明确要求的功能。不管你喜不喜欢,你可能必须启动你最喜欢的文本编辑器并开始编码。但是你有没有考虑过与整个 WordPress 社区共享你的插件的可能性?

这篇文章的主要目的是和你的读者一起探索通过 WordPress.org 库分发插件的好处。我将快速总结建议和鼓励你遵循的最佳实践,然后我将带你了解当你计划发布一个插件到 WordPress 插件目录时你应该知道的 SVN 关键概念。

为什么是 WordPress 插件目录?

将你的插件发布到 WordPress 插件目录的第一个原因是利用大量的免费工具和服务,比如插件描述、统计、主动安装、变更日志、支持论坛等等。此外,当有新版本可用时,用户会得到通知,并且可以直接从 WordPress 插件屏幕运行升级。WordPress.org 插件在搜索引擎中有更高的可见度,你可以利用一个强大的媒介来宣传你的身份,提高你作为开发者的声誉。

如果你不是一个优秀的营销者或者没有时间营销,WordPress 插件目录可以是一个很好的方式来为你的插件获得免费流量和眼球。

WordPress Plugin Directory

The WordPress Plugin Directory

发布插件的另一个好理由是为 WordPress 社区做贡献。WordPress 是免费软件,有一个巨大的社区免费提供大量的主题和插件。发布一个 WordPress 插件是感谢所有这些免费赠送他们作品的了不起的人的最好方式。

你应该关心的是

请记住,如果你的插件编码糟糕,如果你不定期更新它们,或者如果你不提供快速有效的支持(当然,如果你不是一个值得信任的开发者),更大的可见性可能会毁了你的声誉。这里有一些关键的概念。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

编码

关于编码有很多要说的,你会在那里找到很多有用的读物。但是如果你是 WordPress 开发者,Codex 就是你的圣经,你应该在开始编码之前阅读插件指南。以下是我个人列出的关键概念:

  • 保持你的代码可读。这允许其他开发者理解你的插件做什么,可能帮助你发现错误,并在你的代码上开发他们自己的插件。为了促进开发者之间的合作,WordPress Codex 提供了 WordPress 编码标准,这是所有 WordPress 开发者的最佳实践。
  • 总是注释你的代码。内联文档是一个绝不能低估的重要资源。它允许任何人快速理解一个函数做什么,哪些参数被接受,哪些变量返回,等等。在评论中,您可以添加链接、脚本版本和其他描述,以便在您或其他人编辑您的脚本时派上用场。
    我想说 WordPress 人是一个学习社区,遵守内联文档标准是让人们学习你已经知道的东西的一个好方法。
  • 尽可能使用 WordPress 函数而不是 PHP 函数。WordPress 函数允许你构建安全有效的代码。尤其是当你需要从数据库中获取数据的时候, API 函数让你免于构建复杂的查询,这可能比内置的 WordPress 查询更不安全。在核心的背后有许多伟大的开发人员,他们正在做着我们可以利用的出色工作。

特征

即使你的工作不会得到报酬,你也应该像销售产品一样考虑你的插件。你不需要成为营销专家:你只需要知道你的插件应该在某些方面是独一无二的和/或区别于类似的插件。给你的插件起一个容易记住的有意义的名字,和独特的功能,让人们说“我需要它!”。而且,如果你的插件提供了已经被其他插件覆盖的功能,那么就把重点放在可访问性和易用性上,给用户带来增值,让你的产品与其竞争对手有明显的区别。

支持

通过插件目录分发的每个插件都有一个特定的论坛,用户可以在那里联系你寻求帮助。为用户问题提供清晰的答案,并帮助他们解决问题。快速而恰当的回复对于建立您作为值得信赖的开发人员的声誉至关重要。考虑任何话题,获取任何可以帮助你改进插件的信息。

更新

定期更新你的插件,在需要的时候推送小的改动,但是不要超过。太多的更新会让你的用户失望。

批准

WordPress 是在 GNU 通用公共许可证下发布的,大多数插件都是在相同的 GPL 许可证下发布的。实际上,并不严格要求在同一个许可下发布插件,因为任何兼容的许可都是允许的。无论如何,GPLv2 是值得推荐的(阅读更多关于 GPL 许可)。

为了给这篇文章提供一个工作示例,我们在4 Handy WordPress Media Library Hacks中剖析的插件已经发布到目录中。下载 ExIF 浏览器并在你的文本编辑器中打开它的文件,然后回到这篇文章,进入插件结构。

插件结构

你的插件将被保存在 WordPress.org·SVN 库中。任何人都可以签出副本,但只有作者有权签入。一旦你发布了一个插件,你可以添加新文件,编辑或删除本地机器上的现有文件,然后将这些修改上传到服务器。subversion 会跟踪所有的更改,这样您就可以在以后回到旧版本或修订版。SVN 存储库提供了四个默认文件夹:

/assets/
/branches/
/tags/
/trunk/
  • 截图,标题和图标进入资产
  • trunk 是放置插件文件的目录
  • 代码的分叉分支进入分支
  • 插件版本将存储在标签

每个插件必须提供至少两个文件:readme.txt 文件和主 PHP 脚本。或者,您可以添加一些图像(资产)来显示在插件的页面上。

插件资产

资产是插件标题、图标和屏幕截图。插件标题是你可以在插件页面顶部看到的 JPG 或 PNG 图像。文件名取决于图像的宽度和高度。目前,允许使用以下名称/维度:

  • 常规:横幅-772×250。(jpg|png)
  • 视网膜:横幅-1544×500。(jpg|png)

图标是具有以下名称/尺寸的方形图像:。

  • icon-128×128 .(jpg|png)
  • icon-256×256 .(jpg|png)
  • 图标 svg

您不应该在文件名中指定 SVG 尺寸,因为这些图像可以按任意大小缩放。如果您使用 SVGs,您必须提供一个 PNG 图标作为后备。

截图是插件页面内容中显示的图像。允许 PNG 和 JPEG 格式,文件名必须小写,并遵循以下结构:

  • 截图-1。(jpg|png)
  • 截图-2。(jpg|png)

对于每个屏幕截图,您应该在自述文件中提供描述。所有这些图形应该被添加到你的插件本地目录的资产文件夹中(更多关于你的插件资产如何工作)。

Akismet page

Appealing and consistent assets make a great plugin page

Readme.txt 文件

您应该在主脚本中为您的插件提供一个 readme.txt 文件和适当的标题。
首先,你需要一个包含以下信息的 readme.txt 文件:

  • Plugin name
  • 贡献者:(wordpress.org 用户 id 列表)
  • 捐赠链接:http://example.com/
  • 标记:(插件标记)
  • 至少需要 : (WordPress 版本)
  • 测试到 : (WordPress 版本)
  • 稳定标签:(插件版本)
  • 许可证 : GPLv2 或更高版本(或兼容)
  • https://www.gnu.org/licenses/gpl-2.0.html URI 牌照
  • 描述
  • 安装
  • 截图
  • 变更日志

截图部分允许你为任何你想添加到插件页面的图片添加描述。WordPress.org 提供了插件自述文件标准模板,它将帮助你建立你的自述文件。此外,您可以使用自述验证器来检查您的文件是否正确。

Readme Validator

The Readme Validator outputs notes and warnings on readme files

插件标题注释

标题注释告诉 WordPress 一个文件是一个插件。如果你不打算发布你的插件,唯一需要的字段是插件名称。相反,如果你打算发布插件,你添加的信息越多越好。以下是可用字段的列表:

  • 插件名称:(必需)您的插件名称必须是唯一的。发布之前,在插件目录中搜索同名的插件
  • 插件 URI :插件的主页
  • 描述:一行插件描述(少于 140 个字符)
  • 版本:当前插件版本(必须高于上一版本)
  • 作者:一个或多个作者姓名,用逗号分隔
  • 作者 URI :作者主页
  • License :插件许可证的 slug(即 GPL2)
  • 许可证 URI :许可证全文链接(即 https://www.gnu.org/licenses/gpl-2.0.html)
  • 文本域:插件的文本域
  • 域路径:在哪里可以找到翻译文件(参见如何国际化你的插件

下面是最流行的 WordPress 插件之一的标题评论:

<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Akismet Anti-Spam
Plugin URI: https://akismet.com/
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 3.3.2
Author: Automattic
Author URI: https://automattic.com/wordpress-plugins/
License: GPLv2 or later
Text Domain: akismet
*/

发布到 WordPress 插件目录

准备好后,注册提交你的插件

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Add your plugin

The first plugin release has to be uploaded for a manual review

该插件将由 WordPress.org 的工作人员手动审查。这个过程可能需要一到十天。如果发现任何问题,您将会收到一封电子邮件,解释问题所在以及应该如何修复错误。

Awaiting for approval

The revision process could take up to ten days

一旦插件被批准,您将收到一封电子邮件,通知您可以访问 SVN 库。

Approval email

An e-mail will inform you that the plugin has been approved

目前,该插件不可下载,但你可以通过命令行(或任何 SVN 客户端)上传,编辑和删除文件。下图显示了当前的插件页面。

Approved plugin page

The plugin page is active, but the plugin is not available for download

上传插件

我们的第一个任务是将插件文件上传到 SVN 资源库,但是首先我们需要一个本地文件夹来存储插件文件:

$ mkdir localdir

现在,我们可以签出预构建存储库:

$ svn co https://plugins.svn.wordpress.org/plugin-name path/to/localdir

我们将得到以下响应:

> A    plugin-name/branches
> A    plugin-name/tags
> A    plugin-name/trunk
> Checked out revision 99999999.

A 表示文件夹已经从中央存储库添加到本地文件夹。
下一步是将文件添加到本地 /trunk 文件夹中,并将它们上传到存储库:

localdir/$ svn add trunk/*

你需要证明自己的身份。登录后,您将得到以下响应:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

> A    trunk/my-plugin.php
> A    trunk/readme.txt

注意:不要把主插件文件放在 trunk 的子文件夹中,因为这会中断下载。

现在将变更签回到存储库中:

localdir/$ svn ci -m 'First plugin version'

以下是最后的回应:

> Adding trunk/my-plugin.php
> Adding trunk/readme.txt
> Transmitting file data .
> Committed revision 9999999.

ExIF Viewer structure

The file structure of the ExIF Viewer local copy

接下来,我们必须添加插件资产:

localdir/$ svn add assets/*

然后再次签入更改:

localdir/$ svn ci -m 'Assets upload'

就是这样!跳到你的插件页面,开始推广你的作品!

ExIF Viewer plugin page

The final page of the ExIF Viewer plugin

发布新版本

在发布下一个版本之前,一定要记得更新 trunk/readme.txt 文件中的稳定标签字段和插件头注释中的版本号。当新版本准备好发布时,将文件复制到 /tags 的子文件夹中,并将子文件夹的名称设置为版本号(即 1.0.1):

localdir/$ svn cp trunk tags/1.0.1
> A tags/1.0.1

然后签入更改:

localdir/$ svn ci -m "tagging version 1.0.1"
> Adding         tags/1.0.1
> Adding         tags/1.0.1/my-plugin.php
> Adding         tags/1.0.1/readme.txt
> Committed revision 999999.

就是这样!新版本上线了。

编辑文件

有时,您可能需要做一些不需要新版本的小改动。首先,更新存储库的本地副本:

localdir/$ svn up
> At revision 999999.

然后编辑文件并检查更改:

localdir$ svn stat
> M       trunk/readme.txt

M 表示那些文件已经被修改。
下面,你可以看到两个版本之间有什么变化:

localdir$ svn diff

最后,签入对中央存储库的更改:

localdir$ svn ci -m "minor changes"
> Sending trunk/readme.txt
> Transmitting file data .
> Committed revision 999999.

摘要

无论你是决定发布一个商业插件的轻量级版本,还是发布这个插件来为社区做贡献,WordPress.org 目录都是分发你的作品的最好地方。它给你一个广泛的曝光,并提供了一些专业的工具来分发和推广你的插件。

如果你觉得你的销售和营销技能不够强,一定要看看 Bridget Willard 的“如何营销你的插件”来了解更多关于如何更好地销售你的插件。

那么,你考虑过这个机会吗?下面和我们分享一下你的经验。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

您应该知道的 20 多个基本 Python 命令

原文:https://kinsta.com/blog/python-commands/

Python 是目前最流行的编程语言之一。这是一种强大而简单的语言,几乎可以在任何开发环境中使用。

2021 年栈溢出调查显示 Python 是大多数开发者最想使用的编程语言。

Python is the most popular language with 19.04%, Typescript follows with 15.29%, and finishing the top 3, JS with 14.59%.

Stack Overflow survey.

You'll want to bookmark this one for later & save yourself some time in your next project ✅Click to Tweet

感谢像 Jupyter Notebook、Google Colaboratory 和在线编译器这样的工具,您可以开始使用这种语言,而不必担心安装任何东西。

然而,如果你想更进一步,享受 Python 这样的通用语言的真正力量(特别是通过创建复杂的应用),迟早你需要学会使用 CLI,或者命令行界面。

大多数开发人员都认为,学习 Python 最令人生畏的部分之一是 CLI。但是只需要几个命令,你马上就能掌握它。

在本文中,您将学习 Python 开发中最有用的命令。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

什么是命令行界面?

命令行界面(通常缩写为 CLI)是一种基于文本的程序,用于运行程序和执行与操作系统(OS)相关的任务,如创建和管理文件。

CLI 以命令的形式接受来自键盘的输入,并将它们传递给 shell 或命令解释器。这些 shells 解释用户给出的命令,执行它们并返回一个结果,这个结果通常被称为输出。

CLI 可以执行不同的 shells。这个截图展示了两个不同的 CLI,一个使用 Python shell,另一个使用 Bash:

Python and Bash shells opened in two different CLIs showing off the output of the print and neofetch commands.

Python and Bash shells.

这两个概念经常被混淆,所以下面是分类:

  • CLI 是一个基于文本的界面,您可以在这里输入命令并获得这些命令的输出。它可以执行不同的外壳。
  • 一个外壳是一个能够与操作系统交互的命令解释器。

信不信由你,你的系统运行的每个程序都包含一个命令。你每天交互的窗口( GUI )是由触发命令的绑定组成的,这些命令让你与操作系统进行交互。

信息

命令只不过是给计算机操作系统的特定命令。

Python 开发需要 CLI 吗?

要成为一名高效的全栈开发者,你需要对命令行有扎实的了解。这是因为大多数后端框架需要直接与 CLI 进行某种形式的交互,如果你打算自己部署一个应用程序,命令行将是你最好的朋友。

现在,你可以从无数的在线服务中运行 Python,也可以从 ide 中运行 Python,这使得你的程序执行起来更加容易。但是如果你对 web 开发——尤其是后端、任务自动化、区块链、通过 SSH 使用远程计算机,或者管理像 Docker 这样的 Python 友好工具,你肯定需要使用 CLI。

事实上,Python 有很多构建 CLI 应用程序的库,比如 Typer、Argsparse 和 Click。您可以从一名 CLI 用户变成自己 CLI 应用程序的创建者!这展示了 CLI 环境和 Python 之间的紧密联系。

一旦你掌握了 CLI,作为一名 Python 程序员执行你的任务就会容易得多,而且你会看到使用其他编程语言如 PHP 、C、C++或 Java 时的优势。

CLI 简介

根据您运行的操作系统,您会发现使用命令行的方式有所不同。由于不同的文件组织结构和默认命令外壳,每个操作系统都有自己打开 CLI 并与之交互的方式。

让我们来看看开发人员最常用的三种操作系统:Windows、Mac 和 Linux。

Windows 操作系统

Windows 是最受欢迎的桌面操作系统,主要是因为它的价格和易用性。如果要在 Windows 中访问 CLI,必须打开程序“命令提示符”或“Windows Powershell”。

请记住,Windows 使用\而不是/作为路径。在浏览目录时,您应该记住这一点。

同样在 Windows 上,您可以选择安装 Git Bash ,这是一个命令行,模拟 Windows 中 Bash shell 的行为。这将使下面显示的大多数 Unix 命令与您的系统兼容。

苹果个人计算机

至于 Mac,命令行可以从名为“终端”的内置应用程序中访问。您可以使用 Launchpad 搜索它,或者在“应用程序”下的“实用工具”文件夹中找到它。

Linux 操作系统

在 Linux 上,根据您使用的发行版,您有许多不同的选项,但是命令“Ctrl + Alt + T”通常会触发系统中的默认终端。

现在,您应该有一个类似于下图所示的窗口:

 Manjaro Linux CLI showing system status.

CLI.

20 多个对 Python 开发最有用的 CLI 命令

一旦您打开了 CLI,就该开始研究顶级 shell 命令了,这将使您作为 Python 开发人员的生活变得更加轻松。

安装命令

您可能已经偶然发现了一百万种安装 Python 的方法。但有时,只需一个命令就可以方便得多。

下面是不同的命令,可以帮助你在不同的操作系统上安装 Python。

1.巧克力吗

在 Windows 上,默认情况下没有软件包管理器。解决这个问题的一个选择是 Chocolatey ,它为你提供了直接从命令行安装的程序——显然包括 Python

在运行以下命令之前,请确保您安装了 Chocolatey :

choco install python --pre 

2.家酿和 Pyenv

macOS 默认安装了 Python 2.7。然而,Python 2.7 现在已被弃用。整个社区都转向了 Python 3。为了有效地管理您的 Python 版本,您可以使用类似于 pyenv 的程序。

打开一个命令行,用下面的命令安装最新版本的 Homebrew (一个类似 Chocolatey 的包管理器):

/bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

然后,您可以用这个简单的命令安装 pyenv:

brew install pyenv

您可以安装特定的 Python 版本,并将其设置为全局 Python 可执行文件,而不是 Python 2:

pyenv install 3.10 # Version you want
pyenv global 3.10.4 # Sets that version as default

现在,如果您调用 Python,它将是您用 pyenv 设置的版本:

python
# Python 3.10.4 ....
# >>>

3.apt、pacman 和 dnf

随着 Python开源软件的广泛使用,大量的 Linux 发行版都预装了 Python。如果您的系统没有,您可以用一个包管理器来安装 Python。

在基于 Debian 的发行版(Ubuntu、Linux Mint、Kali Linux)中,您将使用 apt,它代表“高级打包工具”:

sudo apt update
sudo apt install python3

此外,如果想将 Python 3 设置为默认的 Python 解释器,可以使用以下命令:

sudo apt install python-is-python3

在基于 Arch 的发行版中,您可以使用官方的包管理器 pacman:

sudo pacman -S python

在 Fedora 和基于 RPM 的 Linux 发行版(Red Hat,CentOS)中,您使用 dnf:

sudo dnf install python3

解释器命令

让我们快速回顾一下 Python 命令及其包管理器 pip 的主要标志——命令行选项。

4.大蟒

python命令有几个标志,表示修改代码执行行为的选项。

首先,要执行一个 Python 文件,只需调用解释器并添加文件名,包括.py扩展名:

python helloworld.py

如果您需要记住标志的作用,您可以在以下三种演示中使用help标志:

python -?
python -h
python --help

要打印(查看)您正在运行的 Python 版本,请使用以下命令:

python -V
python --version

如果您想在不打开和编辑.py文件的情况下运行 Python 代码,您可以使用命令标志直接从终端执行它:

# Hello, World!
python -c "print('Hello, World!')"

m标志将 Python 模块作为脚本执行。当你想用内置的 venv 模块创建一个虚拟环境时,这真的很有用:

python -m venv .venv

5.点

pip 命令在 Python 包索引(PyPI)中查找包,解析依赖关系,并安装您指定的包版本。

要安装一个 Python 包,你只需输入pip和你想安装的包的名字。

以下命令将安装软件包的最新版本:

pip install django

如果您需要特定的版本,请运行以下命令:

# pip install package==version
pip install django==4.0.4

当处理协作项目时,您需要跟踪依赖关系,通常是通过需求文件。使用r标志,您可以从一个文本文件中读取和安装软件包:

pip install -r requirements.txt

另一个常用的特性是freeze标志。它用于输出您在环境中安装的软件包版本列表。您可以使用它将您的依赖项输出到一个需求文件中:

pip freeze >> requirements.txt

权限命令

Python 确实擅长脚本和文件处理。要处理这些任务,您需要了解一些权限在您的操作系统中是如何工作的。

6.苏多,鲁纳斯

在基于 Unix 的系统(macOS,Linux,BSD)中,你必须有超级用户权限来执行某些任务,比如安装一个程序,就像我们上面做的那样。

sudo 命令允许您短暂地获得管理员权限来执行这些命令之一。

下面是一个全局安装 ueberzug(一个图像预览 Python 包)的例子:

sudo pip install ueberzug

Windows 的等效程序是 Runas ,它以不同用户或管理员的身份执行脚本:

runas /noprofile /user:Administrator cmd

还有其他类似 Gsudo 的项目,这使得权限提升过程比其他内置的 Windows 命令更容易:

:: Installs gsudo
choco install gsudo

:: Reads a file named MySecretFile.txt
gsudo type MySecretFile.txt

7.chmod

[chmod](https://linux.die.net/man/1/chmod)用于改变 Unix 中文件和目录的权限。

一种常见的用法是使 Python 脚本可执行:

# Makes mypythonscript.py executablechmod +x
mypythonscript.py

在您创建了一个可执行脚本之后,您可以使用./符号直接运行它:

# Runs the script
./mypythonscript.py

导航命令

在命令行界面中导航文件系统是 Python 开发人员的日常任务。以下是使用 Python 编程时用于导航系统的一些基本命令。

8. ls, dir

要列出一个目录(文件夹)的内容,必须使用ls (Unix)或dir (Windows)命令。这可能是您第一次遇到 CLI 时学到的第一条命令。

下面是使用的语法:

ls # Shows the contents of the working directory
ls mydirectory

下面是本地文件系统中文件夹内容的一个示例:

ls test_python/
# classes_error.py radius.py test-Django

这个命令有许多有用的标志。事实上,查看隐藏文件(开头带点的文件)以及每个文件的模式、大小和日期通常会使用ls -al的别名:

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

alias ls="ls -al"

# Results
total 20
drwx------ 3 daniel daniel 4096 ene 16 19:13 .
drwxr-xr-x 36 daniel daniel 4096 may 17 22:18 ..
-rw------- 1 daniel daniel  32 nov 17 2020 classes_error.py
-rw------- 1 daniel daniel 327 nov 10 2020 radius.py
drwx------ 4 daniel daniel 4096 ene 16 01:07 test-Django

至于 Windows,您可以使用 Git Bash 来使用ls,也可以使用内置的[dir](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dir)命令:

dir

9.显示当前工作目录

pwd代表“打印工作目录”,它的作用就是:给出你所在目录的完整路径:

pwd
# /home/daniel/github/HTML-site/images

如果您曾经迷失在终端中,这个命令是您的救命稻草。

您可以通过使用不带参数的cd命令在 Windows 中获得相同的输出(注意,Unix 中的相同命令会将您带到主目录):

# Only on Windows
cd
# D:\Folder\subFolder

10.丙酸纤维素

用图形文件管理器复制文件很直观,但效率很低。使用此命令,您可以在系统上复制任何类型的文件:

cp old_file.txt copy_old_file.txt

要复制一个目录的所有内容,必须使用cp -r:

cp -r originaldirectory/ newdir

Windows 中的cp对应的是copy:

copy old_file.txt copy_old_file.txt /a

11.猫,类型

要在终端中打印文本文件的内容而不使用编辑器打开文件,您可以在 Unix 上使用catmoreless,在 Windows 上使用type:

cat old_file.txt # Unix
type old_file.txt # Windows

# Content
Hi there I hope you're enjoying the article ...
as much as I've enjoyed writing it!
End of the sample.

12.mv,移动

mv命令将文件和目录从一个目录移动到另一个目录——基本上是剪切和粘贴——或者在目标不存在的情况下重命名文件:

# Rename files
mv source_file.txt renamed_file.txt
# File to another directory
mv renamed_file.txt newdir/

您还可以使用模式匹配来移动文件。例如,将所有的.py文件移动到另一个文件夹:

mv *.py mypythondir/

Windows 上的一个等效命令是[move](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/move),其功能与上面的命令几乎相同:

# Windows
move source_file.txt renamed_file.txt

13.特拉华州 rm

您可以使用rm命令删除文件和目录。

要删除一个文件,而不是一个目录,您可以使用:

rm file_to_remove.txt

如果你想删除一个空目录,你可以使用递归(-r)标志:

rm -r dir_to_remove/

要删除包含内容的目录,可以使用 force ( -f)和递归标志:

rm -rf dir_with_content/

以类似的形式,你可以在 Windows 上找到del。更加小心,因为这个命令没有上面看到的阻止标志:

del \mywindowsdir

信息

小心使用这个命令。一旦你删除了一些东西,就很难恢复。

14.出口

一旦你完成了你的 Python 编程,你应该能够退出你的 shell 会话。在大多数情况下,这也会关闭您正在使用的终端:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

exit

请注意,该命令在 Windows 和 Unix 上都有效。

命令行编辑器

一旦你习惯了命令行,你会发现改变窗口甚至使用鼠标来编辑你的代码会更慢。

在命令行中编写代码不仅是节省时间的好方法,还会让你在队友中看起来像个超级英雄!

下面是一些最常用的命令行编辑器。

15. Vim/Neovim

Vim 及其后代 Neovim 是基于键盘的文本编辑器,主要用于命令行。根据 2021 年栈溢出调查,他们在开发者最喜爱的编辑器中排名第 4 和第 1。

Survey results show Neovim as the most loved editor and Vim in the 4th position.

Favorite code editors.

Vim 预装在 Linux 和 macOS 上。事实上,当与服务器交互时,它是你最常遇到的编辑器。在 Windows 上,你需要使用 Vim 页面上的可执行安装程序来安装它。

现在,只需在命令行中键入 Vim 的名称,就可以享受它的强大功能:

vim

这将触发一个基于文本的界面,在 Python 中编码时,您可能需要的每个动作都有多个键盘组合。

Vim 有一个陡峭的学习曲线,但一旦你掌握了它,你不会很快转向其他东西。

Vi IMproved.

信息

要退出 Vim,请按“Escape”并键入:q

16.毫微;纤(10 的负九次方)

Nano 是另一个命令行文本编辑器,主要用于快速编辑。

假设您在代码中引入了一个语法错误,但不想打开编辑器来纠正它。Nano 帮助您直接从 CLI 修复它:

nano

信息

如果上面的命令出现“未知命令”错误,返回并遵循完整的安装过程

17.Emacs

Emacs 是你能找到的最具可扩展性和可定制性的文本编辑器之一。它有一整节专门介绍 Python 编程,在这里你会发现大量的插件来增强你的开发体验。

Emacs 在几乎所有的操作系统中都有,所以如果你还没有安装的话,看看下载说明

要从命令行类型打开 Emacs,使用 no window 系统标志(-nw):

emacs -nw

开发工具

Python 开发不仅意味着编码,还意味着处理额外的工具,如虚拟环境、版本控制系统和部署工具。

通过学习下面的命令,你将在用 Python 开发任何类型的应用程序时获得优势。

18.virtualenv/venv

虚拟环境是 Python 开发中使用的一项关键技术。有了它们,您可以将不同项目中使用的包隔离到一个轻量级文件夹中,通常命名为.venv

使用 Python 3.3 或更高版本,您可以使用内置的 venv 模块来创建虚拟环境:

# .venv being the name of the virtual environment
python -m venv .venv

与内置选项相比,virtualenv 是一个速度更快、可扩展性更强的外部项目。要创建虚拟环境,首先安装 virtualenv 软件包:

# Installs virtualenv
pip install --user virtualenv

# Creates a .venv virtual environment
virtualenv .venv

接下来,您需要激活虚拟环境。在 Windows 上,根据您使用的是 cmd 还是 PowerShell,运行以下命令之一(推荐):

:: PowerShell
.venv\Scripts\Activate.ps1
:: Cmd
.venv\Scripts\activate.bat

在 Linux 或 macOs 上:

source .venv/bin/activate

19.饭桶

版本控制是软件开发中最重要的实践之一。它允许我们跟踪所有的代码修改,与其他开发人员合作,并查看整个开发过程的清晰画面。

Git 是迄今为止使用最多的版本控制系统。你可以从它的下载页面安装它。

安装完成后,您可以使用以下命令打开一个终端并初步了解所有可用选项:

git help

要创建存储库,请使用git init并键入您的存储库的名称:

git init name_repository
Initialized empty Git repository in /home/daniel/name_repository/.git/

注意,这只会创建一个本地 Git repo。如果你想有一个远程存储库来在线存储你所有的变更,你应该使用像 GitHub 或者 BitBucket 这样的平台。

要克隆一个远程存储库,您将使用git clone和存储库的源。在下面的例子中,我们通过 SSH 克隆了一个 GitHub repo :

git clone [[email protected]](/cdn-cgi/l/email-protection#74131d0034131d001c01165a171b19):DaniDiazTech/HTML-site.git
...
Cloning into 'HTML-site'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 24 (delta 6), reused 21 (delta 4), pack-reused 0
Receiving objects: 100% (24/24), 4.98 MiB | 438.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.

20.码头工人

Docker 使得将 Python 应用程序打包成轻量级、可移植、自给自足的容器更加容易。它有助于开发和部署,允许所有合作者使用相同的设置。

要使用 Docker,您必须严格遵循在 Get Docker 页面上为您的操作系统显示的安装过程。

要列出可用的 Docker 命令,请运行以下命令:

docker help 

在这个狭窄的部分很难解释如何运行 Docker compose,所以一定要查看官方文档。

21.可做文件内的字符串查找

Grep 是一个基本的命令行工具,用于纯文本文件中的模式匹配。

常见的用法是找出一个单词在文件中重复的次数:

grep -ic python pythondocument.txt
2

在上面的例子中,我们得到了 Python(不区分大小写)在pythondocument.txt文件中出现的次数。

grep 的 Windows 等价物是 findstr 。然而,它不是完全相同的程序。您可以使用 Git Bash 在 Windows 中利用 grep:

findstr /i /C python pythondocument.txt
2

22.HTTPie

HTTPie 是一个命令行 HTTP 客户端,它使得与 web 服务的交互更加容易。例如,您可以使用它来测试您的 Python APIs,或者与第三方站点进行交互。

这个 CLI 工具几乎在每个包管理器中都有,如 HTTPie 的官方文档所示。但是,它也可以作为 Python 包使用,所以您可以用 pip 安装它。

pip install httpie

以下是查询远程 API 的方法——在本例中,是 GitHub API :

http GET [https://api.github.com/users/danidiaztech](https://api.github.com/users/danidiaztech)
HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
...

23.砰

默认情况下,几乎任何操作系统都可以使用 CLI 命令。它的工作原理是向一个 IP 地址发送数据包,测试传输数据和接收响应需要多长时间,然后以毫秒为单位显示结果

此命令主要用于验证两台机器之间的连接,即您的机器和 web 服务器上的 Python 应用程序:

ping kinsta.com
PING kinsta.com(2606:4700:4400::ac40:917d (2606:4700:4400::ac40:917d)) 56 data bytes
64 bytes from 2606:4700:4400::ac40:917d (2606:4700:4400::ac40:917d): icmp_seq=1 ttl=50 time=686 ms

命令参考表

下面,您可以找到我们讨论过的每个命令的快速参考:

命令 用途
choco 在 Windows 上安装软件包
brew macOS 软件包管理器
apt, pacman, dnf 不同 Linux 发行版上的软件包管理器
python 运行 Python 解释器
pip Python 包管理器
sudo, runas 用于扩展权限的 Unix 和 Windows 程序
chmod 更改文件权限
ls 列出目录的内容
pwd 打印工作目录
cp 复制文件和目录
cat 打印文件内容
mv, move 移动(重命名)文件和目录
rm, del 删除文件和目录
exit 退出当前 shell 会话
vim, neovim 高效的文本编辑
nano 用于快速编辑的文本编辑器
emacs 最可定制的编辑器
virtualenv, venv 虚拟环境生成器
git 版本控制系统
docker 容器化应用
grep 模式匹配实用程序
http Web 服务测试实用程序
ping 测试网络连接
kill 终止程序

摘要

Python 是最容易学习的编程语言之一。您将发现的唯一绊脚石是当您进入命令行时,没有理解您将需要的命令。
大多数开发者都认为学习 Python 最令人生畏的部分之一就是 CLI。😅但是只需要几个命令,你马上就能掌握它💪 点击发送推文
在这篇文章中,您了解了命令行以及一些用于 Python 开发的最流行的命令。

您发现 Python 开发中还有哪些有用的命令?在下面的评论中分享吧!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

Python 面向对象编程(OOP)初学者指南

原文:https://kinsta.com/blog/python-object-oriented-programming/

编程是一门艺术。和艺术一样,选择合适的画笔和颜料对于创作出最好的作品至关重要。Python 面向对象编程就是这样一种技能。

选择正确的编程语言对任何项目来说都是至关重要的一部分,它可能导致流畅愉快的开发,也可能导致一场彻底的噩梦。因此,如果您使用最适合您的用例的语言,那将是最好的。

这是学习 Python 面向对象编程的主要原因,Python 也是最流行的编程语言之一。

让我们学习吧!

一个示例 Python 程序

在深究此事之前,让我们提出一个问题:你有没有写过类似下面这样的 Python 程序?

secret_number = 20

while True:
   number = input('Guess the number: ')

   try:
       number = int(number)
   except:
       print('Sorry that is not a number')
       continue

   if number != secret_number:
       if number > secret_number:
           print(number, 'is greater than the secret number')

       elif number < secret_number:
           print(number, 'is less than the secret number')
   else:
       print('You guessed the number:', secret_number)
       break 

这个代码是一个简单的数字猜测。尝试将其复制到 Python 文件中,并在您的系统中运行。它完美地实现了它的目的。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

但是这里出现了一个大问题:如果我们要求你实现一个新特性会怎么样?它可能很简单,例如:

"如果输入的是密码的倍数,给用户一个提示."

随着特性数量的增加,以及嵌套条件总数的增加,程序会迅速变得复杂和繁重。

这正是面向对象编程试图解决的问题。

学习 Python OOP 的要求

在开始面向对象编程之前,我们强烈建议您对 Python 基础有一个牢固的掌握。

将主题归类为“基本”可能很困难。正因为如此,我们设计了一个备忘单,其中包含了学习 Python 中面向对象编程所需的所有主要概念。

*** 变量:指向特定对象的符号名(通过文章我们会看到对象是什么意思)。

  • 算术运算符:加法(+)、减法(-)、乘法(*)、除法(/)、整数除法(//)、模(%)。

  • 内置数据类型:数值型(整数、浮点、复数)、序列型(字符串、列表、元组)、布尔型(真、假)、字典、集合。

  • 布尔表达式:结果为假的表达式。

  • 条件:计算一个布尔表达式,并根据结果进行一些处理。由 if/else 语句处理。

  • 循环:代码块的重复执行。当循环时,或可以是。****

  • 功能:有组织的可重用代码块。你用关键字 def 创建它们。

  • 参数:传递给函数的对象。例如:sum([1, 2, 4])

  • 运行 Python 脚本:打开终端或命令行,输入“python <文件名>

  • 打开一个 Python Shell :打开一个终端,根据你的系统键入python或者python3

现在你已经非常清楚这些概念了,你可以继续理解面向对象编程了。

Python 中的面向对象编程是什么?

面向对象编程(OOP)是一种编程范式,在这种编程范式中,我们可以将复杂的问题视为对象。

范式是为解决问题提供基础的理论。

所以当我们谈论 OOP 时,我们指的是我们用来解决对象问题的一组概念和模式。

Python 中的对象是数据(属性)和行为(方法)的单一集合。你可以把物体想象成你周围真实的东西。例如,考虑计算器:

A calculator can be an object.

A calculator can be an object.

您可能注意到,数据(属性)总是名词,而行为(方法)总是动词。

这种划分是面向对象编程的核心概念。您构建存储数据并包含特定种类功能的对象。

为什么我们在 Python 中使用面向对象编程?

OOP 允许你创建安全可靠的软件。许多 Python 框架和库使用这种范式来构建他们的代码库。一些例子是 Django、Kivy、pandas、NumPy 和 TensorFlow。

让我们看看在 Python 中使用 OOP 的主要优势。

Python OOP 的优势

以下原因将使您选择在 Python 中使用面向对象编程。

所有现代编程语言都使用面向对象程序设计

这种范式是独立于语言的。如果你学习了 Python 中的 OOP,你将能够在下面使用它:

  • Java 语言(一种计算机语言,尤用于创建网站)
  • PHP(确保阅读 PHP 和 Python 之间的比较)
  • 红宝石
  • Javascript
  • C#
  • 我的锅

所有这些语言要么本身就是面向对象的,要么包含面向对象功能的选项。如果你想在 Python 之后学习它们中的任何一种,会更容易——你会发现处理对象的语言之间有许多相似之处。

OOP 允许你更快地编码

编码更快并不意味着写更少的代码行。这意味着您可以在更短的时间内实现更多的功能,而不会影响项目的稳定性。

面向对象编程允许你通过实现抽象来重用代码。这个原则使你的代码更加简洁易读。

你可能知道,程序员花在阅读代码上的时间比写代码多得多。这就是易读性总是比尽可能快地展示功能更重要的原因。

Productivity decreases with not legible code

Productivity decreases with not legible code

稍后您将看到更多关于抽象原则的内容。

OOP 帮助你避免意大利面条代码

您还记得本文开头的数字猜测程序吗?

如果您继续添加特性,将来会有许多嵌套的 if 语句。这种纠缠在一起的无穷无尽的代码行被称为意大利面条式代码,您应该尽可能地避免它。

OOP 为我们提供了压缩对象中所有逻辑的可能性,因此避免了长段嵌套的 T2 if ' s T3。

OOP 改善了你对任何情况的分析

一旦你对 OOP 有了一些经验,你就能把问题想象成小而具体的对象。

这种理解导致了快速的项目初始化。

结构化编程与面向对象编程

结构化编程是初学者最常用的范例,因为它是构建小程序最简单的方式。

它涉及到顺序运行 Python 程序。这意味着你给计算机一个任务列表,然后从上到下执行它们。

让我们看一个咖啡店程序的结构化编程的例子。

small = 2
regular = 5
big = 6

user_budget = input('What is your budget? ')

try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()

if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small) 

上面的代码充当咖啡店的小贩。它会询问你的预算,然后“卖给”你你能买到的最大的咖啡。

尝试在终端运行。它将根据您的输入逐步执行。

这段代码运行良好,但是我们有三个问题:

  1. 它有很多重复的逻辑。
  2. 它使用了许多嵌套的 if 条件句。
  3. 很难阅读和修改。

OOP 的发明是为了解决所有这些问题。

让我们看看上面用 OOP 实现的程序。如果你还不明白,也不要担心。只是为了比较结构化编程和面向对象编程。

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price

        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}/kinsta-auto-toc>)

                        exit('Thanks for your transaction') 

注:以下所有概念将通过文章进行更深入的解释。

上面的代码表示一个名为“Coffee”的它有两个属性——“名称”和“价格”——它们都在方法中使用。主要方法是“销售”,它处理完成销售过程所需的所有逻辑。

如果你试图运行那个类,你不会得到任何输出。这主要是因为我们只是声明了咖啡的“模板”,而不是咖啡本身。

让我们用下面的代码实现这个类:

small = Coffee('Small', 2)
regular = Coffee('Regular', 5)
big = Coffee('Big', 6)

try:
   user_budget = float(input('What is your budget? '))
except ValueError:
   exit('Please enter a number')

for coffee in [big, regular, small]:
   coffee.sell(user_budget) 

这里我们制作“coffee”类的实例、或 Coffee 对象,然后调用每种咖啡的“sell”方法,直到用户可以负担任何选项。

用这两种方法我们会得到相同的输出,但是我们可以用 OOP 更好地扩展程序功能。

下表比较了面向对象编程和结构化编程:

| OOP | 结构化编程 |
| 更易于维护 | 难以维护 |
| 不要重复你自己(干)的方法 | 许多地方重复的代码 |
| 许多地方重用了小块代码 | 在几个地方有大量的代码 |
| 目标方法 | 分组码方法 |
| 更容易调试 | 更难调试 |
| 巨大的学习曲线 | 更简单的学习曲线 |
| 用于大型项目 | 针对简单程序进行了优化 |

总结范式比较:

  • 这两种范式都不是完美的(在简单的项目中使用 OOP 可能是压倒性的)。
  • 这只是解决问题的两种方式;外面还有其他人。
  • OOP 用于大型代码库,而结构化编程主要用于简单项目。

让我们继续讨论 Python 中的内置对象。

在 Python 中,一切都是对象

我们告诉你一个秘密:你一直在使用 OOP,却没有察觉到。

即使在 Python 中使用其他范式,您仍然使用对象来做几乎所有的事情。

那是因为,在 Python 中,一切都是对象。

记住对象的定义:Python 中的对象是数据(属性)和行为(方法)的单一集合。

它匹配 Python 中的任何数据类型。

字符串是数据(字符)和行为( upper()lower() 等)的集合..).同样适用于整数浮点布尔列表、和字典。

在继续之前,让我们回顾一下属性和方法的含义。

属性和方法

属性是对象内部的内部变量,而方法是产生某种行为的 T2 函数。

让我们在 Python shell 中做一个简单的练习。你可以在你的终端中输入pythonpython3来打开它。

Python 3.9  shell running on Linux OS

Python shell

现在,让我们使用 Python shell 来发现方法和类型。

>>> kinsta = 'Kinsta, Premium Application, Database, and Managed WordPress hosting'
>>> kinsta.upper()
'KINSTA, PREMIUM APPLICATION, DATABASE, AND MANAGED WORDPRESS HOSTING' 

在第二行中,我们调用一个字符串方法, upper() 。它以大写形式返回字符串的内容。但是,它不会改变原始变量。

>>> kinsta
'Kinsta, Premium Application, Database, and Managed WordPress hosting' 

让我们深入研究使用对象时有价值的函数。

type() 函数允许你获取一个对象的类型。“类型”是对象所属的类。

>>> type(kinsta)
# class 'str' 

函数的作用是:返回一个对象的所有属性和方法。让我们用 kinsta 变量来测试一下。

>>> dir(kinsta) ['__add__', '__class__',  ........... 'upper', 'zfill'] 

现在,试着打印这个对象的一些隐藏属性。

 >>> kinsta.__class__ # class ‘str’ e>

这将输出对象 kinsta 所属的类。所以我们可以说类型函数返回的唯一东西是对象的 class 属性。

您可以试验所有的数据类型,直接在终端上发现它们的所有属性和方法。你可以在官方文档中了解更多关于内置数据类型的信息。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

Python 中的第一个对象

一个就像一个模板它允许您根据自己定义的属性和方法创建自定义对象。

你可以把它想象成一个切饼器,你修改它来烘烤完美的饼干(物体,而不是跟踪饼干),具有定义好的特征:形状、大小等等。

另一方面,我们有个实例。一个实例是一个类的单个对象,有唯一的内存地址。

A class cookie with multiple instances, cookie1, cookie2, and cookie3

Instances in Python

现在你知道什么是类和实例,让我们定义一些!

要在 Python 中定义一个类,可以使用 class 关键字,后跟其名称。在本例中,您将创建一个名为 Cookie 的类。

注意:在 Python 中,我们使用 [camel case 命名约定](https://en.wikipedia.org/wiki/Camel_case#:~:text=Camel case (sometimes stylized as,word starting with either case.)来命名类。

class Cookie:
	pass 

打开 Python shell,输入上面的代码。要创建一个类的实例,只需键入它的名称和后面的括号。这和调用函数的过程是一样的。

cookie1 = Cookie() 

祝贺您——您刚刚在 Python 中创建了第一个对象!您可以使用以下代码检查其 id 和类型:

id(cookie1)
140130610977040 # Unique identifier of the object

type(cookie1)
<class '__main__.Cookie'> 

可以看到,这个 cookie 在内存中有一个惟一的标识符,它的类型是 Cookie

你也可以用 isinstance() 函数检查一个对象是否是一个类的实例。

isinstance(cookie1, Cookie)
# True
isinstance(cookie1, int)
# False
isinstance('a string', Cookie)
# False 

构造函数方法

init() 方法也被命名为“构造函数”。每当我们实例化一个对象时,它就被称为 Python。

构造函数用它需要存在的最小参数集创建对象的初始状态。让我们修改一下 Cookie 类,这样它就可以在其构造函数中接受参数。

class Cookie:
	# Constructor
	def __init__(self, name, shape, chips='Chocolate'):
		# Instance attributes
		self.name = name
		self.shape = shape
		self.chips = chips 

Cookie 类中,每个 Cookie 都必须有名称、形状和碎片。我们把最后一个定义为“巧克力”

另一方面, self 指的是类的实例(对象本身)。

尝试将该类粘贴到 shell 中,并像往常一样创建一个 cookie 实例。

cookie2 = Cookie()
# TypeError 

你会得到一个错误。这是因为您必须提供对象生存所需的最少数据集——在本例中, nameshape ,因为我们已经将 chips 设置为“巧克力”

cookie2 = Cookie('Awesome cookie', 'Star') 

要访问实例的属性,必须使用点符号。

cookie2.name
# 'Awesome cookie'
cookie2.shape
# 'Star'
cookie2.chips
# 'Chocolate' 

目前, Cookie 类还没有任何有趣的东西。让我们添加一个示例方法 bake() 让事情变得更有趣。

class Cookie:
	# Constructor
	def __init__(self, name, shape, chips='Chocolate'):
		# Instance attributes
		self.name = name
		self.shape = shape
		self.chips = chips

	# The object is passing itself as a parameter
	def bake(self):
		print(f'This {self.name}, is being baked with the shape {self.shape} and chips of {self.chips}')
		print('Enjoy your cookie!') 

要调用一个方法,使用点符号并作为函数调用它。

cookie3 = Cookie('Baked cookie', 'Tree')
cookie3.bake()
# This Baked cookie, is being baked with the shape Tree and chips of Chocolate
Enjoy your cookie! 

Python 中面向对象的四大支柱

面向对象编程包括四个主要支柱:

1.抽象

抽象向用户隐藏了应用程序的内部功能。用户可以是最终客户或其他开发人员。

我们可以在日常生活中找到抽象概念。例如,你知道如何使用你的手机,但你可能不知道每次你打开一个应用程序时手机里到底发生了什么。

需要一个给你带来竞争优势的托管解决方案吗?Kinsta 为您提供了令人难以置信的速度、一流的安全性和自动伸缩功能。查看我们的计划

再比如 Python 本身。你知道怎么用它来构建功能软件,即使不懂 Python 的内部工作原理也能做到。

对代码应用同样的方法允许你收集问题中的所有对象,并将标准功能抽象成类。

2.遗产

继承允许我们从一个已经定义的类中定义多个子类

它的主要目的是遵循干燥原则。通过将所有共享组件实现到超类中,您将能够重用大量代码。

你可以把它想象成现实生活中的基因遗传的概念。孩子(子类)是两个父母(超类)继承的结果。它们继承了所有的物理特征(属性)和一些常见的行为(方法)。

3.多态性

多态让我们稍微修改先前在超类中定义的子类的方法和属性。

字面意思是“多种形式”这是因为我们构建的方法名称相同,但功能不同。

回到之前的想法,孩子也是多态性的完美例子。它们可以继承一个已定义的行为 get_hungry() ,但方式略有不同,例如,每 4 小时而不是每 6 小时饿一次。

4.包装

封装是我们保护类中数据内部完整性的过程。

虽然 Python 中没有私有语句,但是你可以通过使用 Python 中的 mangling 来应用封装。有一些名为gettersetter的特殊方法允许我们访问独特的属性和方法。

让我们想象一个人类类,它有一个名为 _height 的独特属性。您只能在特定的约束条件下修改该属性(几乎不可能高于 3 米)。

构建区域形状解析器计算器

Python 最棒的一点是它让我们可以创建各种各样的软件,从 CLI(命令行界面)程序到复杂的 web 应用程序。

既然您已经学习了 OOP 的支柱概念,那么是时候将它们应用到实际项目中了。

注意:下面所有的代码都可以在这个 GitHub 库中获得。一个代码修订工具,帮助我们用 Git 管理代码版本。

您的任务是创建以下形状的面积计算器:

  • 平方
  • 矩形
  • 三角形
  • 六边形

形状基类

首先,创建一个文件 calculator.py 并打开它。既然我们已经有了要处理的对象,在一个类中抽象它们就很容易了

你可以分析一下共同特征,发现这些都是 2D 形状。因此,最好的选择是用一个方法 get_area() 创建一个类形状,每个形状将从该方法继承。

注意:所有的方法都应该是动词。那是因为这个方法被命名为 get_area() ,而不是 area()

class Shape:
	def __init__(self):
		pass

	def get_area(self):
		pass 

上面的代码定义了这个类;然而,里面还没有什么有趣的东西。

让我们实现这些形状的标准功能。

class Shape:
	def __init__(self, side1, side2):
		self.side1 = side1
		self.side2 = side2

	def get_area(self):
		return self.side1 * self.side2

	def __str__(self):
		return f'The area of this {self.__class__.__name__} is: {self.get_area()}' 

让我们来分解一下我们对这段代码做了什么:

  • init 方法中,我们请求两个参数, side1side2 。这些将作为实例属性保留。
  • get_area() 函数返回形状的面积。在这种情况下,它使用的是矩形的面积公式,因为用其他形状更容易实现。
  • str() 方法和 init()一样,是一种“神奇的方法”。它允许您修改实例的打印方式。
  • 自我。classname 隐藏属性指的是类名。如果你正在处理一个三角形类,那么这个属性就是“三角形”

矩形类

因为我们实现了矩形的面积公式,所以我们可以创建一个简单的 Rectangle 类,它除了继承 Shape 类之外什么也不做。

要在 Python 中应用继承,您将像往常一样创建一个类,并用括号将您想要继承的超类括起来。

# Folded base class
class Shape: ...

class Rectangle(Shape): # Superclass in Parenthesis
	pass 

方形类

我们可以用 Square 类来很好地处理多态性

记住,正方形只是一个四边都相等的长方形。这意味着我们可以用同样的公式得到面积。

我们可以通过修改 init 方法来做到这一点,只接受一个作为参数,并将该边值传递给 Rectangle 类的构造函数。

# Folded classes
class Shape: ...
class Rectangle(Shape): ...

class Square(Rectangle):
	def __init__(self, side):
		super().__init__(side, side) 

如你所见,超函数参数两次传递给超类。换句话说,它将作为侧 1侧 2 传递给先前定义的构造函数。

三角形类

三角形是环绕它的长方形的一半大。

Relation between triangles and rectangles

Relation between triangles and rectangles (Image source: Varsity tutors).

所以我们可以从 Rectangle 类继承,修改 get_area 方法来匹配三角形面积公式,就是底乘以高的二分之一。

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...

class Triangle(Rectangle):
	def __init__(self, base, height):
		super().__init__(base, height)

	def get_area(self):
		area = super().get_area()
		return area / 2 

super() 函数的另一个用例是调用超类中定义的方法,并将结果存储为变量。这就是在 get_area() 方法内部发生的事情。

圆形类

你可以用公式 πr 求出圆的面积,其中 r 是圆的半径。这意味着我们必须修改 get_area() 方法来实现这个公式。

注意:我们可以从数学模块导入 π 的近似值

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …

# At the start of the file
from math import pi

class Circle(Shape):
	def __init__(self, radius):
		self.radius = radius

	def get_area(self):
		return pi * (self.radius ** 2) 

上面的代码定义了 Circle 类,它使用了不同的构造函数和 get_area() 方法。

虽然 Circle 继承了 Shape 类,但是你可以根据自己的喜好重新定义每一个方法。

正六边形类

我们只需要正六边形的一条边的长度来计算它的面积。它类似于 Square 类,我们只将一个参数传递给构造函数。

Hexagon area formula

Hexagon area formula (Image source: BYJU’S)

然而,这个公式是完全不同的,它暗示了平方根的使用。这就是为什么您将使用数学模块中的 sqrt() 函数。

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …
class Circle(Shape): …

# Import square root
from math import sqrt

class Hexagon(Rectangle):

	def get_area(self):
		return (3 * sqrt(3) * self.side1 ** 2) / 2 

测试我们的类

使用调试器运行 Python 文件时,可以进入交互模式。最简单的方法是使用内置的断点函数。

注意:该函数仅在 Python 3.7 或更新版本中可用。

from math import pi, sqrt
# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …
class Circle(Shape): …
class Hexagon(Rectangle): …

breakpoint() 

现在,运行 Python 文件并使用您创建的类。

$ python calculator.py

(Pdb) rec = Rectangle(1, 2)(Pdb) print(rec)
The area of this Rectangle is: 2
(Pdb) sqr = Square(4)
(Pdb) print(sqr)
The area of this Square is: 16
(Pdb) tri = Triangle(2, 3)
(Pdb) print(tri)
The area of this Triangle is: 3.0
(Pdb) cir = Circle(4)
(Pdb) print(cir)
The area of this Circle is: 50.26548245743669
(Pdb) hex = Hexagon(3)
(Pdb) print(hex)
The area of this Hexagon is: 23.382685902179844 

挑战

使用方法 run 创建一个类,用户可以选择一个形状并计算其面积。

当你完成挑战后,你可以向 GitHub repo 发送一个 pull 请求,或者在评论区发布你的解决方案。

Ready to start learning object-oriented programming in Python? ✅ You've come to the right place 😄Click to Tweet

摘要

面向对象编程是一种范式,在这种范式中,我们通过将问题视为对象来解决问题。如果你懂 Python OOP,你也可以在类似 JavaPHP 、Javascript、 C# 的语言中轻松应用。

在本文中,您了解了:

  • Python 中面向对象的概念
  • 面向对象相对于结构化编程的优势
  • Python 中面向对象编程的基础
  • 的概念以及如何在 Python 中使用它们
  • Python 中某个类的构造函数
  • Python 中的方法属性
  • 面向对象的四大支柱
  • 在一个项目中实现抽象继承、多态

现在轮到你了!

如果你喜欢这个指南,看看我们在 Python 教程上的帖子。

请在评论中告诉我们你对挑战的解决方案!别忘了看看我们的Python 和 PHP 的对比指南。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。**

2022 年学习 Python 的最佳方式(免费和付费 Python 教程)

原文:https://kinsta.com/blog/python-tutorials/

Python 的受欢迎程度不断提高,这主要是由于它在数据科学、机器学习和人工智能等新兴技术中的使用。它的高效性、多功能性和易学性也风靡了软件开发。

目前,Python 是 GitHub第二受欢迎的编程语言(仅次于 JavaScript)。无论您是想作为一个完全的初学者学习 Python,还是已经有了一些编码经验,并且想要提升自己的技能以获得更好的职业前景,这篇文章都适合您。

我们整理了一份最好的 Python 教程列表,包括免费和付费资源。

查看我们的视频指南最佳 Python 教程

Python 是什么?

Python Logo

Python logo.

Python 是由吉多·范·罗苏姆设计的开源高级编程语言。发布于 1991 年,这种编程语言的设计理念旨在提高代码可读性,这也是为什么它是最容易学习的语言之一。

Kinsta 把我宠坏了,所以我现在要求每个供应商都提供这样的服务。我们还试图通过我们的 SaaS 工具支持达到这一水平。

Suganthan Mohanadasan from @Suganthanmn

View plans

另外, Python 是一种面向对象的、反射的、函数式的、过程化的、结构化的语言。Python 的所有这些方法都有助于程序员为各种规模的项目编写逻辑清晰的代码。

到目前为止,Python 有三个主要版本,Python 3 是最新的。它还支持各种各样的库来简化代码的编写。

特征

Python 的特点是:

  • 开源与免费: Python 是开源的,你可以免费下载它的代码,供你的项目使用和修改。
  • 易学: Python 之所以变得流行,是因为与其他语言相比,它很容易学会。其简单的语法使用简单的英语,不太复杂。因此,它对开发人员友好并且易于编码。
  • 丰富的库: Python 的标准库非常丰富,包含丰富的模块和函数,可以帮助您更快地完成项目,而不是从头开始编写代码。您可以为图像处理、单元测试、CGI 等过程找到可重用的代码。例子包括 Django、Flask、NumPy 和 SciPy。
  • 可扩展: Python 是高度可扩展的,可以用不同的模块来扩展核心功能。例如,您可以向现有应用程序添加可编程接口。
  • 面向对象: Python 使用面向对象编程的概念,比如对象、类、继承、数据封装等等。
  • 解释简单,易于调试: Python 像 Java、C、C++一样线性执行代码。这样,就不需要编译,调试也变得容易了。
  • 动态类型:指定变量类型,如 char、int、double 等。在 Python 中是不需要的,因为它是在代码运行时决定的,而不是在开始时。因此,它简化了编程,减少了许多代码行。
  • 可移植: Python 使用可移植代码。因此,您可以在不同的平台上使用相同的代码,如 Windows、macOS、Unix 或 Linux。

你知道 Python 是第二流行的编程语言(仅次于 JavaScript)吗?🤓更有理由把它添加到你的编程工具箱🛠 点击推文

Python 用在哪里?

Python 是一种通用的编程语言。您可以将 Python 用于多种用途,包括:

  • Web 开发:由于其效率、速度和其他积极方面,Python 非常适合于 web 开发。随着像 Django 和 Flask 这样的扩展库的出现,这个过程变得更加易于管理。一些为此目的使用它的流行公司包括 Instagram、Reddit、优步和 Spotify。
  • 软件开发:使用 Python,你可以创建在你的设备上运行的软件程序和应用。很多 Python 包,比如 NumPy,Tkinter,SciPy 等。,简化软件开发程序。你也可以用科学和数字计算开发复杂的应用程序。一些使用它进行软件开发的大公司包括 Dropbox、PyChess、BitTorrent、Gramps 等。
  • 机器学习和人工智能:从搜索引擎和社交媒体到聊天机器人和虚拟助手,算法无处不在,并由机器学习和人工智能提供动力。Python 的专属库,如 SciPy、Seaborn、TensorFlow、NumPy、Pandas 等。,服务于这些目的。
  • 数据科学: Python 在数据科学中应用广泛。它有很多相关的库和框架,如 PyBrain、Bottle、Flask、web3py 等。,在数据科学中用于可视化和分析大量数据以及其他目的。它也有助于网络抓取,这对于商业来说已经变得相当重要。
  • 创建桌面图形用户界面:由于 Python 的模块化结构,它可以在各种操作系统上工作,并允许您利用高效的框架、模块或文本处理器来构建桌面图形用户界面,如 PyGUI、PyGtk、PyQt4、PyQt5 等。
  • 游戏开发:可以使用 PySoy(基于 Python 的 3D 游戏引擎)这样的 Python 库开发游戏。使用 Python 开发的游戏有迪士尼的《卡通小镇 Online》、《战地 2》、《燃烧的烦恼》等。

学习 Python 的 4 个好处

学习 Python 对你的职业前景有几个好处。让我们来找出“为什么要学 Python”这个问题的答案。

1.发展高效

Python 不仅易于学习和编码,而且还加速了整个开发过程。它有大量的框架、包、库和模块,不需要你从头开始做任何事情。

您还可以利用可重用代码来更快、更稳定地编写代码。它帮助您自动化标准流程,并节省时间来关注 web 和软件开发的逻辑和其他重要方面。

2.极其通用

Python 是一种高度通用的语言,这也是其流行和高度可用性背后的原因之一。从小型到大型项目,Python 的工作效率都是一样的。除了上面提到的用途,开发人员还将它用于深度学习、数据工程、过程自动化、物联网(IoT)等。

也就是说,它的多功能性可能是由于它支持大量的函数、方法、框架和库。Python 的可读性、流行性和可用性进一步鼓励了更多的库,使得这种语言更加用户友好。

3.对 Python 开发者的需求

随着 Python 在新兴技术中的普及和使用,市场上对 Python 开发人员的需求正在增加。它广泛应用于商业服务、保险、航空航天、零售、银行、金融、信息技术、咨询、医疗保健和硬件等领域。

使用 Python 的顶级公司有谷歌、美国宇航局、YouTube、Quora、IBM、惠普、高通和 Dropbox。而且他们还经常雇佣 Python 开发者。

2021 年,美国 Python 开发者的平均年薪为 110840 美元。所以,学习 Python 对你的职业生涯是有益的。

4.支持性社区

尽管有官方的 Python 文档可用,但有时您可能会被卡住,尤其是如果您是初学者。这个时候,一个支持性的社区是可以帮助你的。幸运的是,Python 有一个庞大的开发人员社区,如果您有疑问或问题,可以向它求助。

你可以找到在线论坛,比如 Stack Overflow、开源社区和本地聚会来探索这种语言。此外,还有许多专门针对 Python 的课程、教程、网站和其他资源(其中一些我们将在本文中讨论)。

如何循序渐进地学习 Python

即使你手上有最好的 Python 教程,如果你不知道学习 Python 的最佳方法,你可能也不会从中收获全部价值。这也是为什么我们要说学习 Python 的循序渐进的过程。

第一步:想想你为什么要学 Python

在你开始做一件事之前,首先要弄清楚你为什么要做这件事。这同样适用于学习 Python。必须有一些目标让你在整个旅程中保持动力;不然可能挺痛苦的挺过去。

弄清楚你为什么对 Python 感兴趣,是想提升自己的技能还是想成为一名 Python 开发人员。它可能是数据科学、ML、AI、建立网站、应用程序和游戏、工作自动化脚本、数据分析、网页抓取或任何其他东西。

一旦你设定了目标,继续下一步。

第二步:了解基础知识

毫无疑问地清楚了解 Python 基础知识。学习语法和基本的编程语言,如变量、数据类型、函数等。本文中提到的 Python 资源将在这一步帮助您。

然而,如果你只是浏览理论,它会变得乏味。这里的关键是练习和休息。

自己编写简单的代码,或者通过所选 Python 教程中给出的例子编写简单的代码。基础完成后,您可以进入高级主题。

第三步:将知识应用到项目中

基础之后,试着完成一个项目来实现你的知识。项目将释放你的潜力,帮助你学到更多,同时建立一个投资组合来展示潜在的雇主。

你可以在数据科学、ML、网站、移动应用、游戏、自动化脚本等方面创建结构化项目。你会发现很多关于结构化项目的资源,比如 Dataquest、Scikit-learn 文档、Bottle 教程、Codecademy、使用 Python 学习机器人技术,以及使用 Python 自动完成枯燥的工作,等等。

完成高级主题后,继续您自己创建的项目。使用你可以得到的资源,但是要做你想用 Python 做的事情。

此时,您一定已经学会了查找错误并调试它们。你可以扩展以前的项目,寻找开源平台进行贡献,在非营利组织做志愿者,在 GitHub 上做贡献,等等。

第四步:与他人合作

与其他学习者和专家合作将有助于你扩大知识面,讨论问题,学习应用到项目中的技巧和诀窍。您可以在各种 Python 社区、论坛、聚会和活动中遇到他们。一些例子包括堆栈溢出、Python.org、Reddit 和 Sololearn。

第五步:坚持练习

学习是一个持续的过程。因此,在你完成了所有的步骤后,要不断练习你所学到的东西。作为全职 Python 开发人员或业余爱好者,在游戏中创建各种行业垂直领域的 Python 项目。

继续练习吧!

接下来,我们将最终揭晓 2022 年最好的 Python 教程。

学习 Python 的 25 个最佳免费工具和资源

我们对免费 Python 资源的前 25 个选择是:

1.Python.org

Python.org

Python.org

如果你正在寻找一个免费的学习 Python 的资源,在Python.org查看官方 Python 文档。这对初学者和有经验的开发人员很有帮助,因为它涵盖了从基础到高级的广泛主题,都是关于 Python 编程的。

  • 它为初学者提供了 Python 的简要说明。
  • 它演示了如何安装 Python、 IDE 和解释器。您可以阅读教程并尝试使用 Python 解释器。
  • Python.org 为 Python 开发人员提供了一个全面的高级主题指南,从安装依赖项到风格指南,编写代码,问题跟踪,故障排除,持续集成和测试,等等。

特征

  • 课程类型:基于文本
  • 先决条件:无
  • 证书:否
  • 教程被翻译成 81 种语言,帮助非英语母语者更高效地学习 Python。
  • 展示了初学者指南中包含的完整页面列表,您可以下载并阅读
  • 它通过多种练习和测验使学习变得有趣。它还通过动态分数计算和提示来检查您的 Python 风格。
  • 提供其他学习 Python 的参考,包括 Codecademy,DataCamp,Dataquest 等。

除了教程和指南,您还可以访问 Python 相关的播客、信息视频、最新事件和新闻、开发者社区、成功案例、常见问题等等。

2.代码集

Codecademy

Codecademy

互联网上免费学习 Python 的最好地方之一是 Codecademy 。这个电子学习平台提供大量免费和付费的 Python 课程。 Python 2 是他们提供的免费课程,是对基本编程概念和 Python 的有益介绍。

他们从理论开始,然后要求学习者利用概念在线编写 Python 代码。这门课程已经由美国宇航局、IBM、谷歌、脸书和其他公司的员工承担。

它们涵盖的一些主题有:

  • Python 语法
  • Python 字符串和控制台输出
  • 如何使用控制和条件流编写程序
  • Python 函数、循环、字典和数据结构列表

这个课程最好的一点是所有的练习和课程都直接在你的浏览器上运行;因此,没有必要在你的电脑上安装 Python。

Codecademy 还免费提供了一个代码编辑器,你可以边写代码边练习。你甚至可以加入一个论坛,与其他成员进行互动和讨论。

特征

  • 课程类型:基于视频
  • 完成时间:25 小时
  • 证书:您可以在课程结束后获得专业会员资格认证
  • 先决条件:无

3.犹达

Udemy

Udemy

Udemy 拥有大量各种主题的课程,包括 Python 。他们提供适合初学者和专家的免费和付费课程。如果你正在寻找基于视频的教程,Udemy 是最好的地方之一。

他们免费的Python 编程入门课程是对 Python 编程语言的简单快速的介绍。本教程有英文版,从以下主题开始:

  • Python 基础知识、字符串、数据类型和变量
  • 循环、条件、函数和文件操作
  • 编写 Python 脚本和函数

该课程的一些特点包括:

  • 课程类型:基于视频
  • 时长:1 小时 39 分钟,视频点播
  • 注册学生:619,075 人
  • 评分:4.4
  • 先决条件:无
  • 证书:否

Udemy 的 Python 在 30 分钟内从初级到中级课程为你准备高级 Python 概念。它包括一系列关于 Python 编程的教程和讲座,您将学习如何从头开始编码并安装 Python。

企业家、学生或任何对学习 Python 感兴趣的人都可以选修这门课程。在这里,他们教你:

  • Python 基础
  • Python 中的函数、模块、字符串
  • 切片、序列、条件和循环语句
  • 文件处理和面向对象编程

该课程的一些特点包括:

  • 课程类型:基于视频
  • 时长:1 小时 32 分钟,视频点播
  • 评分:4.2
  • 注册学生:92,015 人
  • 先决条件:无
  • 证书:否

顾名思义,Udemy 的 Python 绝对初学者课程最适合那些完全不了解 Python 或任何其他编程语言的人。讲师讲授如何用 Python 3 编写代码,涵盖以下主题:

  • Python 安装
  • 如何运行 Python 脚本并设置 PyCharm IDE
  • 变量、数字、字符串、列表、字典和布尔运算符
  • 模块、函数、循环、参数和返回值
  • 如何利用 Python 开发计算器应用程序
  • 最终方案

该课程的一些特点包括:

  • 课程类型:基于视频
  • 时长:2 小时 16 分钟,视频点播
  • 评分:4.5
  • 注册学生:75,783 人
  • 证书:否
  • 先决条件:下载 Python 3 和 PyCharm(都是开源的)

4.Coursera

Coursera

Coursera

Coursera 是一个平台,你可以在这里学习世界顶尖大学的各种课程,包括耶鲁大学、斯坦福大学、悉尼大学等等。Coursera 提供免费的 Python 课程: Python for Everybody 由密歇根大学特殊化。

本课程将帮助您学习如何用 Python 编程和分析数据。课程结束时,你将自己开发 Python 程序,并使用它收集、清理、可视化和分析数据。

他们增加了 12 种语言的字幕,包括英语、西班牙语、俄语、阿拉伯语、意大利语、法语、德语、土耳其语、葡萄牙语、越南语、韩语和简体中文。每门专业化课程都要求您成功完成一个动手项目以获得证书。

本课程涵盖以下主题:

  • Python 安装和编写程序
  • Python 基础
  • 如何使用变量来存储、计算、检索数据
  • 如何利用核心编程方面,如循环和函数
  • 数据结构、基本编程语言、数据库管理系统、网络搜集、SQL、元组、Python 语义和语法等技能

特征

  • 课程类型:基于视频
  • 持续时间:大约 8 个月
  • 评分:4.8
  • 注册学生:1,056,382 人
  • 认证:是的,可以在 LinkedIn、职业网络和雇主那里分享
  • 先决条件:无

5.Learnpython.org

Learnpython.org

Learnpython.org

如果你正在寻找一个基于文本的学习 Python 的资源,Learnpython.org是一个不错的选择。是一个互动教程,不管你有没有经验,对大家都有帮助。你也可以加入他们的脸书小组进行讨论、更新和提问。

该教程包括以下主题:

  • 变量及其类型、列表、运算符、条件、循环、函数、列表、字符串格式、字符串操作、对象和类、包和模块以及字典
  • 数据科学课程包括熊猫基础和数字阵列
  • 高级教程,如生成器、集合、列表理解、函数参数、异常处理、正则表达式、序列化、代码自省、部分函数、闭包、过滤器、映射和 Reduce

特征

  • 课程类型:基于文本
  • 注册学生:575,000 人
  • 先决条件:无
  • 认证:你可以在 LearnX 获得认证,并在你的 LinkedIn 个人资料中展示

6.自由代码营

FreeCodeCamp

FreeCodeCamp

学习 Python:初学者完全教程FreeCodeCamp 提供的教程,非常优秀,尤其是如果你热爱基于文本的课程。然而,他们也有一个 YouTube 视频,在那里他们为初学者漂亮地解释了 Python 概念。

在网站上,您可以了解到:

  • Python 基础,包括变量、控制流语句、循环、数组、数据结构、字典等。
  • 类别和对象
  • 面向对象的编程概念,如数据封装和继承

最棒的是他们用好的例子和代码解释了每个概念。YouTube 视频还介绍了如何安装 PyCharm 和 Python,如何构建计算器,以及关于 Python 解释器的想法。总的来说,如果你是编程和 Python 的新手,这是一个不错的选择。

特征

  • 课程类型:基于视频
  • 时长:4 小时 20 分钟的 YouTube 视频
  • 浏览量:2400 多万次
  • 先决条件:无

他们还有一个媒体账户,在那里你可以阅读数百篇关于各种编程语言的有用文章。

7.数据营

DataCamp

DataCamp

在数据科学教育方面,DataCamp 大放异彩。他们提供这门课程——Python 简介——帮助你掌握 Python 中的数据分析基础知识,并通过学习科学计算的 Numpy 扩展你的技能。

课程包括 11 个视频和 57 个练习,而且完全免费。DataCamp 的另一个好处是你不需要在你的机器上安装 Python 相反,它们提供了令人印象深刻的用户界面和网络编译器。

本课程的 USP 将它与其他在线 Python 教程区分开来,让学生学习用于数据科学的 Python。在这里,您将了解到:

  • 存储和操作数据的有效方法
  • 用于分析的数据科学工具
  • 基本 Python 概念
  • 如何交互式地利用 Python
  • 如何使用脚本利用 Python
  • 在 Python 的数据类型上创建变量和想法

特征

  • 课程类型:基于视频
  • 时长:4 小时
  • 注册学生:300 多万
  • 评分:4.6/5
  • 先决条件:没有技能,只是一个谷歌,脸书,或 LinkedIn 帐户

8.eDx

eDx

eDx

与 Coursera 类似, eDx 也是一个电子学习平台,提供来自全球顶尖大学的在线课程。目前,他们有 3000 多门课程,并与 160 多所大学合作,包括哈佛大学、麻省理工学院、伯克利分校等。

只要进入 edX 的网站,搜索你需要的课程,它就会显示所有相关的课程和项目。

我们来说说他们提供的一些免费的 Python 课程。

如果你想让你的 Python 基础知识更上一层楼,哈佛大学用 Python 做研究是适合你的。由哈佛大学提供,它将帮助您学习 Python 3 以及如何在您的研究中利用它。

在这里,您将了解到:

  • Python 3 编程基础
  • 一些用于研究目的的 Python 工具,如 SciPy 和 NumPy
  • 如何在实际场景中实现用于研究的 Python 工具

特征

  • 课程类型:基于视频
  • 持续时间:12 周,每周 2-4 小时
  • 注册学生:284,309 人
  • 证书:你可以通过支付 169.14 美元获得认证证书
  • 课程类型:根据您的时间自定进度
  • 语言:英语
  • 先决条件:之前有一些 Python 编程经验

其他免费课程包括:

  • IBM 撰写的数据科学 Python 基础知识:本课程讲授 Python、其在数据科学中的应用、其基础知识、如何利用 Pandas 进行数据分析等等。这种自定进度的课程持续时间为 5 周,您可以通过支付 99 美元来添加证书。
  • Python 中的计算 I : 佐治亚理工学院的《基础与过程编程》帮助你学习 Python 中的计算基础知识,比如变量和运算符,你还可以编写和调试你的程序。需要 5 周完成,支付 130.30 美元即可添加证书。
  • 用 Python 进行机器学习:实用介绍 : 这门入门课程帮助你学习机器学习方法、算法、统计建模,以及 MI 如何影响社会的真实例子。它是由 IBM 提供的为期 5 周的课程,您可以通过支付 99 美元来添加证书。

9.谷歌的 Python 类

Google 将 Python 用于许多项目,包括系统构建、广告分钟工具、代码评估工具、API 和数据分析。作为谷歌教育的一部分,他们的 Python 类是免费的,对拥有基本编程技能的人非常有用。

本课程包括讲座视频、文本内容和代码练习,帮助您练习 Python 编码。在这里,您将了解到:

  • 第一个练习中的基本 Python 概念,如列表和字符串
  • 涉及文本文件、 HTTP 连接和进程的完整程序练习
  • 如何安装和设置 Python

特征

  • 课程类型:基于视频
  • 持续时间:2 天
  • 先决条件:基本编程技能
  • 证书:否

也可以直接在 YouTube 上看他们的视频教程。

10.商务化人际关系网

 LinkedIn

LinkedIn

LinkedIn 不仅是一个专业人士的网络平台,也是学习大量技能的有用资源中心,包括 Python。他们通过注册 LinkedIn Learning 并开始你的免费月,免费提供 Python 基础培训

在本课程中,讲师将演示 Python 3 如何生成设计良好的脚本和维护现有项目。对初学者和中级学习者都有帮助。

本课程涵盖:

  • Python 的基本语法、用法和高级特性,如对象、异常、生成器等等
  • 值和类型如何与对象相关联
  • 如何利用函数、控制语句和循环
  • Python 模块系统
  • 如何使用装饰器和生成器
  • 展示真实实现中 Python 脚本的示例

特征

  • 课程类型:基于视频
  • 时长:4 小时 51 分钟
  • 观众:已经有超过 2 万人喜欢这门课了
  • 证书:LinkedIn Learning 提供的可共享证书
  • 包括 16 章的测验
  • 通过智能手机和平板电脑访问
  • 先决条件:无

11.微软

Microsoft

Microsoft

借助微软的 Python 入门课程,学习编写基础代码、探索控制台输出和输入、声明变量。它与他们的 Azure 学习资源相结合,但它对学生、Python 初学者和开发人员也很有用。

本课程包括 10 个单元,涵盖各种主题,例如:

  • Python 基础
  • 关于如何使用 Python 创建应用程序的练习
  • 数据类型、变量、一个“Hello”程序、如何读取键盘输入
  • 如何创建计算器应用程序

特征

  • 课程类型:基于视频
  • 课程时长:1 小时 7 分钟
  • 评分:4.7/5
  • 先决条件:无
  • 语言:英语

12.Simplilearn

Simplilearn

Simplilearn

Simplilearn 是一个领先的在线学习平台,提供广泛的课程,涉及数据科学、软件开发、IT、云计算、数字营销、项目管理以及更多新兴技术。

Simplilearn 的 Python 初学者教程旨在帮助你通过练习以最简单的方式学习这门语言。它让你毫不费力地掌握诸如面向对象编程(OOP)类、属性、线程、脚本等概念。这门课程对初学者和中级水平的学习者都有用。

在本课程中,您将学习:

  • 如何在 Windows 上安装 Python
  • 哎呀概念
  • 皮查姆和努皮
  • Python 的变量、数字、循环、函数、条件语句、列表、字符串、切片、正则表达式、线程、集合、字典等。
  • Python 线程、类和对象、熊猫、元组、ide 和 Matplotlib
  • Scikit 和 Django 框架
  • 成为 Python 开发人员的技能
  • 面试问题

如果你有疑问,也可以向他们的社区论坛寻求帮助。

特征

  • 课程类型:基于视频
  • 课程时长:9 小时,包括 33 节课
  • 课程类型:基于视频的教程
  • 先决条件:无
  • 证书:否

13.SoloLearn

SoloLearn

SoloLearn

SoloLearn 针对不同技能水平的学习者提供大量免费的 Python 课程。他们的学习者数量呈指数级增长,每门课程都有数百万的学习者。

他们提供 5 门 Python 课程:

其中,Python Core 最受欢迎,拥有 720 万学习者。本课程将帮助您通过代码编写实践学习 Python。你甚至可以为此收集积分,并扩展你的技能以获得更好的机会。

本课程分为 10 个模块。每个模块都结合了课程及其各自的实践或练习,以测试您所学的技能。涵盖的模块相关主题包括:

  • Python 的基本概念以及为什么应该学习它
  • 字符串和变量,换行符,字符串操作,使用输入
  • 控制结构,如 if 和 else 语句、布尔和比较、运算符和条件、循环、列表、范围
  • 功能和模块、标准库和 pip
  • 例外和文件
  • 字典、元组、切片、函数、字符串格式、文本分析器
  • 函数式编程、Lambda、生成器、映射和过滤器、装饰器、递归等。
  • OOP 概念,包括类、继承、封装等。
  • 正则表达式
  • 腐败与包装

特征

  • 课程类型:视频类型
  • 注册学生:720 万
  • 证书:否
  • 先决条件:无

除了 Python,SoloLearn 还提供许多其他主题的免费课程,如 JavaScriptHTML 、响应式网页设计、CSS、SQL、 Angular + NestJS、 PHP 、jQuery 等等。

14.教程点

Tutorials Point

Tutorials Point

教程点是一个免费提供优质内容的优秀平台。他们的 Python 教程通过深入的、基于文本的教程和丰富的例子帮助你学习 Python。它最适合 Python 初学者和编程语言新手。

此外,还有大量的实践练习和编码选项,这样你可以测试你的技能。即使你有一些 Python 的知识,你也可以在本教程的帮助下提高你的编码技能。

它不仅涵盖了基本的 Python 概念,还涵盖了高级主题,包括:

  • 你应该学习 Python 的原因
  • Python 的特点及应用
  • 环境设置
  • 如何用 Python 编写你的第一个“Hello World”程序
  • Python 的基本语法,变量,运算符,循环,数字,列表,字符串,字典,元组,日期和时间,模块,函数,异常等。
  • 高级主题,如类、对象、回归、CGI 编程、网络、数据库访问、多线程、发送电子邮件、GUI 编程、XML 处理和扩展

特征

  • 课程类型:基于文本
  • 先决条件:计算机编程术语的基本知识
  • 教程的可下载 PDF 版本
  • 快速指南
  • 资源、工作搜索和讨论面板
  • 证书:否

15.w3 学校

W3Schools

W3Schools

W3Schools 是一个著名的网站,提供大量的教程,包括用简单易懂的语言编写的 Python。他们提供了一个 Python 教程,里面有组织良好的课程和例子。

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

此外,您可以使用他们的编辑器——“自己试试”——自己编辑 Python 代码,然后查看结果。

本教程涵盖的主题有:

  • Python 简介和入门方法
  • 语法、注释、数据类型、变量、数字、字符串、类型转换、布尔值、运算符、元组、列表、Lambda、OOPs 概念、Python PIP 等。
  • 使用 Python 进行文件处理,读取文件,写入,创建或删除文件。
  • Python 模块——NumPy、SciPy 和 Pandas 教程
  • python Matplotlib-py plot、标记、绘图、线条、标签、支线图、网格、直方图、散点图、饼图和条形图
  • 用 Python 进行机器学习
  • Python MySQL 和 MongoDB
  • Python 参考资料、操作指南、示例和测验

特征

  • 课程类型:基于文本
  • 先决条件:无
  • 证书:完成本教程后,您可以通过在线测验测试您的 Python 技能。接下来,您可以随时随地通过减免考试费和参加在线考试来申请证书。

除了 Python,W3Schools 还有 HTML、JavaScript、 CSS 、SQL、 Bootstrap 、PHP、C++、jQuery、Java 等课程和教程。您还可以在这个网站上找到大量关于各种技术的参考资料,以丰富您的知识。

16.用 Mosh 编程

YouTube 也是一个很好的平台,在那里你可以免费找到很多 Python 教程。用 Mosh 编程是 YouTube 上最好的 Python 教程资源之一。这个频道的创建者是 Mosh,他在这个 YouTube 频道上为初学者提供了一个 Python 教程

本教程有 Python 的所有基本概念,甚至包括 3 个项目供您完成。涵盖的主题有:

  • Python 3 安装
  • 编写第一个 Python 程序
  • 变量、类型转换、格式化字符串、算术运算、数学函数、运算符、循环、2D 列表、表情转换器、参数、元组、解包、构造函数、oops 概念等基本概念。
  • Python 备忘单
  • 重量转换器程序
  • 创建一个猜谜游戏和汽车游戏
  • 目录、Pip 和 Pypi
  • 使用 Python 的自动化项目,使用 Python 的 ML 项目,以及使用 Django 创建网站的项目

特征

  • 教程类型:基于视频
  • 时长:6 小时 14 分钟
  • 浏览量:1800 多万
  • 订户:185 万
  • 推荐额外的 Python 书籍
  • 包括补充材料
  • 先决条件:无

17.CS 道场

CS Dojo 是一个很棒的 YouTube 频道,为绝对的初学者提供 Python 教程。它还为具有中级 Python 技能的学习者提供教程。

教程中的所有课程都用简单的语言和适当的例子进行了解释。教师还提供了一些有价值的提示,您可以使用这些提示来充分利用本教程。此外,您还可以在此下载示例文件。其中涵盖的主题有:

  • Python 及其用法介绍
  • IDE 和 Jupyter 笔记本
  • 如何安装 Jupyter 和 Python
  • 变量以及如何给它们赋值
  • 一道练习题及解答

特征

  • 教程类型:基于视频
  • 时长:24 分钟
  • 浏览量:600 多万
  • 频道用户:168 万
  • 先决条件:无

18.聪明的程序员

名单上的另一个 YouTube Python 教程是 Qazi 的聪明的程序员。如果你是一个想要从头开始学习 Python 的完全初学者,这也是一个极好的选择。

到目前为止,他已经在他的频道上传了 350 多个视频,都是给学习者的价值炸弹。此外,如果你想成为一名网络开发人员,他也提供大师班。他在教程 Python 初学者教程中涉及的主题是:

  • 所有基本的 Python 概念
  • 造型、切片、元组、连接和拆分等。
  • 字典、可变性、正则表达式和列表理解
  • 网页抓取和压缩功能
  • 4 个项目:井字游戏、Twilio 短信应用程序、待办事项应用程序和 Craiglist 克隆
  • Python 自由职业者指南

特征

  • 教程类型:基于视频
  • 时长:11 小时
  • 浏览量:200 多万
  • 订户:968,000 人以上
  • 先决条件:无

19.Pythonspot

如果你正在免费寻找基于文本的 Python 资源,Pythonspot 是另一个有用的资源。这个网站有一个完整的 Python 教程,涵盖了 Python 2 和 3。它既适合专业开发者,也适合初学者。

他们用实际例子深入解释了每个概念,以帮助您轻松理解。其中包括的主题有:

  • Python 的基本概念,OOPs 概念,递归函数,工厂方法,Lambda,线程,图,模块,二进制数,Python 调试等。
  • 数据库:读/写文件、平面数据库、SQLite、MySQL 和 ORM
  • Web 开发:Python web 开发、JSON 编码和解码、Flask 和 Django
  • GUI: PyQt4、PyQt5、wxPython 和 Tkinter
  • 网络:HTTP、FTP、POP3、链接提取等等
  • 高级:Matplotlib,正则表达式,使用 Python 创建量子计算应用,Chrome 插件,语音引擎和有趣的技巧
  • 更多关于 Android、计算机视觉、机器人和用 Python 创作游戏的教程

特征

  • 课程类型:基于文本
  • 先决条件:无
  • 证书:否

20.今晚学习

Studytonight

Studytonight

另一个从头开始学习 Python 的免费资源是 Studytonight 。他们为初学者提供 Python 教程,教授 Python 基础知识,然后逐渐让你准备好高级概念,包括详细的 OOP 概念。

内容简单易懂,附有示例,是一个很受欢迎的在线教程。您将获得大量练习来测试您在本教程中学到的 Python 技能,并在创建有用的工具中实现所学内容。

他们还有一个问答论坛,帮助学习者互相讨论和寻求帮助。本教程涵盖的主题有:

  • Python 基础知识、Python 2.x 与 Python 3.x、语法、函数、字符串、输入和输出、变量、运算符等等
  • 复杂数据类型、OOP 概念、错误和文件处理、多线程、日志、MySQL 和其他主题
  • 库函数

它们还涵盖了 Python 库,如 NumPy、Matplotlib、Tkinter、网络编程和 BeautifulSoup 的 web 抓取。

特征

  • 课程类型:基于文本
  • 先决条件:无
  • 持续时间:自定进度
  • 证书:否

21.全栈 Python

Full Stack Python

Full Stack Python

如果你对编程语言有一些基本的了解,你可以去读一下全栈 Python 教程。这个免费的在线 Python 教程将帮助你熟练掌握 Python,以抓住更好的职业机会,并实际实施学习。

本教程重点介绍如何构建、操作和部署 Python 应用程序。这本开源书籍用简单的语言描述了技术主题和概念。课程内容可让您连续学习,或选择特定主题并点击查看。

它包括以下主题:

  • Python、Python 2 或 Python 3 及其用法介绍
  • Python 社区、使用它的公司、最佳资源、播客和必看视频
  • 开发环境和使用数据库
  • Web 开发:Flask、Django 等 web 框架。、模板引擎、网页设计、静态站点生成器、测试、联网、API 创建和集成、安全性等等
  • Web 应用程序开发、 DevOps 和元概念

特征

  • 课程类型:书本
  • 持续时间:自定进度
  • 先决条件:基本的 Python 知识
  • 证书:否
  • 可购买 PDF、MOBI 和 EPUB 格式

22.用 Python 发明

如果你以前从未写过一行代码,用 Python 发明是一个不错的选择。除了可以在其他资源中找到的基本概念,这个网站之所以大放异彩,是因为它教你如何为日常目的构建有价值的工具。

这个网站的作者已经出版了许多关于 Python 的免费在线书籍,并且漂亮地展示了所有的概念,这样你就可以在现实世界中应用这些知识。

无论你是想提升技能的专业人士,还是想从事软件开发职业的学生,或者是喜欢制作电子游戏的业余爱好者,这个拥有一流在线书籍的网站都适合你。

有很多在线书籍可供你免费在线阅读,从这家出版商那里免费获得一本电子书,或者在亚马逊上购买一本。以下是几个例子:

  • 小型 Python 项目大全
  • 除了 Python 的基本知识
  • 用 Python 自动化枯燥的东西(第二版)
  • 用 Python 破解代码
  • 用 Python 发明你自己的电脑游戏
  • 用 Python 和 Pygame 制作游戏

23.Python 的搭便车指南

The Hitchhiker’s Guide to Python

The Hitchhiker’s Guide to Python

学习 Python 可以参考的一个极好的基于文本的材料是Python 的搭便车指南。它包含了对每一个 Python 概念的全面解释,旨在帮助您理解 Python、它的安装以及它在现实世界中的用法。

本指南对初学者和专业开发人员都有帮助,帮助他们有效地练习 Python。它还包含一个简明的建议列表,而不是包含每个 Python web 框架的列表。

这些主题包括:

  • 选择 Python 解释器
  • 在 Windows、macOS 和 Linux 上安装 Python
  • 使用 Pipenv 和虚拟环境
  • 开发环境:ide、文本编辑器、解释器和其他工具
  • 项目结构、代码风格、阅读和测试代码、文档、日志、选择许可等等
  • Python 应用程序,如网络应用程序、web 应用程序和框架、HTML 抓取、命令行应用程序、GUI 应用程序、数据库、网络、持续集成、科学应用程序、密码学、机器学习等等
  • 部署代码并共享它

特征

  • 课程类型:书本
  • 持续时间:自定进度
  • 先决条件:无
  • 证书:否
  • 可下载 PDF 格式
  • 英语、法语、巴西葡萄牙语、菲律宾语、日语、韩语和中文翻译

24.Python 适合你和我

Python for You and Me 是一本免费阅读的在线书籍。它也被称为 PYM 之书,用简单的语言解释了 Python 编程语言。这本书对想学习 Python 的程序员很有帮助,对完全的初学者也很有帮助。

需要为您的电子商务网站提供超快的、可靠的、完全安全的托管服务吗?Kinsta 提供所有这些服务,并由 WooCommerce 专家提供 24/7 的世界级支持。查看我们的计划

这本书里的所有内容都被分成清晰的章节和主题导向的课程。它涵盖的主题有:

  • Python 在 Windows、Linux/GNU 上的安装
  • 如何使用 Python 解释器,源文件,缩进,空格,代码求值等。
  • mu 编辑器:如何安装使用
  • 变量、数据类型、表达式、运算符、控制流语句和循环
  • 数据结构、字符串、函数、文件处理、异常、类和模块
  • 如何使用 vs 代码、PEP8 指南、virtualenv、装饰器、迭代器和生成器
  • 简单的代码测试、注释、类型提示、项目结构
  • 使用 PyperCard 开发命令行应用和简单的 GUI 应用

特征

  • 课程类型:书本
  • 持续时间:自定进度
  • 先决条件:无
  • 证书:否
  • 可下载 PDF 、HTML 和 EPUB 格式

25.跟我说说 Python

Talk Python to Me

Talk Python to Me

跟我说说 Python是一个优秀的播客,致力于 Python 及相关概念和技术。它有免费版和专业版。它主要关注用 Python 编码的组织和人员。他们在每一集中邀请不同的嘉宾来谈论他们在 Python 中的工作。

由于这些原因,它提供了一个巨大的机会,可以向真正的 Python 程序员学习,并自己实现 Python 来创建出色的应用程序和工具。到目前为止,他们已经录制了 320 集精彩的 Python 相关主题。

此外,他们还为 PyCharm 和其他科目的初学者提供在线 Python 课程。

特征

  • 素材类型:播客
  • 可在:谷歌播客,iTunes,阴云,和 Soundcloud
  • 你也可以在 YouTube、脸书、Twitter 和 GitHub 上找到它们

学习 Python 的 10 个最佳付费工具和资源

到目前为止,我们已经看到了关于 Python 的免费在线课程。但是如果你是一个认真的开发人员,或者想作为 Python 开发人员建立一个稳固的职业生涯,你可以选择参加一些付费课程。

开始了。

第一章

Udemy

Udemy

除了免费的 Python 课程, Udemy 还提供一些付费课程,这可能是在线学习 Python 的最佳地点之一。他们的付费课程面向初学者和专业开发人员。

在这里,除了基本的 Python 概念之外,您还可以进行高级别的学习。Udemy 上一些收费最高的 Python 课程包括:

1.2021 年完成 Python Bootcamp 从零到 Python 中的英雄

本课程旨在帮助你从零开始学习 Python,并达到高级水平以创建游戏和应用程序。该课程在 Python 3 上既全面又直观,适合以前从未编程、有一些基础知识或想获得 Python 高级技能的人。

课程内容分为 23 节,155 讲。它涵盖以下主题:

  • Python 基础知识和课程常见问题
  • Python 设置、对象和数据结构基础
  • 比较运算符、语句、函数和模型
  • OOP、包和模块、异常和错误处理
  • 装饰者,生成器,高级模块,
  • 网页抓取、电子邮件,处理电子表格、图像、pdf 和 CSV 文件
  • 额外材料:图形用户界面和 Python 2
  • 2 个里程碑项目和一个关于 Python 的最终顶点项目
特征
  • 基于视频的课程类型
  • 时长:22 小时 13 分钟
  • 注册学生:1,311,104 人
  • 评分:4.6/5 (368,004 次评分)
  • 14 篇文章和 19 个编码练习
  • 语言:英语、法语、西班牙语、意大利语、德语、波兰语和葡萄牙语
  • 先决条件:只有一台计算机和互联网连接
  • 在电视和手机上终身访问
  • 证书:是
  • 费用:117.99 美元,30 天退款保证

2.Python 圣经

被认为是学习 Python 的最佳资源之一,Python 圣经是你可以查阅的。它是为编程或 Python 初学者设计的,具有基本 Python 技能的人也可以利用它。

他们互动地制定了解释技术方面的内容,使学习变得有趣和容易掌握。课程内容分为 11 节 74 讲,包括:

  • 课程介绍
  • Python 安装和入门
  • 变量、数字、字符串和条件流
  • Python 中的数据结构、循环、函数和 OOP
  • 资源
特征
  • 课程类型:基于视频
  • 时长:9 小时 8 分钟
  • 注册学生:117,563 人
  • 评分:4.6/5 (33,530 分)
  • 4 篇文章、11 个编码练习和 3 个可下载资源
  • 语言:英语、西班牙语和葡萄牙语
  • 先决条件:带互联网连接的笔记本电脑/台式机
  • 在电视和手机上终身访问
  • 证书:是
  • 费用:165.85 美元,30 天退款保证

荣誉奖:除了这两个流行的 Python 课程,Udemy 还有很多其他有用的付费课程。它包括 Python for Data Science 和 ML Bootcamp,Learn Python 编程大师班,100 天的代码,以及 Python Mega 课程。

2.代码集

Codecademy

Codecademy

Codecademy 在我们上面的免费 Python 资源中出现过一次。那是针对 Python 2 的。但是如果你想学习 Python 3,Codecademy 提供了一个付费课程——学习 Python 3——你可以通过选择他们的专业会员计划来学习。

本课程向您介绍基本的 Python 和编程概念。当前版本 Python 3 对 Python 2 进行了各种改进,提高了代码的简单性和编写效率。

它涵盖的主题包括:

  • Python 语法和一个“Hello World”程序
  • 如何创建控制流、逻辑运算符和布尔变量
  • 列表、循环、函数、代码挑战、字符串、模块和字典
  • 自动化文件处理、类和参数
  • 投资组合项目:正楷,创建收据,和魔术 8 球游戏

特征

  • 课程类型:基于视频
  • 时长:30 小时
  • 学生:4500 万以上的代码学院学习者
  • 每一部分都包括测验和文章
  • 先决条件:无,只有你的设备和互联网
  • 证书:是
  • 费用:每月订阅费用约 20 美元

3.eDx

eDx

eDx

如前所述, eDx 是一个知名的在线学习平台,与世界顶尖大学有联系。除了免费课程,他们还提供带专业证书的付费课程,以增加你的技能和职业前景。

他们提供的一些报酬最高的 Python 课程有:

1.Python 编程简介

这门课程由佐治亚理工学院提供,是为任何想学习 Python 的人设计的。它将把你从一个完全的新手变成一个熟练的 Python 程序员。

这门要求很高的课程将为你提供 Python 和其他计算机科学研究的坚实基础。它设计独特,涵盖了基本的计算机科学原理和 Python 概念。

除了从教师那里获得有关您的理解和进步的持续反馈之外,您还可以访问包含实时编程练习、多项选择题和真实示例的短视频。

它涵盖的主题有:

  • 编程基础,如编写代码、执行、解释结果等。
  • 变量、运算符、布尔运算等基础知识。
  • 控制结构、错误处理和 Python 库
  • 数据结构和文件操作
  • OOP 技巧和算法
特征
  • 课程类型:基于视频
  • 持续时间:5 个月,每周 9-10 小时,自定进度
  • 4 门技能培养课程
  • 认证:是
  • 费用:536 美元

2.Python 数据科学

如果你想从事数据科学方面的职业,IBM 的 Python 数据科学课程可能是一个明智的选择。不管你是这个领域的新手还是已经有了一些经验,这门课程都会帮助你提升自己的技能。

它将为你从事机器学习和数据科学的职业做准备。该课程包括关于每个 Python 概念的广泛课程、数据可视化和分析,以及机器学习的实际介绍。最后,你将会用一个现实生活中的商业问题来完成一个最终的顶点项目。

本课程旨在为工作做准备和实践学习,你将使用数据集和 Python 库和工具包。

本课程涵盖的主题有:

  • Python 基础及其在数据科学中的应用
  • 使用 IBM cloud 和 Jupyter 笔记本等工具的迭代概念
  • 使用 NumPy 和 Pandas 等工具分析数据
  • 使用 Folium、Seaborn 和 Matplotlib 创建数据可视化
  • 用 Scipy 和 Scikit 构建 ML 模型-学习
  • 解决与数据科学相关的现实问题
特征
  • 课程类型:基于视频
  • 持续时间:7 个月,每周 3-5 小时,自定进度
  • 6 门技能建设课程
  • 先决条件:无
  • 证书:是
  • 费用:574 美元

4.Coursera

Coursera 提供了很多 Python 课程,密歇根大学的 Python 3 编程专门化课程是其中最好的课程之一。它将通过教你初级和中级 Python 3 概念和练习,帮助你成为一名熟练的 Python 程序员。

当这个程序完成时,你将能够通过阅读 Python 文档编写程序来查询 API 和提取数据,使用新的 API 和模块。如果你已经掌握了 Coursera 的 Python for Everybody Specialization(如免费资源部分所讨论的),本课程将帮助你迈出下一步。

本课程包括的主题有:

  • 如何理解和检查适用于 Python 3 的 API 和第三方库
  • Python 中图像库在图像浏览和操作中的应用
  • 将 Python tesseract 库(py-tesseract)用于 Python 3,使用光学字符识别(OCR)检测图像
  • 使用开源库 OpenCV 进行图像中的面部识别,处理面部,并将其用于联系表
  • 获得课程结业证书的动手项目

特征

  • 课程类型:基于视频
  • 持续时间:大约。5 个月,每周 7 小时(建议)
  • 评分:4.7/5 (12,777 次评分)
  • 注册学生:137,249 人
  • 字幕:英语、阿拉伯语、西班牙语、法语、意大利语、俄语、德语、韩语、越南语和葡萄牙语
  • 先决条件:否
  • 证书:是,可共享
  • 费用:7 天免费试用,然后每月 49 美元

除此之外,Coursera 还有其他不错的 Python 课程,比如:

  • Google 的 Python 速成班:这个 32 小时的课程是为初学者开设的,帮助你理解 Python 及其在自动化中的重要性。它还指导您创建 Python 对象。
  • Python for Data Science,AI,& Development by IBM:注册学生超过 300,000 人,这个 17 小时的课程帮助你学习 Python for web development,Data Science,and artificial intelligence。

5.一个月

One Month

One Month

一个月学会 Python是一门最畅销的在线 Python 课程,你可以在 30 天内完成。如果你是初学者,这是你可以参加的最好的 Python 课程之一,因为它是专门为新手设计的。

它有助于您学习 Python 编码的基本要素:

  • 微小的内容
  • 每周目标
  • 动手项目

他们的学习 Python 课程也在著名的哥伦比亚商学院教授。此外,在过去 3 年里,他们根据 MBA 学生和商业领袖的反馈改进了课程。

这些主题包括:

  • Python 基础和中级概念
  • 如何用 Python 写脚本
  • 使用 Python 框架,如 Flask
  • 如何从 API 中提取数据
  • 如何用 Python 搭建网站

特征

  • 课程类型:视频教程
  • 持续时间:30 天
  • 6 个多小时的分步视频教程
  • 基于真实世界的 Python 项目
  • 先决条件:无
  • 证书:是
  • 费用:299 美元的年度会员,如果不满意,100%退款保证

关于一个月的另一个值得注意的事情是,他们提供了视频讲座和学习者与教师之间讨论的结合。您可以通过 Slack 频道与其他学习者互动。

6.艰难地学习 Python

如果你是一个渴望学习 Python 的图书爱好者,那么 Zed Shaw 的《艰难地学习 Python》就是你所需要的。在这本向初学者教授 Python 的精彩书籍中,作者简化了学习 Python 的方法,这样你就可以从零水平顺利地过渡到更高水平的 Python 程序员。

课程内容分为 52 个精彩的练习,帮助您了解 Python 的工作原理、编写代码、纠正错误以及提高技能的技巧和窍门。它涵盖的主题包括:

  • 安装 Python 环境
  • 编写和组织代码
  • 基础数学、变量、字符串、文件处理、逻辑和循环
  • 数据结构与程序设计
  • OOP、类、对象和模块
  • Python 打包、自动化测试和调试
  • 基础网页和游戏开发

这本书有一张 DVD,里面有 5 个多小时的视频,泽德·肖讨论了这本书的不同方面,可以给你更多的帮助。

特征

  • 课程类型:书本
  • 持续时间:自定进度
  • 先决条件:无
  • 证书:否
  • 价格:亚马逊 38 美元,艰难学习代码网站 29.99 美元

7. Udacity

Udacity

Udacity

另一个提供 Python 课程的在线学习平台是 Udacity 。他们的 Learn Immediate Python 课程是他们的纳米学位项目的一部分,该项目包括各种编程语言的微型课程。

本课程帮助您获得从业者级别的 Python 技能,并学习实现机器学习、数据科学等。

对于想学习高级 Python 的人来说,这个课程非常棒。它使学习者能够利用 Python 提供的特性和功能,并简化执行复杂任务(如文件分类、网页抓取等)的应用程序功能。

完成该课程后,你将获得一个展示你的 Python 技能的作品集,这样你就可以申请相关的工作。

涵盖的主题有:

  • 高级 Python 课程,如方法、函数、问题解决策略、基于对象的设计、类和对象、创建代码库,以及将 Python 与外部文档融合
  • 如何编写、扩展和构建代码来支持大型系统的开发
  • 如何利用开源库快速添加高级功能并将代码打包到库中
  • 如何应用面向对象编程来保持代码的模块化、可理解和清晰

特征

  • 课程类型:基于视频
  • 持续时间:2 个月,10 小时/周
  • 先决条件:Python 和面向对象编程的基础知识
  • 评分:4.6/5
  • 包括来自专家的真实项目和身临其境的内容
  • 技术导师支持为您提供指导,回答您的问题,并激励您
  • 职业支持,如简历支持、LinkedIn 个人资料优化和 GitHub 投资组合评估
  • 基于您的时间表的灵活学习计划
  • 无限的反馈循环和提交
  • 价格:两个月 530.58 美元

8.多元视觉

PluralSight

PluralSight

如果想把学到的 Python 技能落实到现实项目中,就要 PluralSight 。他们有一门课程可以帮助你使用 Python 和 Flask (web 框架)构建你的工作板。

这门课程既适合初学者,也适合中级程序员。他们将指导您学习 Python 的每个基本方面,包括安装和配置构建环境,以便您可以方便地完成任务。

其中包括的主题有:

  • 如何设置本地环境和 Flask
  • 提供一致视图的样式和基础模板
  • 动态内容准备
  • 显示数据库中的单个作业和所有作业
  • 显示雇主个人的所列工作
  • 为用户创建一个雇主评估表,以获得 1 到 5 分的反馈

特征

  • 课程类型:视频
  • 时长:2 小时 35 分钟
  • 评分:4/5
  • 先决条件:无
  • 证书:不适用
  • 费用:联系他们的销售团队,还有 10 天的免费试用期

9.Simplilearn

Simplilearn

Simplilearn

Simplilearn 是包括 Python 在内的各种学科的高质量教程的中心。他们的 Python 认证课程是一个全面的教程,将教授你 Python 基础、多重操作、Django、 shell 脚本等等。

此外,您将承担一个实践项目,并最终完成,为自己在 Python 编程方面的成功职业生涯做好准备。该课程教授你 Python 在现实世界中的应用,并附带了大量的模块、作业和项目。

本课程涵盖以下主题:

  • Python 基础和学习目标
  • 数据运算符、函数和条件语句
  • 文件操作和错误处理
  • Django 和 shell 脚本
  • 单元测试和日志基础设施
  • 网络概念
  • 关于上述前四个主题的实时虚拟课堂

特征

  • 课程类型:视频
  • 持续时间:38 小时混合学习、30 小时教师指导学习和 8 小时自定进度在线学习
  • 每课结束时 5 次测验,1 个期末专题,每个模块 20 多次辅助练习
  • 先决条件:无
  • 证书:是
  • 费用:自定进度课程 135.50 美元,在线训练营 243.95 美元,两者都是终身访问

10.编码游牧民

Codingnomads

Codingnomads

想用 API 和 SQL 从头开始构建应用吗?

通过编码游牧民在线学习 Python 是另一个很好的选择。成功完成这门课程也有助于你在 web 开发、人工智能和数据科学领域取得令人兴奋的职业生涯。

该课程包括以下主题:

  • Python 用例及基本概念
  • 程序员的关键工具,如 GitHub、虚拟环境、PyCharm IDE 和 CLI
  • Python 编程构建自动化软件
  • SQL 和数据库介绍及其与 Python 的集成
  • 如何将 Python 应用与 RESTful APIs 集成并利用数百万的数据集
  • 最重要的项目

特征

  • 课程类型:基于视频
  • 持续时间:200 小时的课程和 9 小时以上的视频教程
  • 500 多页的教程和文档
  • 300 多个实验室练习和代码示例
  • 150 多个定制演示和视频教程
  • 只有会员才能访问论坛,与教师和学生交流
  • 先决条件:无
  • 认证:是
  • 费用:多层次的每月付款计划和免费试用

由于在数据科学、机器学习和人工智能等新兴技术中的使用,Python 比以往任何时候都更受欢迎💪今天就开始学习⤵️ 点击推文

摘要

Python 现在需求量很大。而且,由于它对新兴技术拥有出色的能力,预计未来仍将如此。但是如果你想学 Python,先定个目标。

无论你是一个完全的初学者还是已经有一点编程语言经验的人,都可以使用合适的 Python 资源。它可以是视频、基于文本的学习、书籍、播客或博客的形式。你也可以采取混合的方法,比如交替参加视频课程和听你最喜欢的 Python 播客。

根据你的目标、技能水平、是否需要认证以及预算来选择 Python 教程。完成 Python 课程后,继续在现实项目中运用你的技能来实现你的目标,并继续学习和尝试。

学习 Python 有什么小技巧吗?在评论区分享吧!


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

将你的应用程序与 WordPress 连接起来,完善你的 Python 印章

原文:https://kinsta.com/blog/python-wordpress/

WordPress 已经成为使用最多的内容管理系统(CMS ),这在很大程度上归功于它的应用编程接口(API)。 WordPress REST API 使 WordPress 能够与用各种语言编写的其他应用程序“对话”——包括 Python。

Python 是一种可扩展的编程语言,具有多种用途和人类可读的语法,使其成为远程管理 WordPress 内容的强大工具。

以下是一些你的应用程序的 WordPress REST API 用例,以及你如何使用 Python 来支持它们:

  • 使用预定义的模板,使您的应用程序能够快速将原始数据转换为带解释的格式化帖子。
  • 在 Django 和 Python 上构建一个后台应用程序,在每次特定对象的折扣或销售活动发生时,向您的客户显示限时优惠。
  • 集成 Python 脚本,在你的 WordPress 站点内部运行

本教程将帮助您创建一个简单的 Python 控制台应用程序,它与 WordPress REST API 通信并在其上执行操作。完整的项目代码也是可用的。

安装和配置 WordPress

首先,让我们在你的开发机器上安装并运行一个 WordPress 网站。这是开始使用 WordPress 的一个很好的方法,因为你不需要为虚拟主机创建一个帐户或者购买一个域名。

需要在这里大声喊出来。Kinsta 太神奇了,我用它做我的个人网站。支持是迅速和杰出的,他们的服务器是 WordPress 最快的。

A picture of Phillip Stemann looking into the camera wearing a blue button down shirt

Phillip Stemann

View plans

在本地安装 WordPress 之前,需要在您的计算机上运行一些组件,包括 Apache web 服务器、本地数据库和编写 WordPress 的 PHP 语言。

幸运的是,我们可以使用 DevKinsta ,这是一个免费的本地 WordPress 开发套件,适用于所有主要的操作系统(你不必是 Kinsta 的客户就可以使用它)。

DevKinsta 可用于 Windows、Mac 和 Linux,并在您的本地机器上安装 WordPress plus 及其所有依赖项。

在安装 DevKinsta 之前,您必须在本地运行 Docker,所以如果您还没有安装 Docker 引擎的话,请下载并安装 Docker 引擎

安装 Docker Desktop 后,可以自动下载适合你的 OS 的包。

DevKinsta's downloading page screenshot.

DevKinsta 安装页面。

当您运行 DevKinsta 安装程序时,Docker 会立即开始初始化:

DevKinsta's starting Docker screen.

DevKinsta 在本地启动 Docker。

接下来,从创建新站点菜单中选择新的 WordPress 站点:

DevKinsta's create new WordPress site screen.

DevKinsta 的创建新站点菜单。

现在 DevKinsta 安装程序要求你为 WordPress 管理帐户创建凭证:

DevKinsta's new WordPress site creation screen.

DevKinsta 显示新的 WordPress 站点表单。

一旦安装,DevKinsta 就是一个独立的应用程序。现在你可以访问 WordPress 站点(通过打开站点按钮)和 WordPress 管理仪表板( WP 管理按钮)。

DevKinsta's WordPress site info screen.

DevKinsta 的网站信息面板。

接下来,您需要为您的网站启用 SSL 和 HTTPS 。这通过 SSL 证书提高了网站的安全性。

Enabling DevKinsta's SSL and HTTPS option.

DevKinsta 的“SSL 和 HTTPS”选项。

现在进入 DevKinsta 应用程序,点击打开网站按钮。一个新的浏览器标签将显示你的 WordPress 站点的主页:

The home page of your local WordPress site.

WordPress 主页。

这是你的 WordPress 博客,你可以在这里开始写作。但是为了使 Python 能够访问和使用 WordPress REST API,我们必须首先配置 WordPress Admin。

现在点击 DevKinsta 应用程序上的 WP 管理按钮,然后提供你的用户和密码来访问 WordPress 仪表盘:

WordPress admin dashboard login screen.

WordPress 登录表单。

一旦你登录,你会看到 WordPress 仪表盘:

Welcome to WordPress admin screen.

WordPress 仪表盘页面。

WordPress 使用 cookie 认证作为它的标准方法。但是如果你想使用 REST API 来控制它,你必须使用一种技术来授权访问 WordPress REST API。

为此,您将使用应用程序密码。这些是 WordPress 生成的 24 个字符长的字符串,与有权限管理你的网站的用户档案相关联。

要使用应用程序密码,请单击仪表板上的插件菜单,然后搜索同名插件。然后安装并激活应用程序密码插件:

Installing and activating WordPress Application Passwords plugin.

WordPress 的应用密码插件。

要开始创建您的应用程序密码,首先展开用户菜单并点击所有用户:

Expanded Users WordPress menu.

展开用户菜单。

现在,点击管理员用户名下方的编辑:

Click the "Edit" button below your WordPress user under the Users menu.

WP-Admin 界面。

向下滚动编辑用户页面,找到应用密码部分。在这里,为应用程序密码提供一个名称,稍后您将使用它来验证您的 Python 应用程序请求并使用 REST API:

Application Passwords plugin dashboard.

申请密码页面。

点击添加新的应用程序密码,这样 WordPress 可以为你生成一个随机的 24 个字符的密码:

The new password generated by Application Passwords plugin.

新增申请密码页面。

接下来,复制这个密码,并将其保存在一个安全的位置,以便以后使用。请记住,一旦关闭此页面,您将无法找回此密码。

最后,您必须配置永久链接。WordPress 允许你为你的永久链接和档案创建一个自定义的 URL 结构。让我们改变它,这样一篇标题为“你的第一个 WordPress 网站”的文章可以通过直观的 URL https://Your-Website . local:port/Your-First-WordPress-Website/访问。这种方法带来了几个好处,包括提高可用性和美观性。

要配置永久链接,展开设置部分并点击永久链接菜单。这里将常用设置改为帖子名称:

Changing WordPress permalink settings.

使用 Post name 结构设置 permalink 结构也是必要的,因为它将允许我们稍后使用 JSON 格式在 Python 代码中检索帖子。否则,将会抛出 JSON 解码错误。

如何从 Python 控制 WordPress

WordPress 是用 PHP 编写的,但它有一个 REST API,允许其他编程语言、网站和应用程序使用它的内容。在 REST 架构中公开 WordPress 内容使得它以 JSON 格式可用。因此,其他服务可以与 WordPress 集成并执行创建、读取、更新和删除(CRUD)操作,而不需要安装本地 WordPress。

接下来,您将构建一个简单的 Python 应用程序,看看如何使用 WordPress REST API 来创建、检索、更新和删除帖子。

为新的简单 Python 项目创建一个新目录,并将其命名为类似于PythonWordPress的名称:

../PythonWordPress

现在,您将为您的项目创建一个虚拟环境,允许它维护一组独立的已安装 Python 包,将它们与您的系统目录隔离开来,并避免版本冲突。通过执行venv命令创建一个虚拟环境:

python3 -m venv .venv

现在,运行一个命令来激活。虚拟环境。该命令因操作系统而异:

  • 视窗:.venvScriptsactivate
  • Mac/Linux: .venv/bin/activate

接下来,存储与你的 WordPress 账户相关的配置。要将应用程序配置从 Python 代码中分离出来,需要创建一个。env 文件,并将这些环境变量添加到该文件中:

WEBSITE_URL="<>"

API_USERNAME="<>"

API_PASSWORD="<>"

幸运的是,从 Python 应用程序中读取上面的数据很容易。您可以安装 Python-dotenv 包,这样您的应用程序就可以从中读取配置。env 文件:

注册订阅时事通讯

想知道我们是怎么让流量增长超过 1000%的吗?

加入 20,000 多名获得我们每周时事通讯和内部消息的人的行列吧!

Subscribe Now

pip install python-dotenv

然后,安装 aiohttp ,Python 的异步 http 客户端/服务器:

pip install aiohttp

现在添加一个名为 app.py 的文件,代码如下:

import asyncio

menu_options = {

1: 'List Posts',

2: 'Retrieve a Post'

}

def print_menu():

for key in menu_options.keys():

print (key, '--', menu_options[key] )

async def main():

while(True):

print_menu()

option = input_number('Enter your choice: ')

#Check what choice was entered and act accordingly

if option == 1:

print('Listing posts...')

elif option == 2:

print('Retrieving a post...')

else:

print('Invalid option. Please enter a number between 1 and 5.')

def input_number(prompt):

while True:

try:

value = int(input(prompt))

except ValueError:

print('Wrong input. Please enter a number ...')

continue

if value < 0:

print("Sorry, your response must not be negative.")

else:

break

return value

def input_text(prompt):

while True:

text = input(prompt)

if len(text) == 0:

print("Text is required.")

continue

else:

break

return text

if __name__=='__main__':

asyncio.run(main())

上面的代码显示了一个控制台菜单,并要求您输入一个数字来选择一个选项。接下来,您将扩展这个项目并实现代码,使您能够列出所有文章并使用文章 id 检索特定文章。

获取代码中的帖子

要与 WordPress REST API 交互,您必须创建一个新的 Python 文件。创建一个名为的文件,包含以下内容:

import aiohttp

import base64

import os

import json

from dotenv import load_dotenv

load_dotenv()

user=os.getenv("API_USERNAME")

password=os.getenv("API_PASSWORD")

async def get_all_posts():

async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session:

async with session.get("/wp-json/wp/v2/posts") as response:

print("Status:", response.status)

text = await response.text()

wp_posts = json.loads(text)

sorted_wp_posts = sorted(wp_posts, key=lambda p: p['id'])

print("=====================================")

for wp_post in sorted_wp_posts:

print("id:", wp_post['id'])

print("title:", wp_post['title']['rendered'])

print("=====================================")

async def get_post(id):

async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session:

async with session.get(f"/wp-json/wp/v2/posts/{id}") as response:

print("Status:", response.status)

text = await response.text()

wp_post = json.loads(text)

print("=====================================")

print("Post")

print("     id:", wp_post['id'])

print("     title:", wp_post['title']['rendered'])

print("     content:", wp_post['content']['rendered'])

print("=====================================")

注意上面的 aiohttp 库的使用。现代语言提供了支持异步编程的语法和工具。这通过允许程序在执行诸如 web 请求、数据库操作和磁盘 I/O 等操作的同时执行任务来提高应用程序的响应能力。Python 提供了 asyncio 作为其异步编程框架的基础,并且 aiohttp 库构建在 asyncio 之上,以将异步访问引入 Python 中的 http 客户端/服务器操作。

上面的ClientSession函数异步运行并返回一个session对象,我们的程序用它对/wp-json/wp/v2/posts端点执行 HTTP GET 操作。检索所有帖子的请求和特定帖子的请求之间的唯一区别是最后一个请求在 URL 路由中传递了一个post id参数:/wp-json/wp/v2/posts/{id}

现在,打开 app.py 文件,添加import语句:

from wordpress_api_helper import get_all_posts, get_post

接下来,修改main函数来调用get_all_postsget_post函数:

if option == 1:

print('Listing posts...')

await get_all_posts()

elif option == 2:

print('Retrieving a post...')

id = input_number('Enter the post id: ')

await get_post(id)

然后运行应用程序:

python app.py

然后您会看到应用程序菜单:

Starting the Python app connected to WordPress.

Python 应用菜单。

现在,尝试选项 1 来查看 Python 应用程序检索的帖子列表,并尝试选项 2 来选择帖子:

Try option 1 to view the list of posts that your Python app retrieves, and option 2 to select a post.

Python 应用显示帖子列表和单个用户选择的帖子。

在代码中创建帖子

要用 Python 创建一篇 WordPress 文章,首先打开 wordpress_api_helper.py 文件,并添加create_post函数:

Struggling with downtime and WordPress problems? Kinsta is the hosting solution designed to save you time! Check out our features

async def create_post(title, content):

async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session:

async with session.post(

f"/wp-json/wp/v2/posts?content={content}&title={title}&status=publish"

, auth=aiohttp.BasicAuth(user, password)) as response:

print("Status:", response.status)

text = await response.text()

wp_post = json.loads(text)

post_id = wp_post['id']

print(f'New post created with id: {post_id}')

这段代码调用session对象中的post函数,传递 REST API 端点 URL 旁边的auth参数。auth对象现在包含了您使用应用程序密码创建的 WordPress 用户和密码。现在,打开 app.py 文件,添加代码导入create_post和菜单:

from wordpress_api_helper import get_all_posts, get_post, create_post

menu_options = {

1: 'List Posts',

2: 'Retrieve a Post',

3: 'Create a Post'

}

然后添加第三个菜单选项:

elif option == 3:

print('Creating a post...')

title = input_text('Enter the post title: ')

content = input_text('Enter the post content: ')

await create_post(title, f"{content}") 

然后,运行应用程序并尝试选项 3,传递标题和内容以在 WordPress 中创建新帖子:

Creating a WordPress post with Python.

Python 应用程序显示新创建的 WordPress 帖子。

再次选择选项 1 将返回新添加文章的 id 和标题:

Returning the id and the title of the newly added post.

Python app 返回新帖的标题和 id。

你也可以打开你的 WordPress 网站查看这篇新文章:

The newly created post in the browser.

新 WordPress 帖子的浏览器图片。

更新代码中的帖子

打开 wordpress_api_helper.py 文件,添加update_post函数:

async def update_post(id, title, content):

async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session:

async with session.post(

f"/wp-json/wp/v2/posts/{id}?content={content}&title={title}&status=publish"

, auth=aiohttp.BasicAuth(user, password)) as response:

print("Status:", response.status)

text = await response.text()

wp_post = json.loads(text)

post_id = wp_post['id']

print(f'New post created with id: {post_id}')

然后打开 app.py 文件,添加代码导入update_post和菜单:

from wordpress_api_helper import get_all_posts, get_post, create_post, update_post

menu_options = {

1: 'List Posts',

2: 'Retrieve a Post',

3: 'Create a Post',

4: 'Update a Post'

}

然后,添加第四个菜单选项:

elif option == 4:

print('Updating a post...')

id = input_number('Enter the post id: ')

title = input_text('Enter the post title: ')

content = input_text('Enter the post content: ')

await update_post(id, title, f"{content}") 

然后运行应用程序并尝试选项 4,传递帖子 id、标题和内容来更新现有帖子。

Updating a WordPress post.

Python app 显示更新后的菜单。

选择选项 2 并传递更新后的帖子 id 将返回新添加帖子的详细信息:

Returning the details of the newly updated post.

Python app 显示更新后的帖子。

删除代码中的帖子

您可以将帖子 id 传递给 REST API 来删除帖子。

打开 wordpress_api_helper.py 文件,添加delete_post函数:

async def delete_post(id):

async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session:

async with session.delete(

f"/wp-json/wp/v2/posts/{id}"

, auth=aiohttp.BasicAuth(user, password)) as response:

print("Status:", response.status)

text = await response.text()

wp_post = json.loads(text)

post_id = wp_post['id']

print(f'Post with id {post_id} deleted successfully.')

现在打开 app.py 文件,添加代码导入delete_post和菜单:

from wordpress_api_helper import get_all_posts, get_post, create_post, update_post, delete_post

menu_options = {

1: 'List Posts',

2: 'Retrieve a Post',

3: 'Create a Post',

4: 'Update a Post',

5: 'Delete a Post',

}

然后,添加第五个菜单选项:

elif option == 5:

print('Deleting a post...')

id = input_number('Enter the post id: ')

await delete_post(id)

现在运行应用程序并尝试选项 5,传递一个 id 来删除 WordPress 中现有的帖子:

Deleting a WordPress post with the Python app.

Python app 显示删除选中的帖子。

注意:如果运行列表帖子选项,被删除的帖子可能仍然会出现:

Python app listing posts.

Python app 显示原创帖子列表。

为了确认你已经删除了这篇文章,等待几秒钟,然后再次尝试列表文章选项。就是这样!
T3】

摘要

多亏了 WordPress REST API 和 Python 的 HTTP 客户端库,Python 应用和 WordPress 可以合作并互相交流。REST API 的好处在于,它允许你从 Python 应用程序远程操作 WordPress,Python 强大的语言支持按照你想要的结构和频率自动创建内容。

DevKinsta 使得创建和开发一个本地 WordPress 站点变得快速和简单。它为开发 WordPress 主题和插件提供了一个本地环境,并由于其基于 Docker 的独立安装模型而提供了一个简化的部署模型。

你使用 Python 和 WordPress 有什么体验?

当你准备好扩展这种体验时,你可以阅读WordPress REST API 基础完整指南来探索其他可能性。


让你所有的应用程序数据库WordPress 网站在线并在一个屋檐下。我们功能丰富的高性能云平台包括:

  • 在 MyKinsta 仪表盘中轻松设置和管理
  • 24/7 专家支持
  • 最好的谷歌云平台硬件和网络,由 Kubernetes 提供最大的可扩展性
  • 面向速度和安全性的企业级 Cloudflare 集成
  • 全球受众覆盖全球多达 35 个数据中心和 275 多个 pop

在第一个月使用托管的应用程序或托管数据库,您可以享受 20 美元的优惠,亲自测试一下。探索我们的计划与销售人员交谈以找到最适合您的方式。

posted @ 2024-11-01 16:30  绝不原创的飞龙  阅读(8)  评论(0编辑  收藏  举报