程序员35岁之后如何规划?建议收藏!

文章目录
    • 一、年纪大能不能进大厂?
    • 二、为什么说35是危机?
      • 1.精力衰退
      • 2.脑力衰退
      • 3.知识/技术迭代
    • 三、年龄大的程序员有哪些出路?
      • 1.技术管理
      • 2.创业
      • 3.技术外包
      • 4.做老师
      • 5.做自媒体
      • 6.写书
    • 四、结语

我自己今年已有44了,从2021年开始就已经不上班了,在家里已经休息了2年了,我目前也不想出去再上班了。

关于“35岁中年危机”这个说法,相信大家已经如雷贯耳了,让不少年轻人连涉足互联网的步子都不敢迈开,也让很多在职的程序员忧愁不已,甚至开玩笑说35岁之后就去送外卖。

在这里插入图片描述

作为职场的“局外人”,可能我旁观者更清吧,这2年我虽然不上班,却也一直在做着代码相关的事情,年收入也不低于6位数,而且清闲,所以35岁中年危机我应该比较有话语权。

自从发现了这些新的路子之后,我觉得所谓的中年危机基本不存在,大家以后都不用忧虑了,这些路子你现在就可以先做铺垫。

在这里插入图片描述
希望大家早日也能跟我一样,时间自己安排,没事钓钓鱼,不用被一张办公椅子黏住自己。


一、年纪大能不能进大厂?

在介绍新路子之前,先说一下很多人都关心的年龄大能不能进大厂的问题。

程序员工作几年之后的技术都是比较成熟的,这时候当然也想往年薪更高的地方发展,那么如果年纪比较大,能不能进入大厂呢?

这个不好说,说它不能吧,但有人就进入过,说它能吧,但很多技术高手因为年龄大被PASS了。

我之前认识的朋友里面有2个年龄大面试过大厂,1个37岁面试阿里的P8级岗位,技术很牛逼,前面的面试都过了,但后面被HR卡住了,说年龄大,不过他最后还是去了58同城,拿到了80万的年薪。
还有1个42岁的朋友也是面试阿里,过了4轮面试都OK,最后还是没有进去,给出的原因也是年龄问题。

在这里插入图片描述

在大厂的重要招聘时,差不多的条件下,基本都会认为年轻人更适合,这几乎是大厂的一条不成文规定了。

但保持一颗学习的心态去要求自己,不断地区提升自己,进大厂的可能性就会一直存在,实在不行,就降个档次去中厂,薪资待遇未必没有大厂好。
在这里插入图片描述

二、为什么说35是危机?

在我看来,35岁并不是专属于程序员的中年危机,绝大部分行业都有中年危机,做老师有中年危机,在车间工厂有中年危机,就算你去送快递你也有中年危机,原因是什么?

1.精力衰退

就拿我自己来说吧,我以前可以在公司疯狂工作二十几个小时,今天下班的同事看到我在写代码,明天他们来上班依然看到我在写代码,但现在不行了,现在你让我工作12个小时我就扛不住,身体精力大不如前了。

2.脑力衰退

不仅是记东西的速度比以前慢,而且记住的东西忘得也比以前快,不过这是普通人都存在的现象,也没什么奇怪的,不过奉劝大家少喝点酒,酒精影响大脑细胞更快。

在这里插入图片描述

3.知识/技术迭代

如果你是从20岁左右开始工作,到35岁左右已经差不多15年了,15年的时间足够让技术更新迭代了3次,就算你很强你3次都跟上了技术的迭代趋势,掌握了最新的技术,那么第4次第5次呢?你还能跟上来吗?

更何况有的人还停留在前面的第1、第2次的技术层面。

再加上生活压力等等问题,绝大部分行业的人到了35岁左右,都不想折腾了,考虑转岗。

在这里插入图片描述

但我并不认同“35岁程序员转岗”这种说法,正确的观点应该是“技术+管理”,而不是“转”

有的人喜欢说“35岁技术干不动了就转管理”这种话,我就特别好奇,你一个做技术都做不好的人你能管谁?三十多岁丢弃自己十多年来的技术从0开始学管理?听起来都觉得荒唐。

我见过不少30岁出头就早早转做产品经理的程序员,结果都废了,本来还是技术比较好的,后面做产品经理不专业,做技术又落伍了。

管理是一门水到渠成的学问,用不着从0开始拼命去追求,你需要做的是35岁左右训练自己的情商、交际能力、带队能力,把自己的人际关系再扩大和稳固一些,慢慢从纯技术路线转变成“技术+管理”的路线。


三、年龄大的程序员有哪些出路?

每个人有成为大叔程序员的一天,那么到了那天,我们有什么些出路可选呢?

1.技术管理

这个我就不多说了,前面说过了。

2.创业

一把年级了还折腾创业?40岁很老吗?只要你心态年轻,你的身上总会有让人着迷的东西。79岁的褚时健从监狱出来还创办了褚橙,任正非44岁欠了200多万依然创立了华为,马云也是40多岁拉着一帮人干起来的。

所以,什么时候开始努力,都不算晚。

3.技术外包

拉几个人做技术外包的业务,比如网站的外包就是业务之一,我结识的程序员当中就有不少人当初就是几个人一起做技术外包起家,现在都是有模有样的公司了,当然了,并不局限于互联网行业,只要你有想法,你都可以试试。
在这里插入图片描述

4.做老师

用自己这些年来的经验去做初学者的道路指引者,但做得好的话跟比程序员的薪资还要高,尤其是空闲时间会比较多,线上的机构比如像享学教育、马士兵之类的机构,线下比如千峰、黑马之类的机构,里面就有很多程序员转做老师的。

5.做自媒体

不管是图文博主还是视频博主,账号粉丝上万之后的收入都不错的。比如说接广告,只要你的播放量还不错,一篇广告合作少则几百,多则几千。

现在依然有很多商家会时不时地找我做商业合作,只是我没接而已,每个平台都会,去年从自媒体收入纯利润就搞了16万多,我的粉丝量也就一般,平台上很多比我做得好的。

自媒体变现方式有以下几种:

①接广告或带货
②卖自己的课
③平台收益、粉丝打赏
④接私活(有曝光就会有人来找你)

我点几个平台。

①CSDN,虽然用户量比不得B站抖音等平台,但用户量很精准,广告费比较高。
②B站,难度不是很大,基本不用投钱也能起,封面和标题很重要。
③抖音,要投钱,不然起号很慢,不过起来之后就很舒服了,用户基数最大。
④小红书和快手,这两个平台不用投钱,小红书偏向于知识,上面分享编程的也很多,快手的话用户人群比较低领。
⑤微信视频号,依仗着微信强大的生态圈和用户基数,这也可以是一个可发展的地方。

6.写书

学过Java的人可能有人知道周志明,《深入理解Java虚拟机》这本书就是他的作品之一,十年前我认识他的时候就一直在写书,现在也是,现在你就是给他200万的年薪他都不屑于给你打工,哈哈哈。
在这里插入图片描述


感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你,干货内容包括:

在这里插入图片描述

今天的内容就分享到这里,如果你喜欢这篇文章的话,麻烦请动动你的手点个赞或者点个关注吧,这将是我最大的动力!谢谢,这里有我以前整理的大量自学资料 # :黑客&网络安全的SQL攻防

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

在这里领取:

这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们,其中包含以下东西:

1.学习路线&职业规划

在这里插入图片描述
在这里插入图片描述

2.全套体系课&入门到精通

在这里插入图片描述

3.黑客电子书&面试资料

在这里插入图片描述

4.漏洞挖掘工具和学习文档

在这里插入图片描述

这些东西都是免费领取哦:黑客最新大礼包

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
标题:PHP基础教程 出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP简介 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。 1.简介 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。 PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。 如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题! 1.1 历史 三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。PHP4还处在BETA测试阶段。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http://www.zend.com)了解更多。 PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点: - 学习过程 我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。 你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。 - 数据库连接 PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 - 可扩展性 就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可伸缩性 传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以到你想让它到的一切而且无所不能! 1.3 竞争对手:ASP,mod_perl,JSP 我当然不清楚ASP/JSP能些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。 mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP熟悉一点。我不可能到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。 2.1 首要条件 你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。 2.2 PHP的安装 生成一个名为test.php3的文件,含有以下内容: 然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP安装使用的选项了。 2.3 语法 就像前面提到的一样,你可以混合编写你的PHP代码和HTML代码。因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: . . . 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,C++风格多行注释 */ // C++风格单行注释 # Unix风格单行注释 Hello,World! 通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语: First PHP page 2.4 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。 数值 数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值: $a = 1234; # 十进制数 $a = -123; # 负数 $a = 0123; # 八进制数 (等于十进制数的83) $a = 0x12; # 十六进制数(等于十进制数的18) $a = 1.234; # 浮点数"双精度数" $a = 1.2e3; # 双精度数的指数形式 字符串 字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下: $first = 'Hello'; $second = "World"; $full1 = "$first $second"; # 产生 Hello World $full2 = '$first $second';# 产生 $first $second 可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。 // 一个包含两个元素的数组 $a[0] = "first"; $a[1] = "second"; $a[] = "third"; // 添加数组元素的简单方法 // 现在$a[2]被赋值为"third" echo count($a); // 打印出3,因为该是数组有3个元素 // 用一个语句定义一个数组并赋值 $myphonebook = array ( "sbabu" => "5348", "keith" => "4829", "carole" => "4533" ); // 噢,忘了教长吧,让我们添加一个元素 $myphonebook["dean"] = "5397"; // 你定义的carale元素错了,让我们更正它 $myphonebook["carole"] => "4522" // 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看 echo "$myphonebook[0]"; // sbabu echo "$myphonebook[1]"; // 5348 其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); 改变变量类型 在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。" $foo = "0"; // $foo是字符串(ASCII 48) $foo++; // $foo是字符串"1" (ASCII 49) $foo += 1; // $foo现在是整数(2) $foo = $foo + 1.3; // $foo是一个双精度数(3.3) $foo = 5 + "10 Little Piggies"; // $foo是一个整数(15) $foo = 5 + "10 Small Pigs"; // $foo是一个整数(15) 如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 2.5 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样就可以声明全局变量了 } 更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。 PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。 2.6 运算符 PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。 算术和字符 以下只有一种运算符是有关字符的: $a + $b :加 $a - $b :减 $a * $b :乘 $a / $b :除 $a % $b :取模(余数) $a . $b :字符串连接 逻辑和比较 逻辑运算符有: $a || $b :或 $a or $b :或 $a && $b :与 $a and $b :与 $a xor $b :异或 (当$a或$b为true时为true,两者一样时为false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a < $b :小于 $a $b :大于 $a >= $b :大于等于 与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。 优先权 就和C以及Java一样! 2.7 控制流程结构 PHP有着与C一样的流程控制。我将在下面大概介绍。 if, else, elseif, if(): endif if (表达式一) { . . . } elseif (表达式二) { . . . } else { . . . } // 或者像Python一样 if (表达式一) : . . . . . . elseif (表达式二) : . . . else : . . . endif ; Loops. while, do..while, for while (表达式) { . . . } do { . . . } while (表达式); for (表达式一; 表达式二; 表达式三) { . . . } //或者像Python一样 while (expr) : . . . endwhile ; switch switch是对多重if-elseif-else结构的最好的替换: switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; } break, continue break中断当前的循环控制结构。 continue被用来跳出剩下的当前循环并继续执行下一次循环。 require, include 就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。 2.8 函数 你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型: function foo (变量名一, 变量名二, . . . , 变量名n) { echo "Example function.\n"; return $retval; } 所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。 2.9 类 利用类模型建立类。可以参考PHP手册中对类的详细解释。 class Employee { var $empno; // 员工人数 var $empnm; // 员工姓名 function add_employee($in_num, $in_name) { $this->empno = $in_num; $this->empnm = $in_name; } function show() { echo "$this->empno, $this->empnm"; return; } function changenm($in_name) { $this->empnm = $in_name; } } $sbabu = new Employee; $sbabu->add_employee(10,"sbabu"); $sbabu->changenm("babu"); $sbabu->show(); 三、从实例入手  PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。 3.1 计划一个站点 一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。 标题页面--front.html 这里我们有一个非常简单的html文件: 我的个人主页--欢迎 我的个人主页 欢迎 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 Copyright ? 我自己,1999 联系信息页面--count.html 同样我们又有了一个简单页面: 我的个人主页--联系信息 我的个人主页 联系信息 你可以通过1-800-PHP-INFO联系我 Copyright ? 我自己,1999 3.2 HTML到PHP 从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。我们将把这些include文件放在一个叫include的子目录下。下面我们就把这些站点的通用内容写进文件中。 全站通用变量设定:common.inc <? // 全站通用变量 $MyEmail = "[email protected]"; $MyEmailLink = "$MyEmail"; $MyName = "PHP Talk"; $MySiteName = $MyName."'s Home Page"; ?> 通用页面头部:header.inc 通用页面底部:footer.inc Copyright ? by , 1999 新的页面front.php3: 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 新的cont.php3: 你可以通过1-800-PHP-INFO联系我 现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。 3.3 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码: 然后我们更改front.php3文件以显示这个计数器: <? include("include/counter.inc"); // 我把计数值放在文件counter.txt中,读出并输出 printf ("%06d \n", get_hitcount("counter.txt")); include("include/footer.inc"); ?> 看看我们的新front.php3 3.4 反馈表单 让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。 PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。 在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要的就是为表单中的每一个元素取名以便将来可以引用。 根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。 表单:form.php3 Your feedback on my home page. 处理表单:sendfdbk.php3 <? include("include/common.inc"); $title = "Feedback"; include("include/header.inc"); if ( $name == "" ) { // 现在我很讨厌匿名的留言! echo "Duh ? How come you are anonymous?"; } elseif ($name == "Your name") { // 这个浏览者真是不想透露姓名啊! echo "Hello ? Your name is supposed to be replaced with your actual name!"; } else { // 输出一段礼貌的感谢语 echo " Hello, $name. Thank you for your feedback. It is greatly appreciated. Thanking you $MyName $MyEmailLink "; // 最后mail出去 mail($MyEmail, "Feedback."," Name : $name E-mail : $email Comment : $comment "); } include("include/footer.inc"); ?> 3.5 简单的站内搜索引擎 PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。 <FORM ACTION="" METHOD="POST"> <INPUT TYPE="text" NAME="searchstr" value="" SIZE="20" MAXLENGTH="30"> <? if ( ! empty($searchstr) ) { // empty()用来检查查询字串是否为空 // 如果不为空,调用grep查询 echo "\n"; // 调用grep对所有文件进行大小写非敏感模式的查询 $cmdstr = "grep -i $searchstr *"; $fp = popen( $cmdstr, "r" ); // 执行命令并输出管道 $myresult = array(); // 存储查询结果 while( $buffer = fgetss ($fp, 4096)) { // grep返回这样格式: 文件名:匹配字串出现行数 // 因此我们利用函数split()分离处理数据 list($fname, $fline) = split(":",$buffer, 2); // 我们只输出第一次匹配的结果 if ( !defined($myresult[$fname])) $myresult[$fname] = $fline; } // 现在我们将结果存储在数组中,下面就可以处理并输出了 if ( count($myresult) ) { echo "\n"; while(list($fname,$fline) = each($myresult)) echo " $fname : $fline \n"; echo "\n"; } else { // 如果没有查询结果 echo "Sorry. Search on $searchstr returned no results.\n"; } pclose($fp); } ?> 注释: PHP_SELF是PHP内建的变量。包含当前文件名。 fgets()按行读取文件,最多4096(指定)字符长度。 fgetss()与fgets()相似,只是解析输出的HTML标记。 split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。 each()是一个数组操作函数,用来更方便的遍历整个数组。 popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。 请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索 四、与数据库链接 通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。 PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。 想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。 4.1 连接 <? if ($conn=Ora_Logon("user@TNSNAME","password")) { echo "SUCCESS ! Connected to database\n"; } else { echo "Failed :-( Could not connect to database\n"; } Ora_Logoff($conn); phpinfo(); ?> 以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。 4.2 查询 假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子: <? /* * 连接数据库并执行查询 */ function printoraerr($in_cur) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 if(ora_errorcode($in_cur)) echo "Oracle code - ".ora_error($in_cur)."\n"; return; } /** 主程序 */ if (!($conn=ora_logon("user@TNSNAME","password"))) { echo "Connection to database failed\n"; exit; } echo "Connected as connection - $conn\n"; echo "Opening cursor ...\n"; $cursor=ora_open($conn); printoraerr($cursor); echo "Opened cursor - $cursor\n"; $qry="select user,sysdate from dual"; echo "Parsing the query $qry ...\n"; ora_parse($cursor,$qry,0); printoraerr($cursor); echo "Query parsed \n"; echo "Executing cursor ...\n"; ora_exec($cursor); printoraerr($cursor); echo "Executed cursor\n"; echo "Fetching cursor ...\n"; while(ora_fetch($cursor)) { $user=ora_getcolumn($cursor,0); printoraerr($cursor); $sysdate=ora_getcolumn($cursor,1); printoraerr($cursor); echo " row = $user, $sysdate \n"; } echo "Fetched all records\n"; echo "Closing cursor ...\n"; ora_close($cursor); echo "Closed cursor\n"; echo "Logging off from oracle... \n"; ora_logoff($conn); echo "Logged off from oracle \n"; ?> (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.3 显示结果 以下代码演示了怎样查询数据库并将结果输出: <? function printoraerr($in_cur, $conn) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 // If it encountered an error, we exit immediately if(ora_errorcode($in_cur)) { echo "Oracle code - ".ora_error($in_cur)."n"; ora_logoff($conn); exit; } return; } function exequery($w_qry,$conn) { $cursor=ora_open($conn); printoraerr($cursor,$conn); ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn); ora_exec($cursor); printoraerr($cursor,$conn); $numrows=0; $w_numcols=ora_numcols($cursor); // 显示头部 echo " \n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; echo "\t".ora_columnname($cursor,$i)."\n"; } echo "\n"; while(ora_fetch($cursor)) { echo "\n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; if(ora_columntype($cursor,$i)=="LONG") echo "". ora_getcolumn($cursor,$i)."\n"; else echo "".ora_getcolumn($cursor,$i)."\n"; printoraerr($cursor,$conn); } $numrows++; echo "\n"; } if ($numrows==0) echo "Query returned no records \n"; else { echo "\n"; echo "Count\n"; echo "$numrows\n"; echo "\n"; } echo "\n"; ora_close($cursor); return; } // 主程序 if(!($conn=ora_logon("user@SID","password"))) { echo "Error: Cannot connect to database\n"; exit; } $qry="SELECT deptno \"Dept\" ,empno \"Emp\" ,empnm \"Name\" ,salary \"Salary\" FROM employee ORDER BY 1,2"; exequery($qry); ora_logoff($conn); ?> (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.4 基于HTTP的Oracle登录 将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。 <? if(!isset($PHP_AUTH_USER)) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorized to enter the site \n"; exit; } else { if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW))) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorised to enter the site \n"; exit; } } ?> 五、其它功能 5.1 生成图像 PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。 (译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分) 这段代码在其他页面中通过以下标记调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。 5.2 Cookies PHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子: <? if (empty($VisitedBefore)) { // 如果没有设定cookie,为cookie赋上当前时间值 // 函数中的最后一个参数声明了该cookie保存的时间 // 在这个例子中是1年 // time()函数返回自1970年1月1日以来的以秒数计的时间 SetCookie("VisitedBefore",time(), time()+(60*60*24*365)); } else { // 欢迎浏览者再次光临 echo "Hello there, welcome back"; // 读取cookie并判断 if ( (time() - $VisitedBefore) >= "(60*60*24*7)" ) echo "Why did you take a week to come back. You should be here more often!? "; } ?> 5.3 基于HTTP验证 基于HTTP验证当PHP以CGI模式运行时不能实现。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$PHP_AUTH_USER和$PHP_AUTH_PW中,你可以使用这两个变量验证合法并允许进入。以下的例子通过用户名称/密码对为tnc/nature的验证一名用户的登录: 事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。 5.4 文件上传 你可以利用PHP实现文件的功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示: ( upload.html ): Upload Your File (You may notice a slight delay while we upload your file.) 下面是处理上传的文件: ( receiver.php3 ): 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } $the_time = time (); // 你需要对以下目录有写权限 $upload_dir = "/local/uploads"; $local_file = "$upload_dir/$the_time"; if ( file_exists ( '$local_file' ) ) { $seq = 1; while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq++; } $local_file = "$upload_dir/$the_time$seq"; }; rename ( $uploadfile, $local_file ); display_page (); } function display_page () { // 这里是你的页面内容 } php3 Receiving Script <? if ( $error_msg ) { echo "$error_msg"; } if ( $sendit ) { do_upload (); } elseif ( $cancelit ) { header ( "Location: $some_other_script" ); exit; } else { some_other_func (); } ?> 5.5 常用函数 我们简单来看看一些常用的函数。 数组 array - 生成数组 count - 数组元素个数 sort - 数组排序,另有其他几种排序函数可供使用 list - 列出数组元素 each - 返回下一个key/value对 current - 返回当前数组元素 next,prev - 传回当前数组元素前后指针 日期和时间 checkdate - 验证日期/时间格式 date - 生成日期/时间格式 time - 当前时间信息 strftime - 格式化日期/时间 目录、文件系统 chdir - 改变目录 dir - 目录类别 opendir, readdir, closedir - 开启、读取、关闭目录 fopen, fclose - 开启、关闭文件 fgets, fgetss - 逐行读取内容 file - 将整个文件读入一个数组变量中 正则表达式 ereg - 匹配正则表达式 eregi - 大小写非敏感匹配正则表达式 ereg_replace -匹配正则表达式并替换 eregi_replace -大小写非敏感匹配正则表达式并替换 split - 依规则切开字符串并以数组形势存储 字符串 AddSlashes - 加上斜杠后使用字符串 echo - 输出一个或多个字符串 join, implode - 将数组元素合并为字符串 htmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式 split - 依规则切开字符串并以数组形势存储 5.6 扩展我们的范例主页 我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证表单以便上传音乐、图像等文件并自动更新页面。 导航栏 实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.php3的文件都会出现在导航栏中,以下就是被存为include/navbar.inc的代码: <? /* 输出该导航栏,链接所有除当前页的站内.php3文件 */ # 读取目录 $d = dir("./"); echo " | \n"; while($entry = $d->read()) { // 忽略无文件情况 if ( !is_file($entry) ) continue; /* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用\引出 */ list($filenm, $fileext) = split("\.",$entry, 2); // 忽略非.php3文件情况 if( $fileext != "php3" ) continue; /* 现在我们已经把.php3文件都选出,下面搜寻文件中的第一行(标题) 类似$title="something"; 并将以上标题内容分开,用作链接文字 */ $linknm = ""; $fp=fopen($entry,"r"); while($buffer=fgets($fp, 4096)) { $buffer = trim($buffer); // 我们已经把每个文件的标题放在文件的第一行以便搜索 // 但是当你改变变量名称时可能会带来大麻烦 if (ereg("title *= *\"", $buffer)) { /* 我们已经取得了标题内容并可以在此基础上 进行去除空格等处理。 必须以PHP代码方式处理,比如$title = "blah blah" */ eval($buffer); // 然后将链接文字显示为标题文字 $linknm = $title; break; } } fclose($fp); if ( $entry == basename($PHP_SELF) ) echo "$linknm"; else echo "$linknm"; echo " | "; } $d->close(); echo " \n"; ?> 照片收藏夹 我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。 同时我们需要建立一个可以列出在该目录下所有照片的页面。 文件上传 <? include("include/common.inc"); // 我们在这里再一次用户验证 if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"$MySiteName\""); Header("HTTP/1.0 401 Unauthorized"); echo "Sorry, you are not authorized to upload files\n"; exit; } else { if ( !($PHP_AUTH_USER==$MyName && $PHP_AUTH_PW==$MyPassword ) ) { // 如果是错误的用户名称/密码对,强制再次认证 Header("WWW-Authenticate: Basic realm=\"My Realm\""); Header("HTTP/1.0 401 Unauthorized"); echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid."; exit; } } if ( $cancelit ) { // 当浏览者按下"取消"按钮则转向首页面 header ( "Location: front_2.php3" ); exit; } function do_upload () { global $userfile, $userfile_size, $userfile_name, $userfile_type; global $local_file, $error_msg; global $HTTP_REFERER; if ( $userfile == "none" ) { $error_msg = "You did not specify a file for uploading."; return; } if ( $userfile_size > 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } // Wherever you have write permission below... $upload_dir = "photos"; $local_file = "$upload_dir/$userfile_name"; if ( file_exists ( $local_file ) ) { $error_msg = "Sorry, a file with that name already exists"; return; }; // 你还可以由此检查文件名称/类型对以确定是何种文件:gif,jpg,mp3… rename($userfile, $local_file); echo "The file is uploaded\n"; echo "Go Back\n"; } $title = "Upload File"; include("include/header.inc"); if (empty($userfile) || $userfile=="none") { // 输出以下表单 ?> <FORM ACTION="" ENCTYPE="multipart/form-data" METHOD=POST> (You may notice a slight delay while we upload your file.) <? } else { if ( $error_msg ) { echo "$error_msg"; } if ( $sendit ) { do_upload (); } } include("include/footer.inc"); ?> 照片图库 Here are some of our family photos. This PHP script can really be made better, by splitting into multiple pages. read()) { if (is_file("photos/$entry")) echo "\n"; } $d->close(); ?> 另外,你可以在文件上传的表单中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。 六、网络资源 你可以通过web上的众多资源更多的了解PHP3。许多邮件列表和书籍对你都非常有用。 6.1 站点 PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。 国内 http://www.phpuser.com - PHP中文用户,也就是这里了 http://www.phpx.com - 中国PHP联盟 http://www.phpsite.net - PHP专门站 http://www.phpchina.com - PHP CHINA http://www.cpcw.com/netschool/homepage/cgi/ - 电脑报网页陶吧 国外 http://www.php.net/ - PHP官方站点 http://www.devshed.com/ - 极好的教程 http://px.sklar.com - 代码交换 http://www.phpbuilder.com/ - 教程、专栏和邮件列表档案 http://www.weberdev.com/ - 文章和代码 http://www.phpwizard.net/ - 提示与技巧 http://www.iometrics.com/php/phplist.php3/ - IOMetrics scripts的档案 http://www.e-gineer.com/phpkb/ - PHP知识库 6.2 邮件列表 你可以在PHP官方站点的"支持"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。 [email protected] - 主要的列表 [email protected] - 主要针对开发[email protected] - 本站的邮件列表,与论坛相通 6.3 引人注目的工程 一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是: http:// phplib.netuse.de - PHPLib,一整套PHP函数库 http://www.phorum.org - Phorum是一个很完善的BBS系统 http://www.fishcartsql.org - FishCartSQL是一个电子商务解决方案 http://www.midgard-project.org - Midgard是一个网络应用开发平台 Generated by Bo-blog 2.0.2 sp2
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于Nodejs和React hooks实现的知乎日报WebApp系统源码+详细项目说明.zip 知乎日报-WebApp zhihu 技术栈:create-react-app、React18、redux/react-redux「你可以使用mobx或者reduxjs/toolkit」、react-router-dom V6、Fetch、less、AntdMobile... 从零开始构建React项目「本项目不采用任何系解决方案(例如:淘系),就是基于最纯正的React实现开发」 1. 基于create-react-app创建工程化项目 $ npm i create-react-app -g $ create-react-app 项目名 --- $ yarn eject 暴露webpack配置项 修改脚手架默认的配置 + 配置less:less/less-loader@8 + 配置别名 @ 代表 src 目录「选配」 + 配置浏览器兼容 + 配置客户端启动服务的信息 + 配置跨域代理:http-proxy-middleware + 配置REM响应式布局的处理:lib-flexible、postcss-pxtorem + 配置打包优化 + ... 2. 准备一些项目开发必备的材料 src/api/http.js:fetch请求的二次封装 src/assets: + reset.min.css 清除浏览器默认样式 + images 静态资源图片 + utils.js 自己封装的常用方法库 + ... 3. 配置好REM响应式布局 && 样式处理 lib-flexible 设置REM和PX换算比例的 + 根据设备宽度的变化自动计算 + html.style.fontSize=设备的宽度/10+'px'; + 750设计稿中 1REM=75PX : 初始换算比例 + 375设备上 1REM=37.5PX postcss-pxtorem 可以把我们写的PX单位,按照当时的换算比例,自动转换为REM,不需要我们自己算了 ---- @1 假设设计稿还是750的,我们测出来多少尺寸,我们写样式的时候,就写多少尺寸,并且不需要手动转换为REM「我们在webpack中,针对postcss-pxtorem配置,让插件帮我们自动转换」 const px2rem = require('postcss-pxtorem'); px2rem({ rootValue: 75, // 基于lib-flexible,750设计稿,就会设置为1REM=75PX;此时在webpack编译的时候,我们也需要让px2rem插件,按照1REM=75PX,把我们测出来的并且编写的PX样式,自动转换为REM; propList: ['*'] // 对所有文件中的样式都生效{AntdMobile组件库中的样式} }) @2 在入口中,我们导入lib-flexible,确保在不同的设备上,可以等比例的对REM的换算比例进行缩放!! @3 手动设置:设备宽度超过750PX后,不再继续放大!! 4. 配置路由管理 5. 配置redux架子 6. 其它的基础框架配置 7. 逐一开发项目,注意组件的抽离封装 8. 开发完毕后 + 项目优化 + 封装提取 + 内部测试 + 部署上线 知乎日报-后端 zhihu_admin 后端的数据接口分为两部分 + 从知乎日报官方实时拉取数据「新闻、新闻详情、新闻的评论数...」 + 自己研发的个人中心系统「登录/注册、发送验证码、个人信息获取和修改、收藏体系...」 后端技术栈: + Node、Express

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员七海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值