GanymedeNil

GanymedeNil 查看完整档案

北京编辑义乌工商职业技术学院  |  建筑工程 编辑好未来  |  后端开发 编辑 www.ganymedenil.com 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

GanymedeNil 发布了文章 · 10月19日

PHP 7:真实世界的应用开发——PHP 7 安装注意事项

PHP 7 安装注意事项

获取 PHP 7 主要有三种方式:

  • 直接下载源代码并安装
  • 安装预编译的二进制文件
  • 安装 *AMP 集合包(比如:XAMPP、WAMP、LAMP、MAMP等等)

如何做

这三种方法按难易程度排列。然而,第一种方法虽然冗长乏味,但是可以让您对扩展和选项进行最有限的控制。

直接从源码安装

为了利用这种方法,您需要有一个 C 编译器。如果您运行的是 Windows,MinGW 是一个免费的编译器,它已经被证明很受欢迎。它基于 GNU 项目提供的 GNU 编译器集合(GCC)编译器。非免费的编译器包括Borland 公司的经典的 Turbo C 编译器,当然,Windows 开发者首选的编译器是 Visual Studio。不过,后者主要是为 C++ 开发设计的,所以在编译 PHP 时,需要指定 C 模式。

当在Apple Mac上工作时,最好的解决方案是安装 Apple Developer Tools。你可以使用 Xcode IDE 来编译 PHP 7,或者从终端窗口运行 gcc。在 Linux 环境下,从终端窗口运行 gcc。

当从终端窗口或命令行进行编译时,通常的过程如下:

  • configure
  • make
  • make test
  • make install

有关配置选项的信息(即在运行 configure 时) ,请使用 help选项:

configure --help

在配置阶段可能遇到的错误如下表所示:

错误修复
configure: error: xml2-config not found. Please check your libxml2 installation你只需要安装 libxml2。对于这个错误,请参考以下链接:http://superuser.com/question...
configure: error: Please reinstall readline - I cannot find readline.h安装 libreadline-dev
configure: WARNING: unrecognized options: --enable-spl, --enable-reflection, --with-libxml没什么大不了的。这些选项是默认选项,不需要包括在内。有关详情,请参阅以下连结:http://jcutrer.com/howto/linu...

从预编译的二进制文件安装 PHP 7

顾名思义,预编译的二进制文件是由别人从 PHP 7 源代码中编译出来的二进制文件。

如果是 Windows 系统,请访问 http://Windows.php.net/。您将在左侧栏中找到一组友好的提示,这些提示涉及选择哪个版本、线程安全与非线程安全等等。然后,您可以单击“Downloads” ,查找适用于您环境的 ZIP 文件。下载完 ZIP 文件后,将这些文件解压缩到您选择的文件夹中,将 php.exe 添加到路径中,并使用 php.ini 文件配置 PHP 7。

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrsxVTNe-1603114760035)(https://github.com/AnyStudy/P...]](https://github.com/AnyStudy/P...

要在 Mac OS X 系统上安装预编译的二进制文件,最好使用软件包管理系统。对于 PHP 来说,推荐的有以下几种:

  • MacPorts
  • Liip
  • Fink
  • Homebrew

对于Linux,使用的打包系统取决于您使用的Linux发行版。 下表按 Linux 发行版组织,总结了在何处查找PHP 7 软件包。

Linux 发行版本在哪里可以找到 PHP 7备注
Debianpackages.debian.org/stable/php`repos-source.zend.com/zend-server/early-access/php7/php-7DEB`使用以下命令:sudo apt-get install php-7或者,您可以使用图形化的软件包管理工具,比如 Synaptic。确保选择 php7(而不是 php5)。
Ubuntupackages.ubuntu.com`repos-source.zend.com/zend-server/early-access/php7/php-7DEB`使用以下命令:sudo apt-get install php7确保选择正确的Ubuntu版本。另外,您可以使用图形软件包管理工具,例如Synaptic
Fedora / Red Hatadmin.fedoraproject.org/pkgdb/packages`repos-source.zend.com/zend-server/early-access/php7/php-7RHEL`确保您是 root 用户:su使用以下命令:dnf install php7另外,您可以使用图形化软件包管理工具,例如GNOME软件包管理器。
OpenSUSEsoftware.opensuse.org/package/php7使用以下命令: yast -i php7或者,您可以运行 zypper ,或将 YaST 用作图形工具。

通过 *AMP 集合包安装

AMP 指的是 ApacheMySQLPHP (也包括 PerlPython)。 指的是 Linux、 Windows、 Mac 等(即 LAMP、 WAMP 和 MAMP)。这种方法通常是最简单的,但是对初始 PHP 安装的控制较少。另一方面,您可以随时修改 php.ini 文件并安装其他扩展,以根据需要定制安装。下表总结了一些流行的 AMP 包:

集合包在哪里可以找到是否免费支持*
XAMPPwww.apachefriends.org/download.htmlYWML
AMPPSwww.ampps.com/downloadsYWML
MAMPwww.mamp.info/enYWM
WampServersourceforge.net/projects/wampserverYW
EasyPHPwww.easyphp.orgYW
Zend Serverwww.zend.com/en/products/zend_serverNWML

在上表中,我们列出了 AMP 软件包,其中 替换为Windows的W,Mac OS X的M和Linux的L

更多...

当从包中安装预编译的二进制文件时,只安装核心扩展。非核心 PHP 扩展必须单独安装。

值得注意的是,在云计算平台上安装 PHP 7 通常会遵循预编译二进制文件的安装过程。找出您的云环境是否使用 Linux、 Mac 或 Windows 虚拟机,然后按照本文中提到的适当步骤进行操作。

有可能 PHP 7 预编译二进制文件这种安装方式并不是您所喜欢的。但您始终可以从源码中安装,或者考虑安装一个 *AMP 集合包(见下一节)。对于基于Linux的系统来说,另一种选择是使用个人软件包存档(PPA)的方法。然而,由于PPA没有经过严格的筛选过程,安全性可能是一个问题。关于PPA的安全考虑因素的良好讨论见http://askubuntu.com/question...

参考

一般的安装注意事项,以及三个主要操作系统平台(Windows,Mac o s x 和 Linux)的说明,可以在 http://php.net/manual/en/inst... 中找到。

MinGW 的网站是 http://www.mingw.org/

关于如何使用 Visual Studio 编译 c 程序的说明可以在 https://msdn.microsoft.com/en... 中找到。

测试 PHP 7 的另一种可能的方法是使用虚拟机。下面是一些工具和链接,这些工具可能会被证明是有用的:

如果您喜欢本文,请到github点个star吧!
https://github.com/AnyStudy/P...

查看原文

赞 0 收藏 0 评论 0

GanymedeNil 发布了文章 · 10月4日

PHP 7:真实世界的应用开发(中文翻译)

前言

PHP 7:真实世界的应用开发(中文翻译)

推荐使用 Gitbook 以获取最佳阅读体验。

译序

作为一个使用了php多年的程序员,公司项目也经历过5到7的升级,期间项目也出现过一些因为php7功能与php5 不一致导致的bug。我一直在寻找一本能详细介绍 php 7 新特性与功能的书,后来找到了这本,虽然这本书发布到现在已经差不多4年了,但是对于想详细了解php7的朋友来说里面所讲述的内容我认为还是很有价值的。并且本书作者的一些观点我也非常认同,就想着希望能让更多人看到,趁着十一假期有时间想试着翻译一下本书。本书实际是三本独立的书,但如果单独看这三本都感觉缺点什么,把这三本书合并为一本我感觉就很相辅相成。本书的模块2也就是《高性能 php 7》部分已经由吕毅老师翻译,本人就不再对本模块进行翻译。如果我的翻译能帮助到大家,也是我最大到荣幸。

前言

PHP 7 在开源社区掀起了一场风暴,它打破了之前版本的速度记录,也重新引起了人们对它的关注。从最根本的意义上讲,核心工程团队已经对它进行了重大重写,但仍能保持高度的向后兼容性。PHP是一门开发Web应用的好语言。它本质上是一类服务器端脚本语言,也用于通用编程。PHP 7是最新的版本,提供了主要的向后兼容性突破,并专注于提高性能和速度。这意味着你可以通过多线程网络服务器,用低成本的硬件和服务器维持网站的高流量。

这条学习之路都涵盖了什么

模块1,PHP 7 编程指南,本模块以 PHP 7 为中心,展示了中高级的PHP技术。每个示例都是为了解决像您这样的 PHP 开发人员每天面临的实际问题。其中还介绍了只有在 PHP 7 中才有的,新的编写 PHP 代码的方法。此外,我们还讨论了向后兼容性中断的问题,并为您提供了大量指导,告诉您何时何地需要修改 PHP 5 代码,以便在 PHP 7 下运行时产生正确的结果。本模块还包含了最新的 PHP 7.x 特性。在本模块结束时,您将具备为您的网站和企业提供高效应用程序所需的工具和技能。

模块2,学习 PHP 7 高性能,该模块是 PHP 7 的快速入门,这将提高您的生产力和编码技能。所涉及的概念将使您作为一个PHP程序员,提高你的应用程序的性能标准。我们将向您介绍 PHP 7 中的新特性,然后介绍 PHP 7 中面向对象编程(OOP)的概念。接下来,我们将阐明如何提高 PHP 7 应用程序的性能和数据库性能。通过这个模块,您将能够使用模块中讨论的各种基准测试工具来提高程序的性能。最后,模块讨论了 PHP 编程中的一些最佳实践,以帮助你提高代码的质量。

模块3,用 PHP 7 更新旧版应用程序,此模块将向您展示如何通过提取和替换旧版组件,从实践和技术上而不是在使用框架和库之类的工具方面对应用程序进行升级。 我们将采用循序渐进的方法,有条不紊地缓慢前进,从根本上改善您的应用程序。我们将向您展示依赖注入是如何替换新的和全局依赖的。我们还将向您展示如何将表示逻辑改为视图文件,将动作逻辑改为控制器。此外,我们将使您的应用程序始终保持运行状态。在这个过程中,每一个完成的步骤都会让您的代码库以更高的质量完全正常运行。当我们完成后,您将能够像风一样轻而易举地通过您的代码。您的代码将是自动加载、依赖注入、单元测试、层级分离和前端控制。我们将添加到您的应用程序中的大多数非常有限的代码都是针对这个模块的。我们将以程序员的身份提高自己,并提高传统应用程序的质量。

你在这条学习之路上需要什么

模块1

要成功地实现本模块中介绍的示例,你只需要一台计算机,100MB 的额外磁盘空间,和一个文本或代码编辑器(不是文字处理器!)。第一章将介绍如何设置 PHP 7 开发环境。拥有一个 Web 服务器是可选的,因为 PHP 7 包含一个开发 Web 服务器。不需 Internet 连接,但下载代码(如 PSR-7 接口集)和查看 PHP 7.x 文档可能会需要。

模块2

任何符合运行以下软件最新版本的硬件规格,应该都足以通过本模块。

  • 操作系统: Debian 或 Ubuntu
  • 软件: NGINX、PHP 7、 MySQL、 PerconaDB、 Redis、 Memcached、 Xdebug、Apache JMeter、 ApacheBench、Siege 和 Git

模块3

您需要参考本模块的“第二章,先决条件“来了解本模块所需的基本硬件和软件要求。本章将详细描述这些要求。

这条路是为谁而设

如果您是一个有抱负的Web开发人员,移动应用开发人员或后端程序员,并且具有PHP编程的基本经验并希望开发对性能至关重要的应用程序,那么这个课程是为你准备的。它将使您的PHP编程技能更上一层楼。

支持

课程的代码包也托管在github上 https://GitHub.com/packtpublishing/php-7-be-pro-at-applications-development

法律申明

译者纯粹出于学习目的个人兴趣翻译本书,不追求任何经济利益。

译者保留对此版本译文的署名权,其他权利以原作者和出版社的主张为准。

本译文只供学习研究参考之用,不得公开传播发行或用于商业用途。有能力阅读英文书籍者请购买正版支持。

LICENSE

CC-BY 4.0

查看原文

赞 1 收藏 0 评论 0

GanymedeNil 赞了回答 · 2019-08-13

解决网站注销账号业务一般怎么制作?

  1. 如果是广告用户,后端管理员端注销用户,可以将用户的自身记录设置为注销状态就行,以后查询不查询那些注销的,这样对于统计,数据校对,还是有用的,标识字段来标注是最简单的办法。
  2. 现在法律规定用户可以申请永久删除自己的数据,这个没办法,只能把用户相关的所有数据删掉,最后删除用户自身的数据。

关注 5 回答 6

GanymedeNil 收藏了文章 · 2019-03-12

golang防缓存击穿利器--singleflight

缓存击穿

    给缓存加一个过期时间,下次未命中缓存时再去从数据源获取结果写入新的缓存,这个是后端开发人员再熟悉不过的基操。本人之前在做直播平台活动业务的时候,当时带着这份再熟练不过的自信,把复杂的数据库链表语句写好,各种微服务之间调用捞数据最后算好的结果,丢进了缓存然后设了一个过期时间,当时噼里啪啦两下写完代码觉得稳如铁蛋,结果在活动快结束之前,数据库很友好的挂掉了。当时回去查看监控后发现,是在活动快结束前,大量用户都在疯狂的刷活动页,导致缓存过期的瞬间有大量未命中缓存的请求直接打到数据库上所导致的,所以这个经典的问题稍不注意还是害死人

    防缓存击穿的方式有很多种,比如通过计划任务来跟新缓存使得从前端过来的所有请求都是从缓存读取等等。之前读过 groupCache的源码,发现里面有一个很有意思的库,叫singleFlight, 因为groupCache从节点上获取缓存如果未命中,则会去其他节点寻找,其他节点还没有的话再从数据源获取,所以这个步骤对于防击穿非常有必要。singleFlight使得groupCache在多个并发请求对一个失效的key进行源数据获取时,只让其中一个得到执行,其余阻塞等待到执行的那个请求完成后,将结果传递给阻塞的其他请求达到防止击穿的效果。

SingleFlight 使用Demo

本文模拟一个数据源是从调用rpc获取的场景
图片描述
然后再模拟一百个并发请求在缓存失效的瞬间同时调用rpc访问源数据
图片描述
效果
图片描述
可以看到100个并发请求从源数据获取时,rpcServer端只收到了来自client 17的请求,而其余99个最后也都得到了正确的返回值。

SingleFlight 源码剖析

在看完singleFlight的实际效果后,欣喜若狂,想必其实现应该相当复杂吧, 结果翻看源码一看, 100行不到的代码就解决了这么个业务痛点, 不得不佩服。

package singlefilght

import "sync"

type Group struct {
    mu sync.Mutex
    m map[string]*Call // 对于每一个需要获取的key有一个对应的call
}

// call代表需要被执行的函数
type Call struct {
    wg sync.WaitGroup // 用于阻塞这个调用call的其他请求
    val interface{} // 函数执行后的结果
    err error         // 函数执行后的error
}

func (g *Group) Do(key string, fn func()(interface{}, error)) (interface{}, error) {

    g.mu.Lock()
    if g.m == nil {
        g.m = make(map[string]*Call)
    }
    
    // 如果获取当前key的函数正在被执行,则阻塞等待执行中的,等待其执行完毕后获取它的执行结果
    if c, ok := g.m[key]; ok {
        g.mu.Unlock()
        c.wg.Wait()
        return c.val, c.err
    }

    // 初始化一个call,往map中写后就解
    c := new(Call)
    c.wg.Add(1)
    g.m[key] = c
    g.mu.Unlock()
    
  // 执行获取key的函数,并将结果赋值给这个Call
    c.val, c.err = fn()
    c.wg.Done()
    
    // 重新上锁删除key
    g.mu.Lock()
    delete(g.m, key)
    g.mu.Unlock()

    return c.val, c.err

}

    对的没看错, 就这么100行不到的代码就能解决缓存击穿的问题,这算是我写过最愉快的一篇博了,同时也推荐大家去读一读groupCache这个项目的源码,会有更多惊喜的发现

查看原文

GanymedeNil 关注了用户 · 2019-03-12

薛薛薛 @xuexuexue1994

专业 键盘手🎹 吉他手🎸

业余 gopher👨‍💻‍

描述 菜鸡一枚🐔 破二本焊电路毕业👷

关注 39

GanymedeNil 关注了用户 · 2019-02-14

布客飞龙 @wizardforcel

欢迎来星球做客:t.zsxq.com/Jq3vZZB

请关注我们的公众号“ApacheCN”,回复“教程/路线/比赛/报告/技术书/轻小说/漫画/新知”来获取更多资源。

关注 781

GanymedeNil 关注了标签 · 2017-12-27

rabbitmq

RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。

关注 216

GanymedeNil 回答了问题 · 2017-12-19

Python Flask 启动缓慢

你把debug关了试试

关注 4 回答 3

GanymedeNil 回答了问题 · 2017-11-17

storm实时流处理中如何利用redis去除重复数据?

直接为每个用户设置一个事件锁不就成了,发了直接设置当前用户的事件锁并且失效时间30天,每次发送check一下锁存不存在。

关注 2 回答 1

GanymedeNil 回答了问题 · 2017-11-17

beego如何在后台按照守护进程的形式一直运行?

Supervisor

关注 8 回答 6

认证与成就

  • 获得 1 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-09-23
个人主页被 462 人浏览