按照月度的版本计划,昨天GitLab官方发布了有一个个新的月度版本GitLab 13.2。该版本在简化项目计划,更好地协作,通过Wiki页面的差异更改更快地反馈信息,并通过负载性能测试提高整体性能/效率等方面做了改进。有关功能请追随虫虫一起学习。
概述
简化敏捷项目计划和管理
管理不同团队的工作流和计划任务可能会打断正常开发活动。Gitlab为了解决此碎片化的问题,提供最小可行的变化(MVC)的解决方案,通过迭代分解工作成更小,更易于管理,大块,使项目规划更加容易-。如果团队利用Jira进行项目管理,支持更轻松地在GitLab中查看Jira问题。如果Epic计划和管理大型项目,新支持使用机密Epic保护敏感内容。当需要更新几个相关的Epic时,可以批量编辑Epic,以减少标签过载和更新所需的点击次数。
更好的协作以获得更快的反馈
清晰的沟通是有效协作的关键,因为它使开发团队能够在将变更推向生产之前更快地获得有关变更的反馈。Gitlab 13.2中支持区分Wiki页面的更改,这使得页面版本之间的编辑历史记录比较变得更快,更简单,类似于查看存储库中的文件。
实时反馈.gitlab-ci.yml通过启用实时换行和自动补全功能,使CI管道更新更加有效。在配置CI管道或切换上下文以获取所需信息时,无需记住所有参数。
设计师是团队中非常重要的成员,13.2包括对设计管理的重大改进,可以更轻松地查找设计的过程,因此花费的时间更少,官方的GitLab Figma插件简化了从Figma上载到GitLab问题的过程。
改进的性能和效率
Gitlab 13.2提供了新的更新,以提高团队的效率和性能。应用程序性能是每个开发团队都面临的挑战,新的负载性能测试可以轻松地将自定义负载测试作为CI/CD管道的一部分运行,以更好地了解应用程序在压力下的性能。
GitLab Geo通过使用本地GitLab节点来帮助远程团队更有效地工作,并且为项目提供了改进的复制性能,以确保本地内容是新鲜的。
最后但并非最不重要的一点是,如果需要提供合规性数据或更有效的方式来显示审核过程中生产的相关变化,则GitLab的CI检验结果将包含在Release Evidence中,以便于访问。
GitLab 13.2主要功能改进
将问题分配给迭代(STARTER及以上)
在此版本之前,无法在GitLab中将问题与多个时间框关联。对于遵循Scrum或XP的团队来说,这尤其成问题。这样的团队通常需要将问题与迭代/冲刺相关联,同时还要将该问题滚动到运行时间更长的里程碑,例如程序增量。
GitLab-Figma插件
最近,GitLab产品设计团队和开源Pajamas设计系统转移到了Figma。GitLab创建了一个新的Figma插件GitLab-Figma,用它插件可以轻松地从Figma上传到GitLab Issues。这样Designs的协作变得更加快捷,容易。通过无缝的工作流程将设计环境与源代码管理连接起来。GitLab 13.2中,在Figma目录中启动了官方插件GitLab-Figma。
集群运行状况监视
要了解系统性能,开发团队必须监视基础架构的运行状况和性能。作为2020年礼物的一部分, Monitor阶段的群集运行状况已经从GitLab Ultimate被免费,移到了GitLab Core。
从GitLab 13.2开始,所有用户都可以在GitLab用户界面连接集群并监视其运行状况。
使用GitLab Composer存储库管理PHP依赖项(PREMIUM及以上)
PHP开发人员需要一种共享和使用项目依赖项的机制。Composer是PHP的依赖项管理器,利用它可以声明项目所依赖的库,并进行依赖项管理。
新版本GitLab中的提供了内在的Composer信息库。PHP开发人员可以轻松地的来发现和项目依赖项的管理。通过与Composer集成,GitLab提供了一个集中的位置,可以在与源代码和管道相同的位置查看这些软件包。Package Registry中的PHP依赖项将在All选项卡下列出,不是Composer特定选项卡。通过特定Composer选项卡的功能已经被添加到里程碑在未来会实现。
将敏感的工作组织成机密Epic(PREMIUM及以上)
新版本中,可以将一系列相关的机密问题整理成机密Epic。对于在财务,人力资源或安全等领域工作用户,经常需要处理无法公开或无法公开查看的项目。为了更好地支持客户管理所有共同达到共同目标或项目的多个机密问题,机密功能扩展到Epic中。
代码所有者部分(PREMIUM及以上)
在大型组织中,独立团队可能对应用程序的某些部分具有共同的兴趣,例如,付款处理公司可能会有负责代码库公共部分的开发,安全和合规性团队。三个团队可能都需要对代码更改进行审核。根据更改的文件来管理代码所有者时,每个文件路径只能匹配一个代码所有者。
在GitLab 13.2中,代码所有者部分允许每个团队独立配置自己的代码所有者。可以将规则用于共享路径,可以添加多个团队作为审阅者,让合理的组来审核相关代码,这有助于提高代码质量,也能提高效率。
将Fargate对ECS的支持添加到Auto DevOps和ECS模板中
为了简化在AWS云下的部署。Gitlab提供了一个CI/CD模板,利用它可部署到AWS ECS/EC2目标,甚至将其连接到Auto DevOps。在EC2中扩展容器实例是一个挑战,为此有用户选择使用AWS Fargate。
在新版本中,通过添加模板实现对Fargate支持,该模板也继续与Auto DevOps一起使用,更多用户可以从中受益。
GitLab官网仓库启用高级全局搜索
在此版本之前,想要进行跨项目代码搜索的GitLab官仓用户必须先克隆一份存储库到本地,再进行搜索,耗时耗力。GitLab 13.2中,Bronze和更高级别的GitLab用户组可以使用Advanced Global Search在UI中直接执行组范围的代码搜索。Advanced Global Search增加了在一个组中的所有项目中搜索代码的功能,提高了搜索的相关性和性能,允许范围界定,并启用Advanced Search Syntax。这将使在GitLab中搜索内容的体验更加强大,从而使用户可以更轻松地找到他们的内容。
将功能标志与相关问题相关联(PREMIUM及以上)
新版本中增加了将相关问题与其各自的功能标志关联的功能。例如,可以链接引入功能标记本身的问题。这个关系在功能标志的详细信息中可见。这也将使直接从功能标志本身跟踪问题的里程碑和状态变得更加容易,用以更好地了解功能细节。
在GitLab中查看Jira问题列表(PREMIUM及以上)
对于使用Jira作为主要工作跟踪工具的组织,贡献者跨多个系统工作并维护可能是一个挑战。
在新版本中的Jira集成的扩展中,项目管理员可以选择显示GitLab项目内部的Jira问题列表。这使主要在使用Git工作的开发人员可以保持工作状态,而无需再关注Jira来跟踪分配的问题等。未来计划中该插件将进一步增加包括注释,状态更改(转换)等功能。
负载性能测试(PREMIUM及以上)
新版本中,支持使用负载性能测试来运行自定义的负载测试。开箱即用的负载性能测试将报告已配置的检查通过百分比,90%和95%请求的首字节时间(TTFB)的以及每秒的平均请求数(RPS)。这样可以轻松地将结果与通用基准进行比较,并可以在确定合并代码之前直接在合并请求中查看结果。
GitLab UI中可用的托管应用程序日志
在对事件进行分类或验证服务状态时,必须能够在整个应用程序堆栈中浏览K8S Pod日志。此前GitLab用户界面只会显示已部署的应用程序日志(源自CI/CD部署到群集的应用程序的日志)。
在GitLab 13.2中,可以直接从GitLab用户界面搜索托管应用程序日志。
Core中的多个Kubernetes集群部署
使用GitLab和其一起部署的多个K8S集群之前需要高级许可证。部署到多个集群甚至对于单个贡献者也是有用的。
从GitLab 13.2开始,支持部署到多个集群。
.gitlab-ci.yml创建发布(PREMIUM及以上)
之前曾在12.10中,提供了一种从.gitlab-ci.yml文件自动创建发行标签的方法。
在新版本中,通过将release关键字作为GitLab Runner可以解析的步骤来公开,使用起来更加轻松自然。无需再添加脚本调用Release API来创建发行版。只需将在.gitlab-ci.yml中配置参数即可。
在发布证据中包括CI测试结果(ULTIMATE)
GitLab通过添加CI测试结果来扩展Release Evidence功能。这些由管道生成的作业工件将自动会打包在发布证据的JSON文件中。
使用Jsonnet动态生成子管道配置
GitLab 12.9曾中发布了Dynamic Child Pipelines功能,它允许在运行时生成.gitlab-ci.yml文件。例如,当希望运行时行为更加动态时,这对于monorepos是一个很好的解决方案。
在新版本中,通过包含一个项目模板来演示如何使用Jsonnet生成YAML,可以在运行时创建CI/CD YAML变得更加容易。Jsonnet是一种数据模板语言,它提供允许完全参数化的YAML配置的函数,变量,循环和条件。
审核事件中的批准组更改(STARTER及以上)
审核事件已经捕获了合并请求批准所做的更改。在13.2中,通过向批准组添加有关更改的详细信息来完成循环。进行更改合并请求批准规则时,可以看到更完整的更改视图。
将实例级合并请求设置作用域标记到符合性的项目(PREMIUM及以上)
以前,当管理员在"管理区域"中配置合并请求设置时,实例中的所有项目都会继承这些设置。对于希望将不同的,更灵活的要求应用于不受管制的项目的客户而言,这种继承模型过于广泛。
新版本中,使管理员能够指定希望在其上强制执行这些实例级设置的项目合规性框架标签,从而提供了更大的灵活性。选中框架标签后,只有带有相应合规性框架标签的项目才会继承这些设置,并且只能由管理员在实例级别进行编辑。
该功能使注重合规性的组织可以确保未经授权的用户无法编辑这种严格的职责分离控制,这将在合规性方面造成差距。
该功能仅仅适用于自建gitlab实例。
从"问题列表"批量编辑Epic中的多个问题(PREMIUM及以上)
通常有必要将多个问题分配给Epic,以共同组织工作。新版本可以一次批量编辑多个问题的Epic任务。可以从"问题列表"中执行此操作,从而减少了将工作正确分配所需的选项卡和单击次数。
导入问题时将Jira用户映射到GitLab用户
将问题从Jira导入到GitLab时,可以在运行导入之前将Jira用户映射到GitLab项目成员。这使导入者可以针对要移至GitLab的问题设置正确的报告者和受让人。
REST API支持以重新排序问题
新版本中,可以通过REST API更改问题的相对顺序。在此版本之前,无法以编程方式对问题进行重新排序。对于尝试支持自定义Board接口的API使用者而言,这曾经是个棘手的问题。
批量建议
在合并请求中提出更改建议可以使提议的建议变得容易,但是如果收到很多建议,则一一应用这些建议会很慢。使用"批量建议",可以一次应用多个建议,更快,更轻松。对保持合并请求提交历史记录的整洁也大有裨益。
Gitaly群集TLS支持
Gitaly Cluster新支持传输层安全性(TLS),当同时为Gitaly和Praefect组件启用TLS时,Gitaly及其客户端,GitLab和Praefect之间的所有通信都会被加密。在将GitLab部署到具有其他不受信任的内部服务的网络时,这很有用。
以前,GitLab和Gitaly之间的通信支持TLS加密,但是使用Praefect(Gitaly Cluster的组成部分)时不支持加密。
使查找问题的设计更加容易
由于设计是产品开发过程的重要组成部分,而且要能很容易找到已创建并添加到问题中的设计。
在13.2之前,已经具有设计选项卡,但是已经将设计上移,被转移到问题描述的下方。这会鼓励更多的协作,并确保每个人都能在问题描述的下方看到设计。
Web IDE中.gitlab-ci.yml的实时反馈
GitLab CI是快速且高度可配置的,但是可能很难记住所有配置参数,并且错误可能会使得.gitlab-ci.yml文件无效。为了更轻松地配置的GitLab CI管道,Web IDE在编辑.gitlab-ci.yml文件时提供了实时更新和完成功能。
Web IDE内联提供了提示和完成反馈以及工具提示,以帮助理解为什么会出现错误。
Gitaly Cluster的事务性写入beta版
Gitaly Cluster允许在多个热Gitaly节点上复制Git存储库。通过消除单点故障来提高容错能力。但是,由于写操作当前是异步复制的,因此GitLab服务器最初仅具有一个更改副本。
在GitLab 13.2中,可以为Gitaly Cluster启用对Git存储库的事务写操作。启用此选项并将更新推送到GitLab时,写操作将被代理到副本Gitaly节点。将使用两阶段提交协议在Gitaly节点之间协调写操作,以便它们就存储库的新状态达成共识。当前,写事务仅限于通过HTTP和SSH Git接口推送的操作,并且不包括通过GitLab接口(如Web IDE)进行的写操作。
代码质量合并请求小部件已被免费
在9.3版本中,GitLab Starter/Bronze版本中添加了代码质量扫描,可以直接在合并请求中查看代码质量的变化。从该数据对于任何规模的团队(包括个人贡献者)都是有价值的。
在13.2中,都可以在合并请求中查看代码质量报告。
CI工件路径中的文件排除
使用新的exclude语法,可以防止将特定文件添加到工件。这样就无需显式引用应添加到工件中的每个文件夹的路径,避免包含过多文件夹。对通配符(全局和双星全局)的支持使排除整个子目录变得容易。
从合并中删除MR时发出通知(PREMIUM及以上)
如果将合并请求添加到MergeTrain,但由于问题被系统删除,会以"待办事项"任务的形式收到通知。所以可以放心地将MR添加到MergeTrain中,知道合并将自动发生,或者将收到失败通知。如果合并不成功,则可以快速纠正错误并重新提交MR。
触发作业与下游管道的视觉关联
如果查看了一个复杂的管道图,希望有一个简单的方法来知道哪个作业触发了特定的下游管道,该功能已经被支持。
在新版中,只需将鼠标悬停在下游管道上,即可看到一个工具提示,该工具提示为触发该管道的作业命名。无需浏览所有作业名称即可找到一个,因为悬停操作还会在上游管道中突出显示触发作业。
合并请求中的多种Terraform计划支持
在单个Terraform管道中,可能会影响多个基础结构环境。以前,GitLab仅对单个环境启用了合并请求中预期更改的快速概述。
从GitLab 13.2开始,Terraform Merge Request小部件支持多个Terraform工件文件。
从GitLab用户界面访问Opsgenie(PREMIUM及以上)
Opsgenie是用于操作任务(包括警报和事件管理)的流行IT服务管理工具。
在GitLab 13.2中,可以直接在GitLab中启动Opsgenie工作流程。
自动分组相同的告警以减少噪音(PREMIUM及以上)
维护IT服务的团队每天都会收到成百上千个告警。新版本中manbetx客户端会去重数据并对其筛选,然后再发出告警,提供告警计数,使告警列表可管理和有用。将告警与从告警创建的事件进行关联,可帮助跟踪已解决的告警以及还需要分类的警报。
OAuth用于手动配置的Prometheus服务器
要使用手动配置的(外部)Prometheus服务器,GitLab认证用户可能会出现问题。
在Gitlab 13.2中,可以使用OAuth,以确保身份验证安全且易于管理。
使用PromQL设置指标仪表板变量
在Gitlab 13.2中可以使用PromQL在指标仪表板中设置变量。PromQL查询可以返回值列表,以用作指标仪表板中的动态变量。
指标仪表板的vanity URL
GitLab 13.2引入了vanity指标仪表板URL,以帮助用户在不同的仪表板和项目之间快速导航。
零停机时间为高级全局搜索重新编制索引(STARTER及以上)
在先前版本的Advanced Global Search中,如果需要重新编制索引,则必须计划Advanced Global Search关闭。删除索引并创建新索引时,搜索将不可用。在13.2中,添加了索引别名,可以通过在管理员设置中按一下按钮来重新索引而不会造成任何停机。
选择延迟项目删除(PREMIUM及以上)
在GitLab 13.2中,改进了项目删除体验,使其在所有版本中均保持一致,并引入了组级别的切换功能,使用户可以在永久删除之前启用删除延迟时间。此前免费版本是立即删除,而对收费用户是延迟7天清理。
新版本中所有版本删除项目后会立即删除该项目。为了确保在此工作流程中仍然具有灵活性,对付费版本的用户可以在组级别自定义设置"启用延迟的项目删除"。
从问题列表中批量编辑问题健康状况
在管理和计划多个问题时,分别更新每个问题的健康状况可能很麻烦。
在新版本中,可以从问题列表一次选择多个问题进行批量操作。
折叠路线图上的里程碑(PREMIUM及以上)
在共享、查看或展示路线图时,通常需要最小化某些部分或调整为合适的受众显示的信息。GitLab新版本允许最小化路线图的里程碑部分,以显示更多Epic或隐藏不必要的信息。
新的Epic创作页面(PREMIUM及以上)
通过新的Epic创建页面,只需一步即可创建Epic并填写描述,添加标签并设置开始/到期日期。
按最新活动查看Epic提要(PREMIUM及以上)
从最早到最新的讨论和系统注释的默认顺序对于某些用例非常有用。但是,当团队处于分类和应急模式时,就显得无足轻重,因为需要一直滚动到Epic的末尾才能看到最新的更新。
新版本中支持颠倒默认顺序,并与活动Feed互动,最顶部的是最新项目。对Epic的首选项将单独保存在本地存储中,并自动应用于个人查看的每个Epic。
新存储库的可配置默认分支名称
创建新的Git存储库时,默认情况下,创建的第一个分支名为master。GitLab新版本中允许实例管理员为通过GitLab界面创建的新存储库配置默认分支名称。
跟踪设计中的活动
GitLab设计中目前已经添加了活动,用于在的用户个人资料,组页面和项目页面上上传,修订和评论设计方案,可以一目了然地跟踪对设计的操作。
GitLab Core中的可选合并请求批准
代码审查是每个成功项目的基本实践,一旦合并请求状态良好,就需要批准,这是审查过程的重要组成部分,因为它清楚地传达了合并变更的能力。对于Core用户,通常是通过发表评论或点赞来完成,但是这些批准形式很容易丢失。
在13.2中,具有开发者权限的任何人都可以在GitLab Core中批准合并请求。这使审阅者很明显如何获得批准,并使维护者更容易知道何时准备合并更改。批准在GitLab Core,但是在Starter及更高级别的用户需要批准才能将代码合并到代码库中。
将Wiki重定向到Confluence工作区
在13.2中,新添加了Confluence集成,可将项目的左侧边栏直接链接到新选项卡中的Confluence工作区。
Wiki页面差异
Git用户经常严重依赖文件差异来观察,查看和跟踪内容更改。在GitLab 13.2中,新增加了对在Wiki页面上查看差异的支持。可以通过Wiki提交历史记录无缝查看两个版本之间的逐行内容更改。
覆盖徽章的自定义文本
使用多个coverage徽章,但每个徽章计算不同值的项目只能coverage用作每个徽章的文本。这使得弄清楚该值的含义很麻烦。
项目维护者或所有者,可以自定义Coverage徽章的文本,以更好地区分项目上显示的多个Coverage徽章。
查看和管理组runner
新版本中可以利用新的组管理用户界面(UI)来管理组织的运行者。在该新用户界面中,可以查看,编辑,暂停和停止与组关联的任何Runner。这样可以更轻松地一次解决多个项目的Runners潜在问题。
验证标签清理策略正则表达式
可以通过创建每个项目的标记清除策略来定期从Container Registry中删除较旧的标记。这些策略基于用户创建的正则表达式。不幸的是container_repository:cleanup_container_repository,与这些表达式相对应的工作遇到了25%的错误率。该Gitlab::UntrustedRegexp作业认为正则表达式无效,并且当策略失败运行时,不会通知任何人。
注释.gitlab-ci.yml中的非部署作业
从历史上看,environment:action关键字不能准确地表示未导致部署的环境作业,例如批准中的作业和为将来的部署构建映像。
在GitLab 13.2中,作业新包含一个prepare关键字,以使非部署环境作业的状态更加清晰,使其保持准确并代表部署活动。
对Terraform State API的只读访问
目前,没有维护者访问权限的GitLab用户无法与Terraform命令(包括)交互terraform plan,该命令会创建对开发工作流程有用的执行计划。
在GitLab 13.2中,具有开发者角色的用户获得对Terraform状态API的只读访问权限,从而使更多用户可以做出贡献而不会冒着使用不当的风险。
告警详细信息页面显示系统备注
当更改警报的状态,将其分配给团队成员或通过警报创建问题时,GitLab会跟踪这些事件并将它们显示在告警详细信息页面上的备注部分。备注为响应者提供了有用的上下文,使团队在对告警进行分类时可以更好地进行协作,并防止不必要的重复工作。
指标仪表板中面板的键盘快捷键
在GitLab 13.2中支持使用键盘快捷键与指标仪表板进行交互。使用键盘快捷键,可以在对事件进行分类的同时快速浏览仪表板,从而加快响应流程。
在告警列表中搜索纯文本
告警通常很嘈杂。为了帮助找到需要分类的相关警报,并优化显示警报的列表,可以在告警列表中进行纯文本搜索。
触发测试以进行告警集成
配置告警系统以将告警路由到GitLab REST端点后,可以触发测试告警以确保正确配置了系统。
用于高级全局搜索的Amazon ECS角色身份验证(STARTER及以上)
AWS上连接到Amazon Elasticsearch Service以启用Advanced Global Search时,只能通过使用静态证书或EC2 IAM角色Aws::InstanceProfileCredentials。新版中,作为附加的身份验证选项,可以将IAM角色用于Amazon ECS任务。
Patroni可作为repmgr的实验替代品
对于自建的GitLab实例,可以选用Patroni作为PostgreSQL复制和故障转移替代解决方案。用Patroni取代repmgr,带来了很多改进。使用Patroni,发生故障的主节点在恢复联机时会自动作为备用节点添加回群集。Patroni的添加也使无法添加对PostgreSQL 12的支持,也无法在Geo辅助站点上支持PostgreSQL复制和故障转移。Patroni与Geo的结合使用目前正在测试中,目前还尚不支持。
Repmgr将在Omnibus GitLab中继续可用,直到GitLab 14.0。
Omnibus的改进
自带的Nginx响应的最小大小已经从10,240字节压缩到250字节。这样可以减少需要多个数据包的请求数量,并减少加载网页所需的时间。
Omnibus安装软件已经支持Ubuntu 20.04和SLES 12.5。
GitLab 打包的Chef版本更新到Chef 15。
GitLab打包Mattermost版本更新到 5.24,包括改进的最终用户搜索,改进的会话体验等等。它还包括安全更新,建议从早期版本升级。
配置对象存储的设置已合并,可以在中的同一部分中配置所有对象的对象存储gitlab.rb。这是一项巨大的改进,使对象存储配置更加高效,包括能够将单个凭据用于多个S3存储桶中的对象存储。可使GitLab Workhorse可以直接使用其S3客户端上传文件,而无需使用预先签名的URL。
GitLab Runner 13.2
同期发布了GitLab Runner 13.2,更新包括:
在Shell Executor中启用PowerShell Core支持;
向Docker网络添加标签;
和下面的bug修复
图像名称无效时,Kubernetes运行程序超时。
在PowerShell执行程序中支持UNC路径。
设置git TLS配置时,使用CI URL代替克隆URL。
所有更改详见GitLab Runner 变更文档
GitLab Runner对IBM Z上的Linux的支持
使用IBM大型机的GitLab客户和贡献者正在采用现代的DevOps实践,并希望能够直接在其硬件上运行GitLab Runners。基于不断增长的兴趣来扩展对z/OS大型机的平台支持,提供了初始版本GitLab Runner二进制Docker和帮助程序镜像,可以使用其在Linux下的s390x体系结构上IBM Z环境本地运行和执行CI作业。
GitLab Helm chart改进
跨多个发行版完成的工作最终导致初始化基于Rails的Pod的时间减少了5倍以上,并应用程序启动时间减少了25%。可以显著更快地对Webservice和Sidekiq部署扩展。
K8S 1.13 为最低受支持的版本,不再支持K8S 1.12及更老的版本。
项目更快的Geo复制性能(PREMIUM及以上)
GitLab Geo使分布式团队可以更有效地工作,创建并维护本地的GitLab副本可以减少延迟,避免文件远程下载造成的延迟。
在此次对Geo的更新中,改进了数据库管理更改的方式。为了确定需要从主数据库复制什么,Geo将跟踪数据库与只读辅助数据库进行比较。如果Geo的数据库查询超时,则无法成功复制数据。
在GitLab 13.2中,使用了一种新方法来同步工程,从而消除了数据库语句超时的可能性。新版本还改进了所有数据源的辅助节点删除数据的方式,从而提高了GitLab Geo的总体可扩展性和性能。
这些迭代减少了Geo对Foreign Data Wrappers的依赖,后者是为提高性能而添加的,但是这使Geo更加复杂且难以维护。
gitlab Geo高可用集群更新
Geo支持复制GitLab软件包注册表(PREMIUM及以上)
Geo新支持将Package Registries复制到辅助节点,从而允许分布式团队从最近的Geo节点访问它们,从而减少了延迟并改善了整体用户体验。此外,在故障转移到辅助节点时,还可以从辅助节点还原Package Registry资产。
Geo支持在Geo辅助数据库上暂停数据库复制(PREMIUM及以上)
Geo将数据从一个主要Geo节点复制到一个或几个Geo辅助节点。虽然Geo支持通过管理员界面暂停对存储库和文件的复制,但无法暂停数据库复制。
在13.2中,Geo支持在辅助Geo节点上使用新的gitlab-ctl geo:pause和gitlab-ctl geo:resume命令暂停和恢复所有复制数据的复制,包括PostgreSQL数据库。
这使系统管理员可以在辅助地理节点上暂停所有复制,同时在主要地理节点上执行关键维护操作。如果主节点发生故障,则不会将任何更改复制到已暂停的辅助节点,然后可将其用于故障转移。
Geo的故障转移preflight-checks命令检查复制状态(PREMIUM及以上)
使用GitLab Geo执行故障转移时,系统管理员应使用该命令执行许多预检检查gitlab-ctl promotion-preflight-checks。
在GitLab 13.2中,该gitlab-ctl promotion-preflight-checks命令自动检查复制状态并通知结果,从而删除了以前手动执行的步骤。该gitlab-ctl promote-to-primary-node命令还支持强制模式,这意味着即使某些预检检查失败,故障切换仍将继续。
Geo设置表单更易于阅读和验证输入(PREMIUM及以上)
系统管理员可以使用管理员界面为各个节点调整地理设置。到目前为止,这些表单包含一些过时的用户界面元素,显示了太多可选信息,并且某些输入未得到正确验证。
在GitLab 13.2中,单独的Geo节点设置和常规Geo设置会验证用户输入,并分为不同的部分(例如,性能和资源管理),以使系统管理员更容易找到相关设置。
安全和合规性审计
容器主机监视和阻止
容器主机监视和阻止此初始功能允许安全管理员通过监视和有选择地阻止主机级别的意外活动来在保护其上在运行的容器。该类活动包括进程启动,文件更改或打开的网络端口。该功能使用Falco提供监视功能,并用AppArmor和Pod安全策略提供阻止功能。
切换个人访问令牌(PAT)到期的执行(ULTIMATE)
新版本中,当定义了生存期限制并且个人访问令牌达到或超过了生存期限制时,可以切换PAT凭证过期的实施。这种可选的实施方式为组织提供了灵活的方式来管理组织的证书轮换。此项更改是更大解决方案的一部分,解决方案使GitLab中的凭据管理既对组织有效,又对开发人员友好。
JavaScript和TypeScript SAST分析器免费开放
为了帮助开发人员编写更好的代码,而不必过分关注于常见安全问题。静态应用程序安全测试(SAST)通过允许开发人员在编写代码时轻松识别常见的安全问题并主动缓解,从而帮助防止了安全漏洞。
GitLab作为回馈社区的一部分,Gitlab新版本中对JavaScript和TypeScript的SAST分析器(ESLint)免费给社区core开放。未来将继续将其他开源(OSS)SAST分析仪免费给Core。
显示凭据清单中已过期或已撤销的SSH密钥和PAT(ULTIMATE)
管理用户凭据是任何合规性计划的重要组成部分,并且要求负责确保遵循策略的合规性专业人员具有可见性。凭据清单会突出显示已过期的所有SSH密钥或个人访问令牌(PAT)。此外,还将突出显示已撤销的PAT,以向合规专业人士提供进行用户凭据审查所需的必要见解。
Bug修复
GitLab 13.2中修复了很多Bug,包括:
修复预接收hook不适用于符号链接路径;
推送以以下内容开头的文件后修复500错误;
修复Conan软件包上传时的500错误;
当项目包含句点时,修复存储库归档中的404错误;
修复审核事件IP地址的错误显示;
大小写混合的用户/组网站的页面URL不正确;
从环境为空状态中删除按钮;
页面访问控制不会在身份验证中获取自定义CA证书;
更新Git TLS设置以配置回购URL,而不是GitLab URL;
修复PowerShell执行程序中对UNC路径的支持;
搜索框不再显示项目或组;
高级搜索无法在某些特殊字符后搜索低级驼峰式令牌;
高级搜索无法在没有空格的情况下搜索等号;
高级搜索佣金任务gitlab:elastic:index无法按设计工作;
代码覆盖率图表日期从最新到最旧的顺序;
Epic中添加问题失败时显示错误消息;
当服务台问题移至未启用服务台的项目时显示警告;
订阅降级后,无法从父级中删除子Epic;
竞争条件使创建重复标签成为可能;
处理卡死的Jira导入作业,并通过适当的超时消息使它们失败;
从Jira Server导入不起作用;
首次提交合并请求时显示误导性消息;
刚创建管道时,更改"无法检索管道状态"错误状态;
使用API更新环境变量的作用域失败;
当文件访问仅限于项目成员时,审核员用户无法访问公共项目和内部项目;
竞争条件使创建重复标签成为可能。
性能改进
在GitLab 13.2中,在问题,项目,里程碑等方面提高性能,其中一些性能改进包括:
搜索API:提交范围;
群组搜索API:merge_requests范围;
加快显示作业日志;
用于高级搜索索引的文件路径正则表达式;
差异树的列表;
差异线注释按钮;
查看代码时一次显示一个文件;
在GraphQL中查询子主题时的最大页面大小限制;
在Ci::BuildNeed上启用BulkInsertSafe。
功能弃用
TSLint Secure分析仪的弃用和计划中的拆除
删除日期:2020年9月22日
ESLint Secure分析器的最新更新包括对TypeScript的新支持,该支持得到了积极维护。自2019年以来,TSLint项目已被弃用,转移到ESLint。Gitlab已经将这些分析仪整合到了GitLab的ESLint分析仪中,TSLint分析仪已过时。
GitLab将在13.2 中弃用TSLint Secure分析器,并已从SAST模板中删除TSLint作业定义。对于利用自动DEVOPS或include在GitLab安全SAST模板无需进行任何操作,当更新到GitLab 13.2会自动帮你更新。建议任何在自定义CI模板中使用TSLint SAST作业的人迁移到更新的ESLint作业。
在此转换之后下一次执行SAST作业时,可能会看到以前显示的TSLint漏洞被标记为"已解决",并且看到ESLint的新TypeScript漏洞。由于来自ESLint的新的独特漏洞签名与旧的TSLint作业扫描漏洞签名不同,因此该行为可预期。
转换GitLab Bandit Secure分析仪OS镜像
变更日期:2020年9月22日
为了简化和更新GitLab安全SAST分析仪, GitLab Bandit Python分析仪镜像从Debian Buster 改变为Alpine Linux。该变更可以减小镜像大小,并提高分析仪的速度和安全性。
尽管预计影响有限,但该变化向后不兼容。如果使用a before_script构建Python项目依赖,则应在升级到GitLab 13.4之前对其进行测试。在SAST故障排除文档中添加相关内容。
升级更新
Omnibus版升级
通过Omnibus安装的自建实例可直接使用Linux包管理器可以升级。例如对CentOS:
yum updata/install gitlab-ce
就能自动完成升级:
docker安装的实例
先停止和删除旧的容器:
sudo docker stop gitlab
sudo docker rm gitlab
然后Pull官方最新镜像:
sudo docker pull gitlab/gitlab-ce:latest
重新启动容器(启动参数和以前保持一致)即可,比如:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
Docker compose安装的实例
通过:
docker-compose pull
docker-compose up -d
有关升级到GitLab 13.2的重要说明
具有多个Web应用程序节点的GitLab安装必须先升级到13.1,然后才能升级到13.2。这是由于Rails的重大更改,如果不遵循此升级路径,可能会导致授权问题。
GitLab 13.2.0 启用了电子邮件验证。升级后,如果某些用户在登录时意外遇到404或422错误,或者在使用命令行时出现阻止消息,则可能是未确认其账户。在这种情况下,先请他们检查电子邮件以获取重新确认链接。
Pre-receive和update服务器端Git hook,已经在Go中被重实现。若想要改为使用原始Ruby版本,需要设置对应可以用的功能标志。
引言
Laravel框架内提供了 Str,Arr 等帮助类,用于字符串操作,数组操作,将PHP内置的 str 开头的函数,和 array 开头的函数,使用面向对象的方式进行操作。
如果我们要写一些全局使用的助手函数,应该如何加载到 Laravel 框架内呢?本文就来说一说。
学习时间
首先我们创建一个文件,比如路径地址就在 app/lib/helper.php 内。然后声明一个函数:
if (! function_exists('checkWorking')) {function checkWorking() { return "Hey, it's working!"; } }
然后打开 composer.json 文件,在文件加载的配置部分,添加如下信息:
"autoload": {.... "files": [ "app/lib/helpers.php" ] },
这样写框架还不会自动加载,我们需要使用 composer 指令更新系统的自动加载文件。在根目录,命令行内执行:
composer dump-autoload
之后在框架内的任何地方,就可以直接访问 helper 文件内声明的函数了。
Laravel 的方式
我们也可以使用laravel加载类库,注册类库的办法,进行助手函数文件的动态加载。首先创建一个 ServiceProvider,命令行内执行:
php artisan make:provider HelperServiceProvider
这会创建 HelperServiceProvider 文件,在 registe 方法内实现加载文件的逻辑:
public function register(){foreach (glob(app_path().'/lib/*.php') as $filename){ require_once($filename); } }
这一段加载很直观,就是使用 glob 函数扫描目录 app/lib/*.php 规则匹配的所有文件,并使用 require_once 方法加载进来。
当然了,写完这些,还是需要更新自动加载的代码,命令行执行
composer dump-autoload
效果与上一节相同。可是更方便在程序内处理,因为我们把加载逻辑,植入到了框架加载流程内,比较容易控制。
写在最后
本文通过2种方式动态加载助手函数到全局,一种是修改 composer 配置文件,一种是在 laravel 内使用“服务提供者”进行注册。
我们更倾向于于第二种方式,因为维护程序较为方便,也更直观,沿袭了框架开发的统一原则。
Happy coding :-)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
一、简介
swoole 内置实现了一个简单的httpServer类。swoole版的http server相对于php-fpm,最大优势在于高性能,代码一次载入内存,后续无需再解释执行,但是swoole_http_server对Http协议的支持并不完整,实际生产环境,一般是前面加一层Nginx,由Nginx解析一些静态css、js文件,php文件请求交由swoole处理
如示意图:
1、http_server本质是swoole_server,不过在协议的解析部分固定使用的是http协议解析
2、完整的http协议请求会被解析并封装在swoole_http_request对象当中
3、所有的http响应都通过swoole_http_response对象进行封装和发送
二、创建HTTP服务
使用swoole,通过几行代码即可写出一个异步非阻塞多进程的Http服务器
其中onRequest回调接收两个参数分别是swoole_http_request对象和swoole_http_response对象,分别负责request请求和response响应。
三、swoole_http_request
swoole_http_request,负责http请求的相关信息。我们可以在这个对象上,获取header\server\get\post\files\cookie等信息,这等同于php的超全局变量,但是这可不是超全局的。
注意事项:
1、Swoole的HttpServer可以接受application/x-www-form-urlencoded/form-data类型的POST参数,并且会将解析后的参数存放在swoole_server_request对象的post成员变量内。
对于application/json或者其他类型的请求参数,Swoole底层并不会自动解析。但是Swoole的swoole_server_request提供了rawContent方法可以获得原始的POST字符串,我们可以根据Content-type类型做相应的解析。
2、POST/文件上传需要设置临时文件位置(upload_tmp_dir),并且需要设置包的大小,最大尺寸受到 package_max_length 配置项限制,默认为2M,调用$response->end后会自动删除,在end之后操作上传文件会抛出文件不存在错误。
四、swoole_http_response
swoole_http_response,负责处理HTTP响应信息,包括响应的头信息header\响应状态等,跟传统的HTTP请求和响应差别不大,比较简单,大概了解下即可。
具体方法如下:
注意事项:
请在end()之前设置相应的响应头、状态等等,end操作后将向客户端浏览器发送内容,并销毁request/response对象
五、简单案例实战,路由
Swoole的HttpServer的路由需要开发者自己手动实现。我们可以通过访问$request->server['path_info']来获取到客户端请求的路由信息,然后根据开发者自定的路由规则就可以进行派分了。这里给大家一个思路自行实现一下。
1、通过server['path_info']获取到路由信息
2、定义好相应的规则对请求目录进行分割,比如(模块\控制器\方法)
3、注册spl_autoload_register
4、拼接命名空间的地址实例化时自动触发autoLoad进行加载
六、多端口监听
在实际运用场景中,服务器可能需要监听不同host下的不同端口。比如,一个应用服务器,可能需要监听外网的服务端口,同时也需要监听内网的管理端口。在Swoole中,可以轻松的实现这样的功能。Swoole提供了addlistener函数用于给服务器添加一个需要监听的host及port。关于函数的介绍官方文档已经说的比较清楚
七、多端口混合协议监听
场景:服务端可以接收硬件传感器通过udp协议上报温度,同时服务端也允许用户端发送http请求,由服务器发送请求关闭掉硬件设备
WP-Rocket 提供了 Nginx 插件用于绕过 PHP 直接返回缓存的静态HTML,安装启用后网站可以达到飞一般的速度。
这里以宝塔面板为例介绍如何安装此 Nginx 插件。
1.关闭 WP 的 Cron 定时任务
由于此插件的目标是直接提供缓存文件,而无需从 WordPress 执行任何 PHP,这可能会导致不调用计划作业。因此,强烈建议关闭 Cron 定时任务。
在wp-config.php添加define('DISABLE_WP_CRON', true);
在宝塔面板->计划任务添加访问URL:https://你的网站/wp-cron.php?doing_wp_cron频率每15分钟一次。
2.下载插件
首先 SSH 连接上服务器,并以root用户登录,进入 Nginx 安装目录。
cd /www/server/nginx接着从 GitHub 下载插件的源代码。
git clone https://github.com/satellitewp/rocket-nginx.git3.初始化并安装插件
进入插件目录生成配置文件。
cd rocket-nginxcp rocket-nginx.ini.disabled rocket-nginx.iniphp rocket-parser.php完成后可以断开 SSH 连接,回到宝塔面板->网站->设置->配置文件。在文件末尾}前面加上下述内容,保存重启 Nginx 即可。
# Rocket-Nginx configurationinclude /www/server/nginx/rocket-nginx/default.conf;4.测试效果
在未登录 WP 的情况下打开 F12 控制台,可以看到下述内容。
5.若不为Yes的可能原因
POST请求:对 Web 服务器的请求是 POST。GET带参数:在请求中找到了一个或多个参数(例如?page=2)。WP维护模式:找到.maintenance。因此,让 WordPress 处理应该显示的内容。Cookie:找到特定的 Cookie,并告知不要为缓存的页面服务(例如用户已登录,使用密码发布)。设置了移动缓存:如果在 WP-Rocket 中设置了为移动端单独缓存,则不会直接提供 HTML 文件,因为 Rocket-Nginx 无法知道请求是由移动还是桌面设备发出的。未缓存文件:未找到该请求的缓存文件。除非注明,否则均为耗子博客原创文章,转载必须以链接形式标明本文链接。
2018 年,Gitee 正式推出了 CopyCat 代码克隆检测服务。CopyCat 是 Gitee 在 NiCad Clone Detector 项目的基础上对性能进行优化和调整而推出的代码克隆检测服务,是基于 NiCad 技术的代码克隆检测技术。CopyCat 可用于分析两个项目在代码结构上的相似度,从而识别是否存在代码抄袭的问题。
目前, CopyCat 检测工具已经同步到 NICAD5 版本,此版本已经对 PHP/Ruby 进行了支持 。
Ruby 检测效果图:
PHP检测效果图:
经过本次更新,CopyCat 现已支持 Java / C / C# / PHP / Ruby 五种语言的代码克隆检测。
我们接着上一节的内容。
01php并值运算
在php中,只有一个字符串运算符,就是“.”,用于将两个字符串连接起来。使之看起来更为连贯。如下图示例是将两个字符串连接到了一起。
将两个字符串链接起来的实例上图中的代码输出结果为:Hello world! What a nice day!
02php的strlen()函数
如果学习过C/C++的人对这个函数都比较熟悉,该函数是用来计算字符串的长度的!常用语while或者for等循环中,用于提示达到某个字符串的长度时,循环结束。
例如,我们想要通过php来计算一个字符串的长度,可以通过如下代码来实现:
<?php
echo strlen("This is php");
?>
上述代码运行结果为:11(this is php 的长度)。
03PHP strpos() 函数
strpos() 函数:该函数用于在字符串内查找一个字符或字符串。
如果在字符串中找到匹配的字符或者字符串,则会返回第一个匹配的字符位置。如果找不到匹配项,则返回 FALSE。
<?php
echo strpos("Hello world!","world");
?>
上述代码表示在Hello world!中查找world,由于前一个字符串包含了要查找的内容,所以该代码运行的结果就是返回world首字母所在的位置,也就是第六个位置,所以运行结果为6(数组的编号是从0开始第七个位置)。
04php数组
数组是一个能在单个变量中存储多个值的特殊变量。在php语言中,使用array()来创建数组。在 PHP 中,有三种类型的数组:
数值数组; 带有数字 ID 键的数组。$stu = array("Jhon", "Peter","Tom")关联数组:带有指定的键的数组,每个键关联一个值。例如:$age=array("张三"=>"25","李四"=>"26","王二"=>"27")或$age['张三']="25";$age['李四']="26";$age['王二']="27";多维数组: 包含一个或多个数组的数组。数组长度:使用count()函数。遍历数值数组:使用for\while等循环。如遍历上述数组中的配个元素并打印出来:$stu_length = count($age); for($i=0; i<$stu_length; $i++){echo $stu[$i]}遍历关联数组:使用的是foreach循环。对上述的关联数组进行循环代码如下:$age=array("张三"=>"25","李四"=>"26","王二"=>"27"); foreach($ageas$x=>$x_value){echo"Key=" . $x . ", Value=" . $x_value; echo"<br>";}
05数组排序常用函数
数组排序主要用到如下函数:
sort() :对数组进行升序排列rsort() :对数组进行降序排列asort():根据关联数组的值,对数组进行升序排列ksort():根据关联数组的键,对数组进行升序排列arsort() :根据关联数组的值,对数组进行降序排列krsort() :根据关联数组的键,对数组进行降序排列下图代码展示了使用ksort()函数对关联数组进行了升序排列
对关联数组进行升序排列php和array相关的部分函数说明上述就是本次为大家分享的内容,大家有什么看法,欢迎留言讨论,也希望大家多多点赞关注,祝各位生活愉快!
Windows7+IIS7+PHP+MySQL - 适用于(2008 R2 / 8 / 10)
配置需求
操作系统:Windows7(x32/x64), windows2008IIS版本:7.0PHP版本:7.0.6 及以上MySQL版本:5.7.12 及以上第一步:安装 IIS
注意:从IIS 7+PHP 5.5版本开始,Windows下PHP环境的配置完全不一样,相比之前版本的安装更快更轻松,配合FastCGI,只需鼠标简单操作一下就可以运行PHP环境。
1.找到”控制面板 => 程序和功能 => 打开或关闭Windows功能“
01.jpg
默认”Internet 信息服务“打勾安装
直接选择CGI,会自动安装FastCGI,不需要再安装ISAPI
02.jpg
2.新建网站目录
运行->inetmgr
03.jpg
右击”网站=>添加网站“
04.png
添加网站信息,一定按图片所示设置,除了路径自选
05.png
弹出”80端口占用“,意味着你将会有另一个网站【Default Web Site】同时占用80端口,解决办法:
点击取消,返回修改端口,重新确定。点击确定,每次使用时,关闭其中一个网站
06.png
第二步:安装 PHP
下载地址:http://windows.php.net/download/官网可以下载到Windows版的最新PHP包,但是PHP.net已经放弃5.6版以前的环境包,大叔这里整理了一份以前的环境包列表,有需要的同学可以自己去拿
百度云盘:https:///s/1BJgFhrCHRBj1VFkgGegZ8g访问密码:11mh
将PHP环境包解压后,找到php.ini-xxx文件
既然是本地开发测试,大叔建议:复制”php.ini-development“ 并粘贴,重命名为php.ini
文件名版本名称备注php.ini-developmentphp.ini-dist(5.5版以后名称)(5.5版以前名称)拥有较低的安全性设定,对权限设置适合开发程式使用php.ini-productionphp.ini-recommended(5.5版以后名称)(5.5版以前名称)拥有较高的安全性设定,则适合正式上线的服务器中使用配置 php.ini
1.设置extension_dir插件
搜索并找到extension_dir = "",在""里面输入PHP插件ext目录所在的位置,extension_dir = "C:/ProgramFiles/XXX/XXX/php目录名/ext"
07.jpg
搜索并找到extension_dir=,会找到插件目录列表,大叔建议打开以下插件(去掉前面”;“)维持大部分的PHP网站功能,如果有其他需求再打开其他插件(注:配置一次PHP.ini就需要重启一次IIS)
插件名插件功能extension=php_bz2.dll压缩插件extension=php_curl.dll远程粘贴extension=php_gd2.dllGD库extension=php_mbstring.dll短标签extension=php_mysql.dllMySQL老引擎extension=php_mysqli.dllMySQL新引擎extension=php_pdo_mysql.dllMySQLPDO连接
08.jpg
2.设置时区:date.timezone = Asia/Shanghai
09.jpg
3.IIS 添加 PHP 支持
运行->inetmgr
10.jpg
打开:处理程序映射
11.png
打开:添加模块映射
12.png
填写如下内容
13.png
确定会有提示,点击”确定“
14.png
映射程序添加成功,列表中会有一条PHP程序映射记录
15.png
这样一个IIS+PHP环境就搭建好了。
PHP包:版本/型号区别
5.5版本之前Windows配置IIS+PHP,需要安装VC9Windows配置Apache+PHP,需要安装VC65.5版本之后只有VCXX了,只要选线程方式和32位/64位系统就可以了Non Thread Safe是指非线程安全,Thread Safe则是指线程安全使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本使用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率FastCGI 进程错误汇总
错误1:php-cgi.exe - FastCGI 进程意外退出
打开http://localhost页面,提示以上错误,95%以上就是环境对应的VC版本没装对。
你需要寻找PHP VC号对应的Visual C++ Redistributable for Visual Studio开发版本:
VC号VS对应版本号VC6VC6.0VC7VS2002VC7.1VS2003VC8VS2005VC9VS2008VC10VS2010VC11VS2012VC12VS2013VC13VS2014VC14VS20155.5版本需要安装 VS20125.7版本需要安装 VS2015
错误2:发生未知 FastCGI 错误错误代码为0x8007010b
如果之前的安装严格按照本文所述,那应该考虑权限问题,是否把PHP、Apache、MySQL程序放置在了C盘的严控权限位置(比如桌面)。
将程序文件夹添加人员【Everyone】,权限为【所有】,重新刷新页面即可。
第三步:安装 MySQL
下载地址:https://dev.mysql.com/downloads/mysql/
百度云盘:https:///s/19ffxCVYgTUbmMzNwI8CB6g访问密码:l5fb
大叔建议使用免安装版,使用CMD方式安装,是最容易熟悉MySQL的方法,本文的安装流程是以绿色版为标准。百度网盘是本文配套的MySQL 5.7 官方免安装版
进入官网下载页面,拖至最下面,或在页面搜索 Other Downloads:
24.png
32位系统下载:Windows (x86, 32-bit), ZIP Archive64位系统下载:Windows (x86, 64-bit), ZIP Archive
配置 my.ini
【my.ini】是MySQL安装使用的核心文件,安装与使用都需要靠他来引导。
将文件下载后解压,复制 my--default.ini 复制并重命名为 my.ini(新版的好像都不再带 my--default.ini,所以自己在根目录下建一个 my.ini)
1.设置MySQL安装路径
在 my.ini 中,一定要存在下面的字符,如果不存在,就自己码进去,然后保存,
[mysqld]#skip-grant-tables #这名加上可以跳过验证basedir= C:/User/Administrator/XXX/XXX/mysql-noinstall-5.1.53-win32 #根目录#datadir=C:/User/Administrator/XXX/XXX/mysql-noinstall-5.1.53-win32/data #数据文件存放目录2.人工安装 MySQL
打开CMD控制台
16.png
通过CMD的 cd 命令,进入MySQL的根目录下的bin文件夹
17.png
在bin文件夹下分别输入下面三条指令:
mysqld --install MySQL 回车(成功会提示,S开头字母)mysqld -remove 回车(如果安装位置出错,就用这个命令删除配置,然后重新安装。)net start mysql 回车(成功会提示服务已经运行)如果安装成功,就可以通过CMD命令,轻松开启/关闭MySQL了
18.png
注意:保存【my.ini】时编码一定设为Ansi,否则会报如下错误
error: Found option without preceding group in config file: D:\Program Files\mysql-5.6.25-winx64\my.ini at line: 1Fatal error in defaults handling. Program aborted。
这时,你在CMD中运行net start mysql命令,恭喜,你进入了MySQL的的卡死循环状态中。
错误提示解决方案汇总
1.服务无法启动
C:XXX>mysql>bin>net start mysqlMySQL 服务正在启动 ....MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。
解决方案:【MySQL】服务无法启动,服务没有报告任何错误的解决办法
2.新安装MySQL,Root空密码无法登录
MySQL> mysql -u root -pEnter password:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决方案:【MySQL】免安装版安装并启动成功后,无法登录,root帐户密码强制重设
第四步:设置伪静态
1.下载 IIS 7 的 Microsoft URL 重写模块 2.0 模板
官网64位:http://www.microsoft.com/zh-cn/download/details.aspx?id=7435官网32位:http://www.microsoft.com/zh-cn/download/details.aspx?id=5747IIS URL Rewrite下载地址:http://www.iis.net/download/URLRewrite
2.设置web.config
<rewrite><rules><rulename="Rewrite to index.php"stopProcessing="true"><matchurl="^index.html" /><actiontype="Rewrite"url="index.php" /></rule><rulename="Rewrite to article.php"stopProcessing="true"><matchurl="^article_(d+).html" /><actiontype="Rewrite"url="article.php?id={R:1}" /></rule><rulename="Rewrite to list.php"stopProcessing="true"><matchurl="^list_(d+)_(d+).html" /><actiontype="Rewrite"url="list.php?id={R:1}&page={R:2}" /></rule><rulename="Rewrite to category.php"stopProcessing="true"><matchurl="^(.*)" /><actiontype="Rewrite"url="category.php?category={R:1}" /></rule></rules></rewrite>其他问题
问题1:File upload error - unable to create a temporary file in Unknown on line 0
原因:因为PHP的临时目录为不可读写
解决方案:
打开 php.ini 找到 upload_tmp_dir找一个位置为php上传临时目录,然后 upload_tmp_dir = "D://upload/"问题2:PHP Notice: Undefined variable
原因:PHP默认的配置会报这个错误,虽然有利于发现错误,但同时实践中会出现很多问题。
解决方法:
方法1:修改 **php.ini **配置文件 **error_reporting **设置:
找到 error_reporting = E_ALL修改为 error_reporting = E_ALL & ~E_NOTICE原理:减弱PHP的敏感程度,使其遇到这种问题不报错。(不推荐这种方式,会导致你错误的语法继续出错)
方法2:在PHP文件头部加入以下代码
<?php ini_set("error_reporting","E_ALL & ~E_NOTICE");?>同样也可以解决问题,但同样不推荐,这个方法。
方法3:修正你的语法,让你的代码更规范!!!
附录
Windows 2008 R2 IIS角色安装方法
Windows 2008 R2是服务器版本,所以安装IIS7时和非服务器版有些不同,需要使用角色系统安装
第一步:安装IIS
首先进入”控制面板=>打开或关闭Windows功能“
19.jpg
服务器版本进入的是服务器管理器,我们需要进入【角色】并添加角色来增加IIS功能
20.png
进入引导页,点击”下一步“
21.png
打勾”Web 服务器(IIS)“,点击下一步
22.png
一路下一步,记得把 **CGI **勾选上,不要勾选 ISAPI
等待安装过程
最后显示”安装成功 “,即大功告成。
23.png
Windows 10:MySQL my.ini 与 Windows7 不通用
Windows 7/8/10/2008R2 都使用了IIS7,使用及安装的方法几乎一致,但因为微软的老毛病,系统不同的情况下,Bug也会不同,这里大叔记录了一些安装其他系统时遇到一些情况记录。
MySQL的 my.ini 文件,各个系统之间不能通用,所以在安装时,无法直接把Windows7的MySQL直接移植过去,大叔就重写了 my.ini 就可以正常使用了。
[WinMySQLAdmin]Server="C:/Users/Administrator/***/***/***/mysql-5.7.16/bin/mysqld.exe" [client] no-beep # pipe # socket=mysql port=3306 [mysql]default-character-set=utf8 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the # *** default location during install, and will be replaced if you # *** upgrade to a newer version of MySQL. [mysqld] explicit_defaults_for_timestamp = TRUE# Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. innodb_buffer_pool_size = 2G # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. #basedir="C:\mysql-5.7.11-win32\" basedir = "C:\Users\Administrator\***\***\***\mysql-5.7.16\"#datadir="C:\mysql-5.7.11-win32\data\" datadir = "C:\Users\Administrator\***\***\***\mysql-5.7.16\data\"port=3306 server_id=1 general-log=0 general_log_file="mysql_general.log" slow-query-log=1 slow_query_log_file="mysql_slow_query.log" long_query_time=10 log-error="mysql_error_log.err" default-storage-engine=INNODB max_connections=1024 query_cache_size=128M key_buffer_size=128M innodb_flush_log_at_trx_commit=1 innodb_thread_concurrency=128 innodb_autoextend_increment=128M tmp_table_size=128M # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" character-set-server=utf8 innodb_flush_method=normal</pre>Dy大叔的日常
读书,摄影,旅行,简单而快乐的慢生活。
微信直接搜索
DYdashuderichang
开发XML-RPC WordPress规范是为了标准化不同系统之间的通信,这意味着WordPress外部的应用程序(例如其他博客平台和桌面客户端)可以与WordPress进行交互。
自WordPress诞生以来,该规范一直是WordPress的一部分,并且做得非常有用。没有它,WordPress将会处于自己的孤岛,与互联网的其余部分分离。
但是,xmlrpc.php有其缺点。它可以向您的WordPress网站引入漏洞,现已被WordPress REST API取代,该API在将WordPress开放给其他应用程序方面做得更好。
在本文中,我们将解释xmlrpc.php是什么,为什么要禁用它,并帮助您确定它是否正在WordPress网站上运行。
什么是xmlrpc.php?
XML-RPC是支持WordPress与其他系统之间通信的规范。它通过使用HTTP作为传输机制和XML作为编码机制来标准化这些通信来实现此目的。
XML-RPC早于WordPress:它出现在b2博客软件中,该软件于2003年创建了WordPress。该系统的代码存储在站点根目录下的xmlrpc.php文件中。即使XML-RPC在很大程度上已经过时,它仍然存在。
在WordPress的早期版本中,默认情况下已关闭XML-RPC。但是从3.5版开始,默认情况下已启用它。这样做的主要原因是允许WordPress移动应用程序与您的WordPress安装进行对话。
如果您在3.5版之前使用WordPress移动应用程序,您可能会记得必须在站点上启用XML-RPC才能使该应用程序能够发布内容。这是因为该应用程序本身未运行WordPress。相反,它是一个单独的应用程序,使用xmlrpc.php与您的WordPress网站进行通信。
但是XML-RPC不仅用于移动应用程序:它还用于允许WordPress和其他博客平台之间进行通信,还支持引用和pingback,并为Jetpack插件提供了动力,该插件链接了一个自托管的WordPress WordPress.com网站。
但是由于REST API已集成到WordPress核心中,因此xmlrpc.php文件不再用于此通信。相反,REST API用于与WordPress移动应用程序,桌面客户端,其他博客平台,WordPress.com(用于Jetpack插件)以及其他系统和服务进行通信。REST API功能更强,使用更灵活。
由于REST API取代了XML-RPC,因此您现在应该在站点上禁用xmlrpc.php。让我们看看为什么。
为什么要禁用xmlrpc.php
您应该在WordPress网站上禁用xmlrpc.php的主要原因是因为它引入了安全漏洞, 并且可能成为攻击的目标。
既然不再需要XML-RPC在WordPress之外进行通信,就没有理由保持它的活动状态。这就是为什么通过禁用站点来提高其安全性是明智的。
如果xmlrpc.php属于安全责任,并且不再起作用,那么为什么不将其完全从WordPress中删除呢?
这是因为WordPress的主要功能之一始终是向后兼容。如果您对网站进行了良好的管理,您将知道保持WordPress最新以及任何插件或主题是必不可少的。
但是总会有不愿或无法更新其WordPress版本的网站所有者。如果他们运行的版本早于REST API,则他们仍然需要访问xmlrpc.php。
通过XML-RPC Pingbacks进行DDoS攻击
xmlrpc.php启用的功能之一是pingback和Trackbacks。当另一个博客或网站链接到您的内容时,这些通知将显示在您网站的评论中。
XML-RPC规范使这种通信成为可能,但已被REST API取代(如我们所见)。
如果您的站点上启用了XML-RPC,则黑客可能会利用xmlrpc.php在短时间内向您的站点发送大量pingback,从而在您的站点上发起DDoS攻击。这可能会使服务器超载,并使站点无法正常运行。
通过XML-RPC的蛮力攻击
每次xmlrpc.php发出请求时,它都会发送用户名和密码进行身份验证。这带来了重大的安全责任,而REST API却没有做到这一点。实际上,REST API使用OAuth来发送用于身份验证的令牌,而不是用户名或密码。
因为xmlrpc.php随每个请求发送身份验证信息,所以黑客可以使用它来尝试访问您的站点。这样的暴力攻击可能使他们可以插入内容,删除代码或破坏数据库。
如果攻击者向您的站点发送了足够多的请求,每个请求使用不同的用户名和密码对,则它们最终有可能会被攻击到正确的请求,从而使他们可以访问您的站点。
因此,如果您正在运行WordPress的最新版本(使用REST API与外部系统进行通信),则应禁用xmlrpc.php。
xmlrpc.php是否在您的WordPress网站上运行?
您需要做的第一件事是确定xmlrpc.php是否正在您的WordPress网站上运行。
这不是检查文件是否存在的简单情况:它是每个WordPress安装的一部分,即使禁用了XML-RPC,它也将存在。
删除任何内容之前,请务必备份您的网站。在这种情况下,不要仅仅删除xmlrpc.php文件,因为它会破坏您的站点。
要检查您的站点上是否启用了xmlrpc.php,请使用WordPress XML-RPC验证服务。这将检查您的站点并告诉您是否启用了xmlrpc.php。
WordPress XML-RPC验证服务
这是我在服务上检查此站点时得到的结果。
XML-RPC检查
这表明xmlrpc.php在www.dianjin123.com已被禁用。但是,如果您运行检查并发现xmlrpc.php仍在您的站点上启用,如何关闭它?
如何禁用xmlrpc.php
有三种禁用xmlrpc.php的方法:
通过插件禁用xmlrpc.php无插件禁用xmlrpc.php让托管服务提供商禁用xmlrpc.php
让我们分别看看每个。
如何使用插件禁用xmlrpc.php
安装插件是禁用xmlrpc.php是最简单的方法。插件地址https://wordpress.org/plugins/disable-xml-rpc/。使用方法如下。
这个插件使用非常简单,简单的无需说明,只需要启用插件就可以。
如何无插件禁用xmlrpc.php
1、把下面的代码
add_filter('xmlrpc_enabled','__return_false');放到functions.php文件中。
2、通过.htacess文件禁用xmlrpc.php
在您的.htaccess文件中,添加以下代码:
<Files xmlrpc.php>OrderAllow,DenyDeny from all</Files>为避免遇到任何问题,请确保在此之前先备份旧文件。
让您的托管服务提供商禁用xmlrpc.php
可以在服务器配置文件Nginx.config中,添加:
location~*^/xmlrpc.php$ {return403;}这将产生403错误。
根据自己的实际情况,选择一种方法。
如果出现升级或通讯错误,请先关闭禁用。
本文来源点金主题网,欢迎转载,但请表明出处。
最近,网络上有很多网民就选择哪种编程语言进行学习而纠结。例如,关于Java和php的优势和不足,今天为大家分析一下Java语言和PHP语言的区别。
一、Java语言的优势和不足
Java是非常热门的编程语言,与其他高级语言相比,则是非常基础的语言。并且Java是跨平台的,具有Android,Swing,J2EE和J2ME等多种应用程序。就业方面比较广泛,市场利用者的需求也很大。由于Java经常开发大型系统,因此大型企业往往需要大量的Java资源。
Java学习门槛高于php,需要学习更多的内容,掌握Java技术,确实可能需要4个月以上,待遇相对高于php,据统计,一线城市Java程序员平均工资7000左右,有1年的工作经验,月薪8500-1万左右。
二、PHP语言的优势和不足
PHP主要用于开发网站,许多较小的网站都是使用PHP开发的。因为PHP是开源的,所以PHP长期使用的原因就在于此。在电子商务、社区和其他领域,PHP的应用非常广泛,因此PHP具有非常成熟的开放源代码和模板。
缺点是受众小,可替代性强。PHP是脚本语言,所以PHP学习比较简单,经过3-4个月的时间就能上手,并且找工作起薪比例比Java较低,平均工资比Java低,但是经验丰富的php程序员工资会要高一些。
无论您对PHP的熟练程度如何,这个全面的列表都会为您提供18种工具,使您的开发生活更轻松,更高效。
PHP是一种快速的脚本语言,无处不在的Web开发。WordPress使用该语言作为开发人员增强平台的核心接口。它相对容易学习,并得到开发社区的良好支持。
虽然PHP可以帮助开发人员快速创建Web应用程序,但是没有与该语言相关的开发环境。相比之下,Microsoft的Visual Studio等开发环境带有许多安装功能。Visual Studio具有开箱即用的开发人员可用的编码,调试和部署功能。
PHP有很多软件包和支持工具。然而,它们往往是分散和零碎的。这可能会给希望增强其虚拟工具箱的开发人员带来问题。这个方便的指南将汇集流行的工具,开发人员可以在他们需要将PHP开发置于过载时参考这些工具。
开发环境
PHP有许多开发环境。其中包括集成开发环境(IDE)和文本编辑器,以及将多个工具和流程合二为一的混合环境。
ScriptCase
ScriptCase.net
ScriptCase.net允许开发人员快速开发支持Web的应用程序。这些应用程序支持与数据库和报告生成的连接 该软件允许您在几秒钟内从原型到生产。成本可能会禁止小公司使用它。因此,它面向中型企业。
主要特征
连接到大多数主要数据库引擎。生成包括数据透视表的图表。创建交互式报告。导出PDF,XLS等常用格式。
成本
20天免费试用。初学者 - 每年279.20美元(仅限单个数据库)。专业 - 每年319.20美元。企业 - 每年479.20美元。
SublimeText
SublimeText.com
有理由在IDE上使用文本编辑器。有时,IDE可能对某些项目来说过度杀伤。此外,当开发人员首先学习一门语言时,IDE可以成为他们学习的拐点。这个文本编辑器非常适合没有大预算或大容量服务器的初创公司。
主要特征:
转到任何功能 - 可以在编辑器中立即跳转到文件,文本或行。拆分编辑。同时编辑 - 可以一起更改多个文本或代码实例。
成本
一次性收费80美元。
Eclipse PDT
eclipse.org/pdt
将Eclipse等工具归类为IDE变得越来越困难。它变得如此之多。Eclipse是为使用Java代码的开发人员创建的。它已经扩展到包括其他语言,如PHP。虽然这个工具是开源的,但对于初创公司来说可能有些过分。它占用了相当数量的计算资源,对于小公司来说可能是稀缺的。
主要特征
PHP中的代码分析。格式化代码。语法突出显示。代码模板。单元测试。调试。内容辅助。
成本
开源(免费)
Zend Studio
zend.com
Zend Studio是一个将PHP开发提升到新水平的IDE。它具有一组强大的功能,可以部署到任何服务器,包括云中的服务器。它声称针对PHP 7进行了优化,这比以前的版本快得多。Zend Studio是适用于任何规模公司的理想工具。
主要特征
广泛的Eclipse插件功能。部署到云,包括Microsoft Azure和Amazon AWS。无缝部署到Zend Server。Zend Server实现了持续集成和强大的安全功能。
成本
个人执照:89美元。基本许可证:189美元。免费试用版可供下载。Zend Server可作为Azure上的产品提供。
XAMPP
XAMPP.org
经验丰富的开发人员熟悉Apache解决方案。XAMPP是由Apache Friends组织创建的开发平台。它适用于大多数需要MySQL数据库解决方案的组织。根据他们的要求,对于初创公司来说可能有点过分。
主要特征
它是PHP最古老的开发平台之一。它拥有超过10年的所有参与开发人员的综合经验。易于安装(通过向导)。Apache系列产品的一部分。MySQL和Perl是安装的一部分。可以在XAMPP安装之上安装CMS组件(通过Bitnami)。易于控制的面板,适用于所有组件。
成本
开源(免费)。
性能,代码分析,APM,日志记录
代码分析器,APM和日志监视器等性能工具可帮助开发人员发现效率低下和错误。同样,有许多可用于PHP的工具。根据您的开发阶段,您可以选择一种工具而不是另一种工具。例如,代码分析器在开发阶段最有效,而APM在部署后监控您的应用程序。有些工具将所有这些性能工具合二为一。
Stackify
Stackify.com/retrace
Retrace超越了标准的APM(应用程序性能监控),可以在一个易于使用的解决方案中为开发人员提供所需的所有工具。它最初只支持Java和.NET,但很快就会支持PHP。它增强了日志和错误跟踪功能,使其脱颖而出。它也具有成本效益。该工具非常适合团队诊断,改进和加速应用程序性能。
主要特征
查看与异常相关的日志记录,以便在客户执行之前快速查找并修复问题。确定应用程序堆栈的哪个部分是瓶颈以及哪些Web请求受到影响。跟踪和监控所有关键应用程序和服务器指标。通过代码分析捕获有关代码执行操作的重要详细信息。
成本
14天免费试用。非生产服务器每月10美元。每台生产服务器每月25美元 - 50美元。
ZEPHIR
zephir-lang.com
Zephir被认为是一种代码增强工具,但它本身就是一种编程语言。它使PHP编码器能够创建由PHP引擎编译但由其运行的函数。PHP是一种解释型语言,因此Zephir的编译特性比本机PHP函数创建更快的组件。该工具更适合中级开发人员。各种规模的组织都可以发现这种产品是有益的。
主要特征
使用与C类似的语言创建函数组件被编译为共享库,以便更快地运行。无法访问指针。指针可能会给开发人员带来问题,而Zephir不允许这样做。
成本
开源(免费)。
New Relic APM
Newrelic.com
New Relic是业界领先的APM,支持许多顶级语言,包括PHP,Ruby,Java和.NET。它提供了对应用程序性能的全栈可视性,包括移动应用程序和基础架构监控。
主要特征
应用程序性能趋势一目了然。浏览器,移动和基础架构监控。各个SQL语句的性能跟踪。低影响生产螺纹轮廓仪。代码级诊断。跨应用程序跟踪。
成本
每台服务器每月75-600美元,每年便宜一些。
比较New Relic和Retrace
AppDynamics
AppDynamics.com
AppDynamics迎合了寻求一体化性能监控解决方案的大型企业。企业可以将AppDynamics用作SaaS工具以及内部部署选项。
主要特征
代码级诊断。基础设施和最终用户监控。基线绩效发展。绩效指标可视化。
成本
每台服务器每月230美元。
来自Solarwinds的AppOptics
AppOptics.com
SolarWinds对其性能监控工具进行了大量更改。首先,他们收购了顶级APM TraceView。最近,他们将TraceView功能增强并集成到SolarWinds的基础设施监控工具AppOptics中。AppOptics现在支持基础架构和应用程序性能监控,帮助公司自下而上地显示其性能。
主要特征
150多个集成和插件与其他顶级工具。服务器和基础架构监控应用监控和可视化。自定义指标和分析。
成本
每位主人每月20美元。包括基础架构监控服务和每台主机400个自定义指标
调试
调试工具与代码分析器类似,通常是手工使用的。在分析器识别优化代码的机会的情况下,调试器会在代码中查找错误。
XDebug
xdebug.org
XDebug已成为PHP调试器的事实标准。XDebug是一个可以集成到IDE中的扩展,大多数IDE都支持它。它对各级开发人员都很有用。由于大多数PHP工具都包含XDebug,因此大多数组织将使用它作为使用其他工具的一部分。
主要特征
适用于大多数IDE。自2002年以来一直存在。单步调试功能。堆栈跟踪功能。可与其他前端调试解决方案一起使用。
成本
开源(免费,请求捐赠)。
DebugBar
DebugBar.com
DebugBar是任何公司开发人员的理想工具。它不是特定于PHP,而是在Web开发人员的工具箱中占有一席之地。它可以轻松找到HTML和JavaScript错误。
主要特征
检查CSS元素。评估JavaScript。可以直接对HTML进行直接更改。监控网络流量。
成本
自由
版本控制
版本控制系统可帮助开发团队管理其源代码和代码分支。当开发人员处理更新和新功能时,他们保持代码的主要分支安全。随着团队的发展,版本控制变得更加重要。在没有版本控制系统的情况下维护可靠的基础设施变得越来越困难。
Git
git-scm.org
Git是一个版本控制解决方案。您可以将Git与第三方存储库一起使用,也可以作为独立解决方案使用(不推荐)。Git很受程序员的欢迎,公司正在采用它。无论规模大小,此解决方案都适用于任何公司。您的公司可能有不同的解决方案,但许多开发人员将其用于个人项目。
主要特征
在开发社区中被许多人使用。知识很容易转移。一个相对容易学习的命令行界面。轻松支持基于云的存储库。
成本
Git是开源的(免费)。
GitHub
github.com
人们经常混淆git和GitHub,但它们是两个独立的解决方案。但是,他们经常一起工作以提供整体解决方案。GitHub是一个基于云的存储库,git可以用作其事务的机制。它被程序员广泛使用,许多公司都认识到该解决方案的好处。
主要特征
基于云的解决方案,这意味着它可以在任何地方访问。简单易学。广泛接受使技能可转移。可用于协作开发解决方案。
成本
公共存储库的开源。基于层级的定价从每月7美元(单个用户)开始,每个用户每月最多21美元用于商业许可。
Vagrant
vagrantup.com
Vagrant并不是真正意义上的版本控制解决方案。但是,它可用于控制不同版本的环境,这对PHP开发人员很有用。Vagrant为开发人员提供了创建虚拟环境的功能。例如,如果他们有理由支持多个版本的PHP,可以使用Vagrant轻松完成。这不应该是首选解决方案,也不应取代标准版本控制的需要。
主要特征
根据项目创建具有所需组件的开发环境。在不再需要环境时轻松破坏环境。
成本
自由
安全
网络安全是我们这个时代最重要的问题之一。下面的PHP安全工具可以帮助开发人员在太晚之前识别代码中的漏洞。
RIPS
RipsTech.com
2010年,一个名为RIPS的开源项目被启动,以帮助处理PHP安全性。该计划产生了一个可以检查漏洞的PHP扫描程序。随着功能的增长,它变得过于强大,无法作为一个开源项目处理,导致RIPS Tech接管该项目。之前的版本仍然可用但不受支持。
主要特征
完整的PHP支持。消除误报。可用于代码质量分析。完整的风险检测机制。符合多个行业安全标准。导出结果可用。
成本
优质产品(价格未公布)。
其他:Chrome浏览器开发
https://www.google.com/chrome/
开发人员喜欢使用Chrome浏览器,因为它有一个扩展程序,可以报告HTML页面的元素。它易于配置和学习。虽然这不是PHP解决方案,但任何Web开发(包括PHP)都使用HTML,并且有助于查看哪些HTML元素受到更改等的影响。
主要特征
容易安装,也容易使用。显示有关HTML元素的有用信息。
成本
自由
概要
PHP开发人员可以使用的大量工具使这种情况变得混乱,特别是对于不熟悉该语言的开发人员而言。幸运的是,大多数软件解决方案都可以免费(但有限)地访问该软件,以便对其进行试用,看看它是否适用于您的解决方案。
作为开发人员,随时了解您用于开发的任何工具的最新发展。