动态 版块 发帖 消息 我的
Loading...
HuPei.net
商•龙虎纹青铜尊及其虎食人纹局部,战国•玉螭虎食人佩!
子版块
hupeinet
24
今天跟大家分享在线一键生成网页版 Nginx 配置文件的知识。1 在线一键生成网页版 Nginx 配置文件介绍NginxWebUI是一款方便实用的 nginx 网页配置工具,可以使用 WebUI 配置 Nginx 的各项功能,包括端口转发,反向代理,ssl 证书配置,负载均衡等,最终生成「nginx.conf」配置文件并覆盖目标配置文件,完成 nginx 的功能配置。今后配置nginx再也不用上网各种搜索, 只需要在该项目中进行增删改查就可方便的配置nginx!功能说明1.该项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库2.其中orm使用了自开源的sqlHelper项目作为orm,使用sqlite作为数据库,项目启动时会释放一个.sqlite.db到系统用户文件夹中3.sqlHelper是一个可以像mongodb一样使用sql数据库的orm,解放开发者对sql数据库表结构的维护工作,有兴趣的可以了解一下 https://gitee.com/cym1102/sqlHelper使用说明打开http://xxx.xxx.xxx.xx:8080 默认登录名密码为admin/admin进入系统后,可在管理员管理里面添加修改管理员账号在反向代理中可配置nginx的反向代理即server项功能,可开启ssl功能,直接从网页上上传pem文件和key文件,直接放到系统用户文件夹下,还可以直接开启http转跳https功能,用户直接访问http会转跳到https在负载均衡中可配置nginx的负载均衡即upstream项功能,在反向代理中可选择代理目标为负载均衡项最终生成conf文件,可在此进行进一步手动修改,确认修改无误后,可覆盖本机conf文件,并进行校验和重启PS:nginx本身功能复杂,本项目并不能涵盖nginx所有功能,只能配置常用功能,更高级的功能配置仍然需要在最终生成的nginx.conf中进行手动编写哦~项目地址:https://gitee.com/cym1102/nginxWebUI?_from=gitee_search参考文献:toutiao.com/i6825803130937016836/
 0    0  13天前
hupeinet
36
这是一个很值得探讨的问题,而且也是我在成为软件工程师之时问了很多导师的一个问题。但问题是,很多人推荐的是不同主题的不同书籍。他们推荐的书在他们看来是伟大的,但没有人能告诉我,要想成为一个伟大的工程师,我应该阅读什么,哪些是重要的、是必读的书籍。我从我的导师那儿学到了很多东西,并意识到,我仍然有很多东西需要学习,还有许多不同的书需要阅读。我决定每个月读一本专业领域(软件工程)的书。随着时间的积累,我总结出了我认为想要成为一个顶级开发人员必须阅读的书单。事先声明——只是阅读这些书不会让你成为一个伟大的开发者。你还需要积累多年的工作经验,并应用这些书中的原则到现实实践中,并在现实世界中发展你解决问题的能力。阅读这些书可以帮助你避免一些常见的陷阱和错误,一些开发人员早期经历的陷阱和犯过的错误。我多么希望在我刚进入软件领域的时候,就有人向我推荐这些书啊,并且我现在依然很庆幸自己发现并反复阅读了这些书!也许你已经在大学读计算机科学或工程课程的时候读到过其中的一些书。也许在那个时候,你觉得它们并不重要,但是我可以用我亲身经历来说明我使用和应用了许多来自于这些书的原则。我还要指出的是,此书单并不详尽。每年都会有许多伟大的著作问世。这些只是对我和我的职业生涯影响最大的书籍。此外,这些书和使用什么语言无关,可以应用于任何软件语言。好了,让我们开始介绍这些书吧! (请鼓掌)(这些都是必不可少的,我将根据它们对我的影响大小从后往前介绍。)12.《Working Effectively with Legacy Code》我之所以喜欢这本书,是因为几乎所有的软件开发人员,在其职业生涯的某个时刻,往往会不得不支持和工作于遗留系统。在这本书中,Michael Feathers提供了从开始到结束的策略,以便于更有效地工作于未经测试的遗留代码库。本书借鉴了Michael为其著名的Object Mentor专题研讨会创作的材料:Michael用于指导的技术,以帮助开发人员,技术管理人员和测试人员掌控遗留系统。11.《The Mythical Man-Month》本书是一本经典之作,但最近被修改和更正了。令人惊奇的是这本书仍然与软件产品开发密切相关。如果你从事软件的话,这本书是必读的。这本书最有价值的部分,我相信,是“plan to throw out”原型章节。尽管我们的目标通常是做一个更大,更好,更快,不管它是什么的东西,但是我们总会构建出一些不得不被废弃,需要重做的东西。这种情况我亲身经历过很多很多次。因此,关键是要plan to throw out(计划抛弃),这样你才能适应接下来的情况。如果你梦想第一个产品就ok,那么你就会有抛弃它们的风险,因为产品的改进和发展是不可避免的。计划抛弃也有助于通过设置合理的里程碑来达到进度目标。10.《Design Patterns》如果你打算成为一名架构师或系统的设计人员,那么你很有可能会被要求阅读这本书。这是一本被誉为有史以来最伟大的有关于软件开发的书,详细讲述了许多不同的设计模式,这么多年来一直在帮助软件工程师避免和处理行业面临的常见问题。遵照这本书的策略可以助你打造更高品质,灵活和可维护的软件。传说中的“四人帮”就是这本书,因为它是由四个著名的作者共同编写的。9.《Programming Pearls 第二版》这本书和这书单上的其他书籍略有不同。我想说这本书可以帮助一个人“像一个程序员一样思考”。《Programming Pearls》是先前发表在“Communications of the ACM(美国计算机学会通讯)”的15篇专栏的一个纲要。这些专栏涵盖了广泛与编程相关的主题:从需求收集到性能优化。重点关注编码技术和算法。每个专栏被组织为一个章节。章节通常以一个实际问题的情景呈现开头。然后,提出各种解决方案和相应的经验教训。写作风格清晰明快。《Programming Pearls》不是教授新编程概念的寻常书籍。虽然它包含了优秀,有时甚至是相当新奇的想法,但这本书的目的不是教你一些新的东西,而是帮助你成为一个更好的问题解决者。8.《CODE: The Hidden Language of Computer Hardware and Software》这本书清理了创建和开发复杂系统的大量“魔法”。现在的抽象是如此之多,以致于一些低层次的细节反而不为开发人员所知。虽然你可能不会发现自己在实践中时刻使用着这本书——但我相信,知道自己正在构建什么以及整个编排的工作原理是什么,总归是一个好主意。当你需要打开“黑匣子”,深入软件或硬件来解决一个讨厌的bug的时候,它就能派上用场了。Charles Petzold写的《CODE: The Hidden Language of Computer Hardware and Software》梳理了许多编程概念——从数字系统的十进制,八进制,二进制到高级语言。这本书介绍了基于包的通信协议和TCP。许多章节讲解了有关硬件的概念,有五个章节涉及到了软件和教导操作系统,浮点运算和图形用户界面。7.《The Art of Computer Programming》这又是一部经典之作。由著名的计算机科学家教授Donald Knuth编著,并得到行业内众多顶尖程序员的一致好评。甚至连Bill Gates也对这本书赞誉有加:“如果你认为你是一个真正优秀的程序员……那么就去读[Knuth的]《The Art of Computer Programming》吧……如果你能读懂整本书,那么请一定要给我发简历。”这本书以基本的编程概念和技术开头,然后聚焦于更具体的信息结构——计算机内的信息表示,数据元素之间的结构关系,以及如何有效地处理这些问题。此外还提供了基本的应用程序给仿真模拟,数值方法,符号计算,软件和系统设计。6.《Refactoring》Martin Fowler写的《Refactoring》主要关于改进现有代码的设计。这是一个改变软件系统而不改变代码的外部行为,却能提高它内部结构的过程。通过重构,你甚至可以将一个糟糕的设计重新制作为一个很好的设计。这本书对重构原则进行了深入探讨,包括在哪里发现重构的机会,以及如何建立所需的测试。另外还有一个目录有40多个已经用细节证明的重构,这些细节包括何时以及为什么要使用重构,逐步说明如何实现重构,并举例说明重构是如何工作的。这本书用Java作为其主要语言而写,但其中的思路适用于任何OO语言。5.《Clean Code》《Clean Code》,作者Robert C. Martin,分为三个部分。第一部分介绍原则、模式和编写干净代码的实践方法。第二部分包括若干个复杂度渐进的研究案例。每个案例研究就是一个清洁代码的练习,也是通过解决代码库中的一些问题让代码变得健全、高效的练习。第三部分是决定性的一个部分:每个单独的章节在创建案例研究的时候包含了一系列启发式的教学法。最后得到了描述我们在编写、阅读和清理代码时的思考方式的知识库。4.《Introduction to Algorithms》这必须是理解和使用算法(将在软件开发中涉及很多)的最佳书籍。有些关于算法的书虽然严谨,但不全面——还有一些虽然涉及面广,但却缺乏严谨性。《Introduction to Algorithms》独特地结合了严谨性和全面性。这本书涵盖了广泛又深入的算法,使得书中的设计和分析能够面向所有层次的阅读人员。每个章节相对独立,可看作是一个学习单元。算法用英语和可读的伪代码描述。它使用初级基本的解释,并不牺牲覆盖的深度和材料的严谨性。第一版不仅广泛成为了世界各地高校的教材,还成为了专业人士的标准参考书。第二版新增了算法,概率分析,随机算法,线性规划的章节。3.《Structure and Interpretation of Computer Programs》以一种对解决问题和编程技术分析和严谨的态度,这本书面向于工程。《Structure and Interpretation of Computer Programs》强调通过不同方式来发挥核心作用,以处理计算模型中的时间。其独特的方式使得它非常适合于计算机科学课程,以及编程语言和程序设计的入门。这本书进一步解释了4个最著名的编程语言范式——命令式编程,面向对象编程,基于逻辑编程和应用性编程。2.《Pragmatic Programmer》这是我最先阅读的编程书籍之一。是我的一个朋友在我就职第一份专业工作的时候推荐给我的。我很庆幸他这么做了。尽管这本书写于1999年,但是它的概念是我们以一种务实的态度去开发复杂系统的基础。程序员也是工匠,他们被训练使用一组特定的工具(编辑器,对象管理,版本跟踪器)生成某种可在一定环境中(硬件组件上的操作系统)工作的产品(程序)。和任何其他工艺一样,计算机编程也孕育出了智慧,但其中的大多数智慧是不能从大学或认证课程中学到的。大多数程序员只能通过独立的试验,时间一点点的积累,才能掌握这些所谓的技巧。在《Pragmatic Programmer》一书中,Andrew Hunt和David Thomas编纂了很多他们在分别作为软件设计者和代码编写者的职业生涯中发现的真理。作者的一些实用性建议非常具体,而且显然很易于实施。他们建议读者去学习,例如一个文本编辑器,然后在各种情况下使用它。他们还建议使用版本跟踪软件——即使是对最小型的项目,学习正则表达式语法和文本操作语言。书中还有其他许多也非常有价值的建议。在调试部分,作者指出:“如果你看到蹄印的话,应该考虑马这个范围,而不是斑马。”也就是说,要怀疑一切,然后从最显眼的地方寻找问题。还有关于预估时间和费用,以及将集成测试纳入到开发进程的建议。《Pragmatic Programmer》让人爱不释手的还有两个原因:它会更清晰地梳理你自己积累的智慧,它还会给你介绍你还没考虑到的工作方法。1.《Code Complete 2》就是它了!这就是我认为首屈一指值得阅读的书(请恕我妄言),如果你要成为一个优秀的软件工程师的话。它被广泛认为是最好的实用性编程指南之一,Steve McConnell最初的《Code Complete》在过去的10多年时间里,一直在帮助开发人员编写更好的软件。现在,这部经典书籍已全面更新,修改成了前沿的实践方法——以及数以百计的新的代码示例——修订了软件结构的艺术和科学。从研究、学术界和日常商业实践中捕获知识体系,McConnell将最有效的技术和必须知道的原则总结成清晰又务实的指导。无论你的经验水平,开发环境,还有项目规模如何,这本书都可以启迪和激发你的思考,帮助你打造最优质的代码。不断地探索技巧和策略,可以帮助你:最小复杂性和最大创意的设计获得协同开发带来的好处应用防御性编程技术,以减少和驱赶错误利用机会安全地重构或改进代码使用针对你项目的结构方法快速有效地调试问题早早地正确解决关键的结构问题从头到尾项目打造高质量的项目这12本书到此就介绍完毕了!如果你读过这些书,或有任何其他软件开发人员必读的书籍,欢迎在评论中留言!本文来源链接:http://embeddedlinux.org.cn/emb-linux/industry-news/201601/04-4816.html
 0    0  21天前
hupei
107
首先恭喜你获得了腾讯云和华为云方面的认可,能够拿到offer是非常优秀的,目前如果你要在这两家企业做出选择,你不妨考虑以下几方面因素,从而来决定到底去哪里?这个问题并不太复杂!个人而言思考,最简单直接的选择主要看两方面对于这个岗位的要求,对于it技术的能力要求,你虽然拿到了offer,但是胜任那个职位更加容易,那个会有很大的困难,这个是要思考清楚的,在岗位上一定要能够干出事情来,这个是非常重要的!其次就是需要考虑腾讯和华为给你开的待遇方面的问题,资金是最赤裸裸的,当然待遇不仅仅是资金工资方面以及绩效提成方面,还有关于周六周日上班、加班情况以及各项补贴福利,例如房补、车补等补助方面看哪家会更好一点这个是需要思考的!企业战略层,对于部门和岗位的重视度在大型互联网企业和科技企业,有重要的部门也有不是那么重要的部门,我之前看过一个面试的公众号,说推荐很多人进入了今日头条的广告部门当工程师,因为是核心的利润部门,所以你在进行就业的时候一定在网上了解清楚,腾讯云和阿里云招聘岗位的部门以及招聘的岗位的重要性,别你去干了一两天或者一两个月就让你换岗了,甚至还要重新学习一些东西!(当然学习并不可怕、重要的是很多时候重头再来是很麻烦的!)而就目前而言,我觉得华为云相比较在2018年后算是一匹黑马,不仅仅在重视自己内部的应用建设,例如为智能手机、智能家居、办公等方面提供服务技术支持以及带宽安排等方面,而且华为云也开始走入企业开始打造解决方案!在硬件核心的服务方面也推出了鲲鹏处理器等等来进行增强华为云的硬件实力和软件实力!目前而言在企业级解决方案做得比较完善比较好的,目前是阿里云(也开始研究服务器芯片、也重视高并发下的项目运行能力),阿里云不仅仅支持了自己内部双十一、春运12306、包括这次的疫情钉钉网上上课的需求,而和阿里云能够匹敌的目前就是后来者阿里云,我的有个朋友都还是阿里云的代理商!目前腾讯云方面也推出了很多解决方案,在腾讯内部的解决方案方面以及投入的应用,和战略合作的层面推出的解决方案还是非常密切的,例如微信支付场景化打造,和中粮集团牵手打造微信智能生态、例如腾讯的娱乐、游戏、通讯等需求也是腾讯云背后的技术支持,而这两年唯一比较冷清一点是腾讯云对于企业级的解决方案,对外的业务能力相比较来说弱一点,如果正好腾讯云是针对企业打造,如果业务量不足够大,那选择也就要注意了,因为业务项目需求才能触动人才忙起来,有事干!才能拿到高薪!华为云和腾讯云工作其他因素如果对于一个岗位的前景、企业需求以及工资方面都满足了,其他的方面因素就很少了,例如工作地方以及工作的交通方面是否便利,如果成本很高在选择上也要注意,特别是成家了的人,地方重要性还是非常大的!最后我想说,目前我说的华为云和腾讯云是外部看到的,实地内部怎样,一定要和招聘岗位方面多了解,从公司的同事方面多了解,看部门的创立时间,是否稳定,而且在业务需求方面是否规律等方面来一考察就明白了,这个是我的建议,对此大家是怎么看的
 0    0  102天前
hupei
154
文件结构||――images|――include  |――parameter  |――config  |――function|――indeximages存放图片文件,include中是系统是要引用的文件,一般在parameter中存放参数文件,config中存放配置文件,function中存放方法文件,如javascript的方法等,并按功能模块的分类,将各功能的类也放入其中文件名文件夹命名一般采用英文,长度一般不超过20个字符,命名采用小写字母。除特殊情况才使用中文拼音,一些常见的文件夹命名如:images(存放图形文件),flash(存放Flash文件),style(存放CSS文件),scripts(存放Javascript脚本),inc(存放include文件),link(存放友情链接),media(存放多媒体文件)等。文件名称统一用小写的英文字母、数字和下划线的组合。块注释块注释通常用于提供对文件,方法,数据结构和算法的描述。块注释被置于每个文件的开始处以及每个方法之前。它们也可以被用于其他地方,比如方法内部。在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:/* * 这里是块注释*/块注释可以以/*-开头,这样indent(1)就可以将之识别为一个代码块的开始,而不会重排它。/*- * 如果想被忽略,可是使用特别格式的块注释 *  * one *   two *     three */注意:如果你不使用indent(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent(1)作让步。单行注释短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就该采用块注释。单行注释之前应该有一个空行。以下是一个代码中单行注释的例子:if (condition) {  /* 以下代码运行的条件 */  ...}尾端注释极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中,它们应该具有相同的缩进。以下是一个代码中尾端注释的例子:if ($a == 2) {  return TRUE; /* 对单一条件的说明 */} else {  return isPrime($a); /* 其余的条件 */}行末注释注释界定符"//",可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注释文本;然而,它可以用来注释掉连续多行的代码段。以下是所有三种风格的例子:if ($foo > 1) {  // 第二种用法.  ...}else {  return false; // 说明返回值的原因}//if ($bar > 1) {////  // 第三种用法//  ...//}//else {  // return false;//}文档注释文档注释描述php的类、构造器,方法,以及字段(field)。每个文档注释都会被置于注释定界符/**...*/之中,一个注释对应一个类或成员。该注释应位于声明之前:/** * 说明这个类的一些 ...*/class Example { ...注意顶层(top-level)的类是不缩进的,而其成员是缩进的。描述类的文档注释的第一行(/**)不需缩进;随后的文档注释每行都缩进1格(使星号纵向对齐)。成员,包括构造函数在内,其文档注释的第一行缩进4格,随后每行都缩进5格。若你想给出有关类、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。文档注释不能放在一个方法或构造器的定义块中,因为程序会将位于文档注释之后的第一个声明与其相关联。
 0    0  120天前
hupei
218
win7电脑,进行注册表按“win+R”打开运行 在运行输入框里面输入“regedit”勾选“显示隐藏的文件、文件夹和驱动器”后自动取消勾选的解决方法步骤1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHOWALL下名称:CheckedValue,类型REG_DWORD,数值为“1” 步骤2.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\SuperHidden下名称:UncheckedValue,类型REG_DWORD,数值为“1”名称:CheckedValue,类型REG_DWORD,数值为0
 0    0  155天前
hupei
319
1 绝对路径、相对路径和未确定路径相对路径相对路径指以.开头的路径,例如12./a/a.php (相对当前目录)   ../common.inc.php (相对上级目录)绝对路径绝对路径是以 / 开头或者windows下的 C:/ 类似的盘符开头的路径,全路径不用任何参考路径就可以唯一确定文件的最终地址。 例如12/apache/wwwroot/site/a/a.phpc:/wwwroot/site/a/a.php未确定路径凡是不以 . 或者 / 开头、也不是windows下 盘符:/ 开头的路径,例如12a/a.php common.inc.php开始以为这也是相对路径,但在php的include/require包含机制中,这种类型的路径跟以 . 开头的相对路径处理是完全不同的。require './a.php' 和 require 'a.php' 是不同的!下面分析这三种类型包含路径的处理方式:首先记住一个结论:如果包含路径为相对路径或者绝对径,则不会到include_path(php.ini中定义的include_path环境变量,或者在程序中使用set_include_path(...)设置)中去查找该文件。测试环境说明注意:下面的讨论和结论基于这样的环境: 假设 A=http://www.xxx.com/app/test/a.php,再次强调下面的讨论是针对直接访问A的情况。2. 相对路径:相对路径需要一个参考目录才能确定文件的最终路径,在包含解析中,不管包含嵌套多少层,这个参考目录是程序执行入口文件所在目录。示例1A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.phpB中定义  require './c.php';    // 则C=[SITE]/app/test/c.php 不是[SITE]/app/test/b/c.php示例2A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.php B中定义  require '../c.php';   // 则C=[SITE]/app/c.php  不是 [SITE]/app/test/c.php示例3A中定义  require '../b.php';   //则B=[SITE]/app/b.php B中定义  require '../c.php';   //则C=[SITE]/app/c.php  不是 [SITE]/c.php示例4:A中定义  require '../b.php';   // 则B=[SITE]/app/b.php B中定义  require './c/c.php';  / /则C=[SITE]/app/test/c/c.php  不是 [SITE]/app/c/c.php示例5A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php B中定义  require './c/c.php';     // 则C还是=[SITE]/app/test/c/c.php  不是 [SITE]/app/inc/c/c.php示例6A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php B中定义  require './c.php';       // 则C=[SITE]/app/test/c.php  不是 [SITE]/app/inc/c.php3. 绝对路径绝对路径的比较简单,不容易混淆出错,require|inclue 的就是对应磁盘中的文件。require '/wwwroot/xxx.com/app/test/b.php';    // Linux中require 'c:/wwwroot/xxx.com/app/test/b.php';  // windows中dirname(__FILE__)计算出来的也是一个绝对路径形式的目录,但是要注意__FILE__是一个Magic constants,不管在什么时候都等于写这条语句的php文件所在的绝对路径,因此dirname(__FILE__)也总是指向写这条语句的php文件所在的绝对路径,跟这个文件是否被其他文件包含使用没有任何关系。示例1A中定义  require '../b.php';                  // 则B=[SITE]/app/b.phpB中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/c.php示例2A中定义  require '../inc/b.php';              // 则B=[SITE]/app/inc/b.phpB中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录结论:不管B是被A包含使用,还是直接被访问B如果 require dirname(__FILE__).'/c.php';    // 则始终引用到跟B在同一个目录中的 c.php文件; B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; B如果 require dirname(__FILE__).'/c/c.php';  // 则始终引用到B文件所在目录的c子目录中的 c.php文件;4. 未确定路径首先在逐一用include_path中定义的包含目录来拼接[未确定路径],找到存在的文件则包含成功退出,如果没有找到,则用执行require语句的php文件所在目录来拼接[未确定路径]组成的全路径去查找该文件,如果文件存在则包含成功退出,否则表示包含文件不存在,出错。 未确定路径比较容易搞混不建议使用。5. 解决方案由于“相对路径”中的“参照目录”是执行入口文件所在目录,“未确定”路径也比较容易混淆,因此最好的解决方法是使用“绝对路径”; 例如b.php的内容如下,无论在哪里require b.php都是以b.php的路径为参照来require c.php的$dir = dirname(__FILE__);require($dir . '../c.php');或者定义一个通用函数 import.php,将其设置为“自动提前引入文件”,在php.ini做如下配置更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"更改配置项(可选)allow_url_include = Onimport.php内容如下123456function import($path) {       $old_dir = getcwd();        // 保存原“参照目录”    chdir(dirname(__FILE__));    // 将“参照目录”更改为当前脚本的绝对路径    require_once($path);    chdir($old_dir);            // 改回原“参照目录”}这样就可以使用import()函数来require文件了,无论包含多少级“参照目录”都是当前文件
 0    0  240天前
hupei
339
  原标题:Top 10 Youngest Nobel Prize Winners In The World  作者:卡麦拉  出品:网易科技《知否》栏目组(公众号:tech_163)  诺贝尔奖是世界上最享有声望的科学奖项之一,1895 年,瑞典化学家阿尔弗雷德·诺贝尔(Alfred Nobel)在遗嘱中将自已大部分财产设立化学、物理、文学、生理医学以及和平奖的奖金,用于奖励在这些领域做出突出贡献的个人。1968 年开始,瑞典中央银行一直为诺贝尔经济学奖提供奖金。  让我们来看看诺贝尔奖历史上最年轻的 10 位得主(以下是以获奖者获奖时的年龄进行排名):   1、马拉拉·尤萨夫扎伊(Malala Yousafzai),17 岁   马拉拉伊是当前世界上最年轻的诺贝尔奖主,2014 年,年仅 17 岁的她获得了诺贝尔和平奖,她出生在巴基斯坦斯瓦特地区,因为强烈反对压制女童而被塔利班分子枪击头部,伤愈后她继续为儿童教育权利而奋斗,目前生活在英国。  2、劳伦斯·布拉格(Lawrence Bragg),25 岁     布拉格保持最年轻诺贝尔奖得主头衔长达 99 年,之后马拉拉·尤萨夫扎伊(Malala Yousafzai)刷新了他的纪录,他于 1915 年赢得了诺贝尔物理学奖,他出生于澳大利亚,毕业于英国曼彻斯特市维多利亚大学。他因利用X射线分析晶体结构而获得诺贝尔奖,他还创建了X射线波长、入射角、晶体内原子层之间距离之间有关联性,他的最新发现使计算透明分子中原子位置成为可能。   3、纳迪亚·穆拉德(Nadia Murad),25 岁  纳迪亚出生于 1993 年,她是一名伊拉克雅兹迪族人权活动家,生活在德国。2014 年,恐怖组织绑架并囚禁她 3 个月时间,最终她成功逃离。2018 年,纳迪亚因致力于结束“将性暴力作为战争和武装冲突的武器”而获得诺贝尔和平奖。   4、维尔纳·海森堡(Werner Heisenberg),31 岁  1932 年,德国科学家维尔纳·海森堡获得了诺贝尔物理学奖,一年后,1933 年,他再次获得诺贝尔物理学奖,他提出的不确定性原理对如何精确确定粒子速度和位置设定了限制,他还建立了一种基于测量的量子力学,从而发现了氢的同素异形体。海森堡还对宇宙射线和铁磁性理论做出了重大贡献。   5、保罗·迪拉克(Paul A.M. Dirac),31 岁  1933 年,年仅 31 岁的迪拉克获得了诺贝尔物理学奖,同年他与埃尔温·薛定谔(Erwin Schrodinger)分享了这一奖项,因为他发现了新的原子理论产生形式,他被人们认为是量子力学和量子电动力学的先驱之一。   6、卡尔·大卫·安德森(Carl D. Anderson),31 岁  1932 年,年仅 27 岁的安德森发现了正电子,4 年后,他因这项发现获得了诺贝尔物理学奖,成为世界上最年轻的诺贝尔奖得主之一。值得关注的是,安德森在 1936 年发现了μ介子,他在美国加州理工学院工作,他的学术研究生涯主要在这里度过。   7、李政道(Tsung-Dao Lee),31 岁  李政道的博士导师是著名的物理大师恩里克·费米(Enrico Fermi),费米于 1938 年获得奖贝尔奖。1957 年,31 岁的李政道因其与杨振宁合作提出“弱相互作用中宇称不守恒理论”,获得了诺贝尔物理学奖,他的研究导致了关于基本粒子的创新发现。   8、鲁道夫·穆斯堡尔(Rudolf Mossbauer),32 岁  穆斯堡尔发现穆斯堡尔效应的过程非常有趣,当时是由于他忽视了专家关于实验设备的建议。1961 年,32 岁的他因“关于伽马伽射的共振吸收研究”和穆斯堡尔效应被授予诺贝尔物理学奖,科学家基于他的发现能够更好地研究原子核能量,以及如何受到周围环境和其他现象的影响。  9、弗雷德里克·班廷(Frederick G. Banting),32 岁  班廷是一位加拿大医生,1923 年年仅 32 岁时获得了诺贝尔生理医学奖,他在狗胰腺提取物中发现了胰岛素,他还给一只患糖尿症的狗注射了胰岛素,治疗之后发现该疗法可使动物血糖指数降至正常水平,同时,他是使用胰岛素治疗糖尿病的第一人。   10、梅里德·科里根(Mairead Corrigan),32 岁  1944 年 1 月 27 日,梅里德出生于北爱尔兰的贝尔法斯特,1976 年,32 岁的她获得了诺贝尔和平奖,此外她还获得其他一些奖项,她是北爱尔兰和平运动的创始人,该运动后来改名为“和平人民社区”,该组织致力于结束北爱尔兰天主教徒和基督教徒之间的残酷冲突。(卡麦拉)来自: 网易科技
 0    0  240天前
hupei
333
dirname(dirname(__FILE__)); 假设__FILE__为 /home/web/config/config.php  上面的方法输出为 /home/web  dirname(dirname(__FILE__));得到的是文件上一层目录名dirname(__FILE__);得到的是文件所在层目录名PHP中define()和dirname(__FILE__)1,define() 函数定义一个常量。常量类似变量,不同之处在于:(1)在设定以后,常量的值无法更改(2)常量名不需要开头的美元符号 ($)(3)作用域不影响对常量的访问(4)常量值只能是字符串或数字语法1define(name,value,case_insensitive)name是必需的,规定常量名称;value是必需的,规定常量值;case_insensitive是可选。规定常量的名称是否对大小写敏感。默认是 false(大小写敏感),如果写true,表示大小写不敏感。实例,定义一个大小写敏感的常量并输出1234<?phpdefine("NAME","刘德华");echo NAmE;echo NAME;输出:12345<?phpdefine("NAME","刘德华",true);echo NAmE;echo '<br/>';echo NAME;输出:2,dirname(__FILE__)dirname(__FILE__) 取到的是当前文件的绝对路径,比起相对路径,查找速度是最快的。如果重复一次dirname,可以把目录往上提升一个层次:实例如下,假设test.php文件存放在(d:\www\)目录下123echo __FILE__;  //取得当前文件绝对地址,输出D:\www\test.phpecho dirname(__FILE__); //取得当前文件所在的绝对目录,输出D:\www\echo dirname(dirname(__FILE__));//取得当前文件所在目录的上一层目录,输出D:\  分类: php
 0    0  240天前
hupei
461
最近腾讯云服务器在搞活动,我在上面买了1 核 1 GB 1 Mbps配置系统CentOS7.5,然后源码编译安装了原汁原味的LNMP黄金组合,这套组合也是目前市面上公认的黄金组合,下面就为大家详细描述一下安装过程,供大家参考。一、安装PHP1、访问php官方网站下载地址https://www.php.net/downloads.php,截止到本人发稿时php最新版本是7.3.8,如果后面有升级版本,也可按本教程安装即可,如图所示:PHP官网下载页面2、登陆到服务器终端,选择一个放置源码包的目录,我个人习惯把源码包放置在/data/src下面,在php官网下载页面选择php-7.3.8.tar.gz这个安装包,鼠标右击复制链接地址,执行命令下载源码包wget https://www.php.net/distributions/php-7.3.8.tar.gz[root@VM_0_8_centos ~]# cd /data/src/ [root@VM_0_8_centos src]# wget https://www.php.net/distributions/php-7.3.8.tar.gz --2019-08-07 23:52:46-- https://www.php.net/distributions/php-7.3.8.tar.gz 正在解析主机 www.php.net (www.php.net)... 185.85.0.29, 2a02:cb40:200::1ad 正在连接 www.php.net (www.php.net)|185.85.0.29|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:未指定 [application/x-gzip] 正在保存至: “php-7.3.8.tar.gz” [ <=> ] 19,559,584 4.53MB/s 用时 4.1s 2019-08-07 23:52:51 (4.53 MB/s) - “php-7.3.8.tar.gz” 已保存 [19559584] [root@VM_0_8_centos src]#3、解压源码包,进入加压后的文件夹[root@VM_0_8_centos src]# tar -xf php-7.3.8.tar.gz [root@VM_0_8_centos src]# cd php-7.3.84、这一步就是开始执行configure配置命令了,配置过程会出现各种错误,一般都是缺少各种依赖造成的,提前安装好以下依赖包防止配置过程报缺少依赖的错误:yum -y install libxml2 yum -y install libxml2-devel yum -y install openssl yum -y install openssl-devel yum -y install curl yum -y install curl-devel yum -y install libjpeg yum -y install libjpeg-devel yum -y install libpng yum -y install libpng-devel yum -y install freetype yum -y install freetype-devel yum -y install pcre yum -y install pcre-devel yum -y install libxslt yum -y install libxslt-devel yum -y install bzip2 yum -y install bzip2-devel yum -y install readline-devel特别注意配置过程中,如果出现这个错误configure: error: Please reinstall the libzip distribution,则执行下面命令进行安装此依赖:[root@VM_0_8_centos php-7.3.8]# yum remove libzip [root@VM_0_8_centos php-7.3.8]# cd ../ [root@VM_0_8_centos src]# wget https://nih.at/libzip/libzip-1.2.0.tar.gz [root@VM_0_8_centos src]# tar -xf libzip-1.2.0.tar.gz [root@VM_0_8_centos src]# ll 总用量 20276 drwxrwxr-x 7 root root 4096 4月 11 2018 libzip-1.2.0 -rw-r--r-- 1 root root 1189827 3月 12 09:18 libzip-1.2.0.tar.gz drwxr-xr-x 16 1000 1000 4096 8月 8 10:42 php-7.3.8 -rw-r--r-- 1 root root 19559584 7月 30 05:40 php-7.3.8.tar.gz [root@VM_0_8_centos src]# cd libzip-1.2.0 [root@VM_0_8_centos libzip-1.2.0]# ./configure 此处是配置输出的内容省略.... [root@VM_0_8_centos libzip-1.2.0]# make && make install 此处是编译安装输出的内容省略....如果出现错误:configure: error: off_t undefined; check your library configuration,则进行下面修改:[root@VM_0_8_centos nginx-1.17.2]# vim /etc/ld.so.conf #添加如下几行 /usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64 #保存退出 :wq [root@VM_0_8_centos nginx-1.17.2]# ldconfig -v # 使之生效安装完所需要的依赖包以后,就可以执行配置命令了,按照下面的配置即可满足日常所需,其中–prefix是php的安装目录,可自定义目录位置,–with-config-file-path为php.ini的配置目录,服务器配置内存小于1G的必须加上–disable-fileinfo这个配置,否则会报错,执行下面配置:[root@VM_0_8_centos php-7.3.8]#./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7 --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 --with-readline --without-sqlite3 --without-pdo-sqlite --with-pear --disable-fileinfo 配置成功以后会出现下面的提示:Generating files configure: creating ./config.status creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. config.status: creating php7.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/www.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/phpdbg/phpdbg.1 config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands5、执行make && make install 开始安装php[root@VM_0_8_centos php-7.3.8]# make && make install6、最后就是开始配置php环境了。复制配置文件:[root@VM_0_8_centos php-7.3.8]# cp /data/src/php-7.3.8/php.ini-development /usr/local/php7/php.ini [root@VM_0_8_centos ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf [root@VM_0_8_centos ~]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf将php和php-fpm都加入环境变量:[root@VM_0_8_centos ~]# vim /etc/profile PATH=$PATH:$HOME/bin:/usr/local/php7/bin:/usr/local/php7/sbin export PATH [root@VM_0_8_centos ~]# source /etc/profile启动php-fpm:[root@VM_0_8_centos ~]# php-fpm [root@VM_0_8_centos ~]# ps -ef |grep php-fpm root 10394 1 0 8月01 ? 00:00:12 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) nginx 14018 10394 0 8月07 ? 00:00:43 php-fpm: pool www nginx 15631 10394 0 00:05 ? 00:00:41 php-fpm: pool www nginx 16710 10394 0 07:17 ? 00:00:21 php-fpm: pool www root 27340 23694 0 12:00 pts/0 00:00:00 grep --color=auto php-fpm停止php-fpm:[root@VM_0_8_centos ~]# pkill php-fpm查看php版本:[root@VM_0_8_centos ~]# php -v PHP 7.3.8 (cli) (built: Aug 1 2019 18:14:40) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies二、安装nginx1、去nginx 官网https://nginx.org/en/download.html下载后缀为tar.gz的安装包,我选择的是1.17.2版本[root@VM_0_8_centos src]# wget https://nginx.org/download/nginx-1.17.2.tar.gz2、解压配置安装[root@VM_0_8_centos src]# tar -xf nginx-1.17.2.tar.gz [root@VM_0_8_centos src]# cd nginx-1.17.2 [root@VM_0_8_centos nginx-1.17.2]# ./configure 此处省略配置输出信息... [root@VM_0_8_centos nginx-1.17.2]# make && make install3、配置nginx环境变量[root@VM_0_8_centos nginx-1.17.2]# whereis nginx /usr/local/nginx/sbin/nginx [root@VM_0_8_centos nginx-1.17.2]# vim /etc/profile PATH=$PATH:$HOME/bin:/usr/local/php7/bin:/usr/local/php7/sbin:/usr/local/nginx/sbin export PATH [root@VM_0_8_centos nginx-1.17.2]# source /etc/profile4、启动、停止和重启nginx启动:nginx 强制停止:nginx -s stop #原理是先查出nginx进程id再使用kill命令强制杀掉进程 平滑停止:nginx -s quit #原理是待nginx进程处理任务完毕进行停止,推荐此方式平滑退出 重启:nginx -s reload #修改nginx的*.conf配置文件后,执行此命令可直接使配置生效而不必执行停止启动命令5、启动nginx后查看nginx进程:[root@VM_0_8_centos nginx-1.17.2]# ps -ef |grep nginx |grep -v grep root 15030 1 0 8月07 ? 00:00:00 nginx: master process nginx nginx 15032 15030 0 8月07 ? 00:00:01 nginx: worker process6、设置nginx开机自启动:[root@VM_0_8_centos nginx-1.17.2]# vim /etc/rc.local 追加一行 /usr/local/nginx/sbin/nginx [root@VM_0_8_centos nginx-1.17.2]# chmod 755 rc.local7、配置nginx和php-fpm通讯[root@VM_0_8_centos src]# vim /usr/local/nginx/conf/nginx.conf 添加一行 include vhosts/*.conf; [root@VM_0_8_centos src]# mkdir /usr/local/nginx/conf/vhosts [root@VM_0_8_centos src]#vim /usr/local/nginx/conf/vhosts/yourdomain.conf server { listen 80; server_name www.yourdomain.com; #你的域名 root /data/web/www.yourdomain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 index index.php index.html index.htm; location / { index index.php index.html index.htm; } location ~ \.php$ { root /data/web/www.yourdomain.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }8、在上面配置的网站根目录下新建一个info.php,测试nginx和php是否正常安装<?php phpinfo();成功之后会出现下面页面:三、安装mysql1、去mysql官网https://dev.mysql.com/downloads/repo/yum/,找到mysql80-community-release-el7-3.noarch.rpm下载yum源2、添加yum源并执行安装命令:[root@VM_0_8_centos src]# yum localinstall mysql80-community-release-el7-3.noarch.rpm [root@VM_0_8_centos src]# yum install mysql-community-server3、安装完成之后就可以启动mysql服务了:[root@VM_0_8_centos src]# systemctl start mysqld.service查看mysql状态:[root@VM_0_8_centos src]# systemctl status mysqld.service ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 三 2019-07-31 23:41:11 CST; 1 weeks 0 days ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 19381 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 19404 (mysqld) Status: "Server is operational" CGroup: /system.slice/mysqld.service └─19404 /usr/sbin/mysqld 7月 31 23:41:09 VM_0_8_centos systemd[1]: mysqld.service holdoff time over, scheduling restart. 7月 31 23:41:09 VM_0_8_centos systemd[1]: Starting MySQL Server... 7月 31 23:41:11 VM_0_8_centos systemd[1]: Started MySQL Server.关闭和重启mysql命令:[root@VM_0_8_centos src]# systemctl stop mysqld.service [root@VM_0_8_centos src]# systemctl restart mysqld.service4、启动mysql服务以后,需要修改root密码,这个密码存放在文件/var/log/mysqld.log中,可通过下面方式找到临时密码:[root@VM_0_8_centos src]# grep 'temporary password' /var/log/mysqld.log 2019-07-31T08:20:19.590478Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: aEqXa?@&TB9v- [root@VM_0_8_centos src]#连接数据库输入上面的临时密码登录后进行密码修改:[root@VM_0_8_centos src]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13684 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourNewPassword'; 如果修改密码出现强度不够的提示,尽量给一个强密码,修改完密码,重启mysql服务使新密码生效:[root@VM_0_8_centos src]# systemctl restart mysqld.service5、开放mysql远程连接的权限mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set host = '%' where user = 'root'; mysql> flush privileges;腾讯云和阿里云控制台都有一个安全组规则,记得找到安全组权限开放3306端口权限否则还是无法远程连接mysql服务,为了省事我自己开放了所有端口权限,根据个人情况来设定至此LNMP黄金组合成功搭建完毕!
 0    0  287天前
hupei
477
1、逐行读取文件,如果一个文件非常大,甚至超过了你服务器的内存限制,那么按行读取文件是一个不错的选择,代码如下:<?php $handle = @fopen("/tmp/file.txt", "r"); if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { echo $buffer; } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); }2、goto,也许做php开发很多年的同学都不知道这个语法,他代表跳转到指定代码段,比如在执行循环的时候循环体内发生异常,我们希望重新执行当次循环的代码逻辑,就可以结合goto来使用:<?php foreach ($data as $row) { try { trans: //这里是你的代码逻辑 } catch (Exception $e) { echo $e->getMessage(),"\n"; goto trans; } }3、php脚本实现多进程,我们在实际开发需求当中免不了使用多进程来处理业务,比如一个亿级的数据表,我们用php脚本来分析这个表的数据,就应该启用多进程可以大大提高效率,pcntl_fork是实现多进程的核心方法:<?php $pid = pcntl_fork(); //父进程和子进程都会执行下面代码 if ($pid == -1) { //错误处理:创建子进程失败时返回-1. die('could not fork'); } else if ($pid) { //父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。 } else { //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 }4、php生成器yield,yield可是php性能利器,言简意赅的来总结它就是“随用随取”,下面通过例子来讲解:<?php //未使用生成器的例子 function createData($number){ $data = array(); for($i=0;$i<$number;$i++){ $data[] = time(); } return $data; } $datas = createData(100000000); foreach($datas as $row){ //这里是代码逻辑,内存占开销很大,存储了数组里的所有数据 } //使用生成器的例子 function createDataByYield($number){ for($i=0;$i<$number;$i++){ yield time(); } } $arr = createDataByYield(100000000); foreach($arr as $row){ //这里是代码逻辑,内存占用开销只有1条数据 }在上面的例子中createData方法返回的数组中如果有上千万甚至上亿条数据,会给服务器内存带来很大的开销,而使用生成器yield的例子中,我们只需要循环createDataByYield方法来获取每一条数据来处理即可,当前服务器内存只有一条数据的开销。5、php捕获错误,在php开发过程中我们一般都是用try catch来捕获异常,但是如果程序出现Fatal error的错误就会终止运行,在某些业务场景下我们可能不希望程序停止运行,就需要能捕获这类错误,在php7中新增了Throwable 接口来捕获错误,可以通过 try {} catch(Throwable $e) 来捕获php中无法捕获到的错误:<?php try { //这里可以写一些Fatal error的代码逻辑 } catch (Throwable $e) { echo $e->getMessage(); }
 0    0  287天前
快速发帖高级模式
Powered by 虎佩中国
© 2012-2020 HuPei.net
您的IP:34.238.190.122,2020-06-04 05:29:32,Processed in 0.18704 second(s).
Powered by HuPei.net
免责声明:本站内容均来自网络,如有侵权请联系站长删除,一切后果概不负责!