跟福哥学编程吧~~
准备工作配置数据源config.xml<database>     <default driver="mysql" host="tfmysql" port="3306" use...
跟福哥学编程吧~~
开发建立user模型model/user.inc.phpclass user extends tfmodel{     public function __construct(tfphp $tfphp){   &...
跟福哥学编程吧~~
介绍介绍前面福哥已经教给大家使用Dockerfile制作自己的镜像的方法了,今天我们使用Dockerfile制作一个PHP7+Apache的运行环境的镜像,用来部署PHP应用程序和服务。福哥选择的基础镜像是php:7.4-apache-buster,这个镜像可以从官方拉取。环境镜像版本php:7.4-apache-buster操作系统...
跟福哥学编程吧~~
介绍介绍前面福哥已经教给大家使用php:7.4-apache-buster基础镜像搭建PHP运行环境了,这个是以模块方式(Module)运行PHP程序的,相比较这种方式更多人会选择主流的以FastCGI方式运行PHP程序,以FastCGI方式运行PHP程序就要用到PHP的FPM服务(FastCGI Process Manager)了。...
跟福哥学编程吧~~
安装安装包github安装包地址https://github.com/krowinski/php-mysql-replication https://github.com/doctrine/dbalhttps://github.com/doctrine/event-manager https://github.com/php-fig/...
跟福哥学编程吧~~
介绍介绍福哥在使用PHP开发一个允许用户输入伪代码实现自定义业务逻辑的功能时候,想到了使用PHP的eval功能动态解析PHP代码并且执行来实现。不过,福哥发现了一个问题。大家都知道PHP的语法错误是在解析PHP代码的环节就会触发的严重错误,这个错误无法通过set_error_handler钩住它进行自定义处理,这个可能难坏了我了!毕竟...
跟福哥学编程吧~~
介绍介绍前面福哥已经教给大家使用Dockerfile安装各种服务器软件的方法了,今天福哥要带着大家把TFLinux服务器上的软件都转移到Docker容器里面。使用Docker容器搭建服务器环境是现如今部署服务器环境的主流方式,福哥顺应潮流将Docker这种部署方式教给大家,活到老学到老嘛~~这次福哥整理的是PHP+FPM+Nginx环...
跟福哥学编程吧~~
介绍介绍今天福哥要带着大家来通过Rancher部署PHP环境了,同样的我们还是使用php:7.4-fpm-buster这个镜像作为基础镜像。因为php-fpm不能处理静态页面内容,所以我们还会使用nginx:1.20这个镜像作为基础镜像部署一个Nginx环境。就是PHP环境只处理PHP程序,而Nginx环境负责处理镜头内容。还有一点需...
跟福哥学编程吧~~
介绍介绍福哥需要在php里使用AES加密解密功能,今天整理出来和大家分享一下。早期的PHP实现AES借助的是mcrypt扩展,后来在PHP7之后就换成了openssl扩展来实现了。mcrypt版本代码比较复杂且需要自己实现PKCS7补位的逻辑,而openssl版本则默认使用了PKCS7补位不需要自己来编写代码实现了。通过openssl...
跟福哥学编程吧~~
介绍介绍php脚本有着非常强大的库支持,可以轻松做出特别强大的程序。php不仅仅可以搭建各种各样的网站系统、平台系统,还可以开发基于控制台运行的程序。不过使用php开发的控制台程序在使用的时候需要保证包含库文件的相对路径结构,这个在使用上不是很方便。如果有一个方法可以把整个php项目都变成一个php文件就好了。其实php自身支持一种叫...
跟福哥学编程吧~~
介绍介绍福哥把PHP从Apache module换成了Fpm,跑了几天突然发现网站打不开了。页面显示超时,检查MySQL、Redis一众服务都正常。进入Fpm容器查看日志,发现了如下的错误信息:server reached pm.max_children setting (5), consider raising it原因原来默认情况...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成修改个人资料表单的后一部分,实现表单的数据载入功能。要实现表单数据的载入首先得开发一个表单数据的接口,这个表单数据接口需要对应一个单独的实体对象。根据资源路径命名规范,路径里只能出现资源名称,不能出现事件行为。提交表单和数据载入都属于用户的个人资料数据,不能建立两个个人资料接口,怎么办?我们可以使用资源路径...
跟福哥学编程吧~~
介绍介绍福哥今天会带着大家完成设置用户头像的功能的开发。设置用户头像是一个特殊的表单,它含有文件上传功能的HTML输入控件,处理这种表单需要一些技巧。文件上传功能需要使用类型为file的HTML输入控件,我们的TFPHP框架的表单是使用AJAX技术进行提交的,而前面我们使用jQuery的serialize方法收集表单数据的方式并不适用...
跟福哥学编程吧~~
介绍介绍福哥今天要带着大家完成TFUMS系统的修改登录密码功能。修改登录密码功能相对比较简单,一般网站会直接让登录用户随便改登录密码,这样存在一个问题,就是当用户登录后离开电脑,“陌生人”操作电脑修改了登录密码,用户回来后发现无法登录就尴尬了!福哥为了避免这个问题,在修改登录密码的时候要求操作者(也可能不是用户本人)提高当前的登录密码...
跟福哥学编程吧~~
介绍介绍福哥今天要给TFPHP框架添加一个新的对象,就是用来加工图片的工具对象TFImage。一般情况下,在做web开发的时候会有很多场合需要对用户上传的图片进行加工处理,常有的加工操作有缩小、旋转、裁剪、加水印、写文字等等。在PHP里面如果要对图片进行加工处理的话就需要用到GD扩展库了,这个GD扩展库在我们的TFLinux里面已经安...
跟福哥学编程吧~~
介绍介绍在现如今的互联网时代里电子邮件的使用率大幅度降低了,除了企业内部发通知之外就剩下网站平台发送激活邮件使用了。但是无论如何发送邮件这个需求还是有的,而大多数发送邮件都是使用SMTP协议方式发送的,因为匿名邮件会被大多数客户端(如:Outlook、Foxmail、GMail等等)自动丢尽垃圾箱里面了。今天福哥就要给我们的TFPHP...
跟福哥学编程吧~~
介绍介绍福哥今天要带着大家完成绑定邮箱功能的前半部分——发送绑定邮箱激活码邮件。这里面有几件难题:1)要实现邮件激活码,需要设计一个可逆的加密/解密功能;2)激活链接必须是一个完整的URL地址;3)激活链接必须有时效性。第一个问题,福哥经过再三考虑决定使用AES算法实现一个可逆的加密/解密功能,为了保证每次的激活码不一样,原数据增加随...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成绑定邮箱功能的后一部分——验证绑定邮箱激活码功能。这个激活码的验证需要几个步骤:1)根据激活码使用AES算法解密得到原始数据;2)判断激活码内的用户状态是否正常;3)判断激活码内的邮箱地址是否被占用;4)写入绑定邮箱数据。解密激活码比较简单,不过要考虑一个时间差的问题,因为激活码的时间戳精确到1个小时,而生...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成会员中心的最后一个表单——设置安全问题的开发。这个安全问题一般情况下是不允许修改的,所以我们暂时也不提供修改的功能。密码安全问题一共有三组,每一组一个问题配着一个答案。问题都是一样的,所以实际上我们是在一组问题里面挑出三个问题。既然问题是固定的,就可以用编号来表示,而答案是根据用户自己的想法写的,只能是原封...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码功能的第一步——验证用户信息。因为用户数据表里userName和userEmail都是唯一的,它们都可以作为忘记密码的验证手段。而userEmail是需要登录后进行绑定邮箱才会产生的,也就是说它不一定是存在的。综上所述,福哥决定userName和userEmail都要验证,只要其中一...
跟福哥学编程吧~~
介绍介绍福哥今天要带着大家完成TFUMS系统的忘记密码功能地第二步——身份验证方式选择的开发。身份验证方式指的是我们要确定这个“忘记密码”的人是不是账号的所有人,既然他不知道密码就只能通过其他方式验证了。前面我们有要求用户设置绑定邮箱,绑定邮箱是账号所有人的私有邮箱,如果“忘记密码”的人可以收到寄到绑定邮箱里的邮件,则证明他就是账号的...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码里面的第一种重置方式——通过绑定邮箱重置密码的前半部分功能的开发。思路是这样的,我们先要知道哪个用户忘记了自己的密码,得到用户名之后判断用户名是否有绑定过邮箱。如果有绑定邮箱的话,我们就向这个绑定邮箱里发生一封邮件,邮件里面包含一个网址,网址携带一个验证码。如果用户可以接收到这封邮件...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成了通过绑定邮箱重置密码的后一部分功能——重置密码功能。这一部分功能的思路是这样的,首先点开发到邮箱里的邮件正文里面的重置链接,这是一个重置密码的表单页面,用户可以直接设置一个新密码。不过,这里面会校验传入的验证码是否有效,如果验证码有效的话才可以完成密码的重置操作。并且,如果密码重置成功后,验证码会被记录到...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码功能的使用安全问题重置密码的前一部分功能的开发。使用安全问题重置密码相对比较简单了,我们只需要将用户设置过的安全问题的题目和答案取出来给用户答,如果用户能完全答对就表示用户是账号的所有者,我们就允许他来重置用户的登录密码了。验证安全问题需要注意几个问题:必须将三个问题都调出来给用户来...
跟福哥学编程吧~~
介绍介绍福哥带着大家完成TFUMS的忘记密码功能的通过安全问题重置密码的后一部分功能的开发。这一部分的功能和通过绑定邮箱重置密码基本一样,福哥就不详细介绍了。大家可以对照着看【20201224】的介绍了解设计思路,基本上都是一样的设计。通过安全问题重置密码功能开发完成之后,我们的忘记密码功能就算全部完成了。随着忘记密码功能的竣工,我们...
跟福哥学编程吧~~
介绍介绍福哥带着大家花费了将近40天的时间终于完成了TFUMS系统的开发。这个TFUMS系统是福哥带着大家完成的第二个PHP语言的项目,第一个PHP语言的项目是TFPHP框架。并且这个TFUMS系统是基于我们前面开发的TFPHP框架开发的。福哥想问问大家,这种从零开始的感觉是不是很爽啊?一般人带着做项目都是基于一些开源的框架进行的,而...
跟福哥学编程吧~~
介绍介绍福哥今天带着大家给TFPHP框架添加一个非常重要的功能模块——TFHttpClient。在很多情况下,我们的控制器需要通过远程的方式调用接口上的数据或者功能,因为这些接口可能属于其他系统或者其他服务,从本地无法直接访问。这种通过远程方式访问接口就需要借助可以模拟浏览器进行网站访问工具对象来完成,因为网站或者平台是遵循HTTP协...
跟福哥学编程吧~~
介绍介绍前几课福哥带着大家完成了安全模块的绑定邮箱功能和安全问题功能,这两个功能一般情况下是不能修改的。但是,我们在开发完这两个功能之后并没有进行“锁定”处理。也就是说,重新进入绑定邮箱表单依然可以重新操作绑定邮箱,再次进入设置安全问题表单依然可以重新操作设置安全问题。这显然是一个问题,需要我们采取一些措施。要“锁定”安全模块的表单功...
跟福哥学编程吧~~
介绍介绍今天福哥带着大家给TFPHP框架的TFDO对象增加两个新方法——fetchTotal和fetchPart。这个fetchTotal方法用来获得输入SQL语句查询结果的记录集总数,而fetchPart方法用来从输入SQL语句查询结果的记录集里提取一部分记录出来。一般情况下这两个方法可以用来实现功能列表的数据分页功能,这个数据分页...
跟福哥学编程吧~~
介绍介绍今天福哥带着大家给TFPHP框架增加一个新对象——TFDataPage,使用这个对象可以用来计算功能列表的分页参数。分页是一项技术,用来对功能列表里面的众多条数据记录进行分页处理。其原理是这样的,首先全部数据记录数量就是记录总数(Total);将全部数据记录根据一个固定数字进行等分处理,这个固定数字就是页长度(Page siz...