这篇文章是我2020年在校期间疫情居家实习的日志,当时实习获得了很高的成绩,因为已经毕业挺久了觉得现在就放上来也对我也没有影响,还能给大家提供一个实习的模板(膨胀)帮助当前同样因疫情被迫居家实习广大计算机类专业的莘莘学子。

当时是开发了一个二手商品的交易交流系统,主要为高校内校方二手商品的销售处理提供了一个网上交易交流平台,以最大价值的解决掉每年毕业生留下淘汰的二手商品,顺便能让有需求的买家更轻易地浏览这些商品成色;有前台系统管理和后台系统管理两部分,通过前后两部分可以有效实现校园二手商品交易系统的各项基本功能,可配合校内二手交易QQ群满足校园二手商品交易的需求。该网站因其稳定性获得校内同学和指导老师以及系领导高度评价,以此为实习经历并获得了优秀成绩,系统作为校二手交易qq 群的辅助直到2022年租用的华为云服务器到期为止一直在提供服务。

(需要注意的是,直到这个实习结束系统只完成了雏形部分,后面的完善工作进行了更久,但因为华为云服务器到期的原因,这个系统没有办法直接浏览到了)

实习评语

该生在实习期间态度非常认真,并没有因为疫情特殊时期居家实习的形式而对实习工作有所懈怠。对指导老师安排的题目和提供的学习资料,能够积极主动学习,注重理论知识与实践相结合,将大学三年所学的多门专业课程的知识实现综合性应用。

在团队合作方面,该生也可以做到团结同学,很好的担任了组长这个角色,能够合理分配小组内各项任务,主动承担起其中难度和工作量最大的部分,并和小组其他同学进行良好的沟通配合。

在实习日志撰写方面,该生可以做到对实习进程中各项学习和工作内容较为详细的记录,并总结完成实习报告,其中不仅包含实习期间内所学所用理论知识的描述,更详细记录了实习过程中遇到的各种问题的分析和解决、自身学习工作的心得体会等内容。

非常好的达到了本科专业实习日志的要求。

实习成绩:优

指导教师签字:毕胜男

2020 7 4

2020年6月8日 星期一

早上八点实习指导老师毕老师跟我们开会详细讲解了一些关于实习的安排和实习过程中具体要求,提供了参考题目推荐,并且把系统开发报告的模板发给了大家。今天算是实习分组之后的第一次会议,虽然小组在之前已经分好并确定了大方向,但关于实习的一切都还很迷蒙,这次会议之后大家可能需要之后再多看几遍老师在钉钉的录播;实习推荐的学生管理系统,运动会报名系统,教师工作量系统三个,但我更想做一个以学生身份来讲比较贴合实际的网站项目,老师正好也在钉钉群里发布了WEB开发技术的课件,一定程度上可以拿来参考。

我在之前开发过相关的信息系统一类的项目,但是多是用C和C++、python学习数据结构和练手所做的小项目跟只能通过调试窗口运行的连项目都算不上的核心代码,因为对数据库设计和服务器环境的要求以及实际执行阶段各个功能函数汇总庞大的代码量,我除个人博客网站外还并没有做过可以直接在服务器中运行的WEB项目,这次的目标于我而言应该十分有挑战性、虽然不报有什么太高的定位,但是依然期待最后完成的效果。

小组成员都是比较熟悉的人,配合起来应该不会产生什么摩擦。我被任命为了小组组长,这应当算是一件好事,至少这样一来最终的项目选择和执行上基本上不会出现什么意见不统一的问题。

毕胜男老师是一个十分干练稳重而负责任的老师,之前的系统工程和管理信息系统分析与设计就是由毕老师教授的,老师稳扎稳打不又局限于书本的讲述风格和对经常无意间透露出的对学生的关心令我印象深刻,这次能安排到毕老师的团队下我感到十分荣幸。

由于疫情的关系只能在家里面实习,这虽非我们所愿但只能去接受并适应,好在计算机方面的实习对环境和场地的依赖并不强,期待这次实习能带来意想不到的收获吧。

2020年6月9日 星期二

经过综合考虑决定暂定题目为《基于Thinkphp框架的校园二手图书交易系统》。

这题目脱胎于管理信息系统分析与设计课程推荐的项目之一,选择这个题目的很大一部分契机是意外看到了学期末才发下来的教科书,因为绝大多数书籍还没来得及看结果课程就结课了,相当于白瞎了买书的钱,十分心疼。在考虑如何处理这些书和之前那些用剩下的教科书的时候想起了自己还没有确定的实现项目题目,一个校园二手图书交易系统应景而且有趣,最后左思右想下就决定定为这个题目。

下午久违的登陆了部署在上海的云服务器,自域名过期之后这个服务器一直空耗着没有关机也没有工作。

现在拿出Xshall来看看配置都还是当时搭博客时候那一套,Linux根目录什么都有、遗留下来的各类配置文件和tar压缩文件毫无规则的分布在各个角落,ls之后看起来只感觉杂而乱,令人心烦。

我花了一下午的功夫整理遗留下来的垃圾文件和暂时用不上的压缩包,并且备份了之前搭建网站时留下的的源代码和更之前搭建博客时tpyecho留下的插件;话说实际上因为当时我域名到期时没有做重定向,而自域名续费时间已经过了很久已经进入高价赎回阶段所以当时开着伪静态没有关的博客源代码已经彻底不能用了,理智些应该删除了才是…最后我还是通过FTP协议备份到了我的笔记本上,难道自己内心深处还抱着什么微妙的希望吗。

某个学长说从Linux平台方便借鉴其他人同框架下项目。

腾空了的服务器用来做本次项目的调试及真正发布平台,目前没有购买域名的想法、不过即便这样也能通过IP在任何电脑上访问,应该还算比较方便了吧。

2020年6月14日 星期日

稍微谈一下关于为什么框架要用ThinkPHP的问题。

决定用ThinkPHP很大一部分原因是因为当时看到电子信息系实验室的网站就是通过ThinkPHP框架搭建的,而且ThinkPHP框架相对而言比较简单;当然另外还有一方面是因为某学长(现在正在本部读研)对这方面很熟悉,而我们相熟请教的话选这个也比较好请教。

ThinkPHP的版本问题选取比较特殊,本次实习并没有选取最新版本的ThinkPHP框架而是选用了“比较老”的THinkPHP3版本;当时ThinkPHP 3被认为是中国版的CodeIgniter,直到现在很多人说ThinkPHP用得多,应该也主要是指ThinkPHP 3代而非5代之后的版本,因为ThinkPHP 3和CodeIgniter相比其他框架都比较简单.而5代之后的ThinkPHP则更像Laravel一类框架,现在很多人认为PHP框架走的路线,跟最初PHP要走的路线(简单易部署),基本是本末倒置,南辕北辙,理所当然的,比较容易容易找到的教程及借鉴模板也是ThinkPHP 3 比较多。

由于以上原因,在不打算深入掌握ThinkPHP框架相关技术的前提下,综合考虑反倒是3.0版本更适合实际开发实验。本次选择的版本是带有完整手册的ThinkPHP3.2.2。

不过说到深入学习框架,依我之见,如果以后一定要用框架来开发Web应用,现在看来Java里的Spring是最稳妥的,Spring地位稳固,维护Spring的Pivotal公司后面是EMC/VMware/GE(通用)这种大公司,基本不用担心被弃坑,而且在Java框架中,Spring具有绝对权威甚至可以说垄断的地位,这是PHP框架中没有任意一个可以比得了的。

话说回来如果只是想好好开发一个网站的话感觉PHP中最稳妥的办法还是如学长说的,像WordPress那样,核心自己写,掌握全局,这样不怕有人弃坑,完全不用担心弃坑后的安全性问题和所谓升级后的兼容性问题。

2020年6月17日 星期三

近段时间由于北京疫情的原因家里有些事情,一直跟着父母来回去老家那边耽误了实习项目的进度。

选用ThinkPHP3.2.2之后发现PHP的版本不兼容,需要用PHP 5才能正常支持;我原来用的是PHP 7,当时装centOS系统的时候曾经默认安装过PHP5.2版本,但是被我给卸了。

好在PHP 7 和PHP 5 的差异并没有大到很夸张,对实习工作没有什么太大影响。不过PHP的安装方法一如既往的麻烦,这虽然已经算是第二次了依然绊了我半天、趁这个机会记一下,稍微放一下简版(毕竟一天都在搞这个了别的没什么好写的)。

重新安装PHP的过程记录:1.检查当前安装的PHP包,如果有安装的PHP包,需要先把它们全部删除。具体可以通过yum直接卸载(代码略)。

2.添加镜像(键入 rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm运行yum install:代码略)

3.安装拓展:前后一共需要安装30个拓展包,其中安装过程较慢,需要耐心等待,之后再通过yum install php56w-fpm指令安装PHP FPM

通过以上步骤之后之后卸载和安装基本就完成了,我虚拟机重新安装好的PHP目录在/usr/local/php/PHPPHP FPM的配置文件分别在/usr/local/php/etc/php.ini /usr/local/php/etc/php-fpm.conf

实习实际安装的是PHP的5.4版本,其实PHP 5 的小版本之间语法会有微妙的不同,这次是因为Thinkphp3要求在php版本在5.2以上,所以才说要装5.4运行,实际上这次框架的问题说到底还是PHP7和PHP5不兼容的锅(估计当时的ThinkPHP开发者也没能想到后来PHP会直接跨了一个大版本连6都没有就直接发布了个7)。

2020年6月18日 星期四

由于在老家忧心流量等原因手机近些天QQ都没有怎么开过,经舍友打电话提醒,今天才看到老师在钉钉上的留言、吓出一身冷汗,赶紧回复。

题目基本已经确定是《基于Thinkphp框架的校园二手图书交易系统》,我赶忙将这个消息发给了老师。

今天在导入ThinkPhp框架时访问入口文件提示500错误,查询搜索之后发现是nginx的放跨目录设置有问题,我在之前搭建博客阶段听其他人建议为了安全考虑设置了防跨目录,但是必须要跨目录的模板类程序似乎与这类保护措施互相并不能共存,原因是因为网站目录一般是在public下,但是public下的程序要跨目录调用public上级目录下的文件,因为LNMP默认是不允许跨目录访问的,所以都是必须要将防跨目录访问的设置去掉得需要停用放跨目录才能继续进行。

经询问和浏览大量网络资料得知,一般取消放跨目录设置本来只需要将 .user.ini文件删除后再在/nginx/conf/ fastcgi.conf 里面的“fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”; ”一行前添加“#”注释或干脆删除改行再重启nginx;结果却发现 .user.ini文件无法直接修改,查询之后发现如果要修或删除需要先执行:chattr -i /根目录/.user.ini,然后使用winscp文件管理或者vim编辑器才能进行进行修改。删除的话也需要登陆管理员权限下直接rm -f /网站目录/.user.ini 。修改完成后再执行:chattr +i /根目录/.user.ini.user.ini

进行完这步之后可以不需要重启,一般等待5分钟左右生效,或者也可以直接重启一下php-fpm 至此,放跨目录设置的取消基本完成、访问IP下入口文件时的报错已经消失、关于发现Lnmp 里防跨目录设置造成的隐患已排除,实习项目继续推进。

2020年6月19日 星期五

还是准备下载一个Dreamweaver,之前(从大一实验室留作业开始)一直在用的调试工具就是sublime text的v2和v3(现在没有卸载2是因为当时最早用的是2,当时插件下载的也都是2的版本),DW我在很早之前(真的很早了,用的还是windows XP)就下载过某论坛发布的破解版本,当然这次还是下个最新的比较好。

从贴吧和吾爱破解论坛很轻易的找到了cc2017和cc2018的破解版本,最新的好像是cc2020、但没有破解版,中间的cc2019应该是有破解版的但是就目前看来很难找、最后被坑蒙拐骗下连续关注了十几个公众号终于找到了cc2019的破解补丁…

话说回来DW cc2019的界面还是十分舒适的,新版本就是更顺眼一些、可惜占用内存过大了,前期设计时使用还好,但要到了后面修改微瑕疵和Debug的时候不可能还继续使用;果然sublime天下第一,只可惜Linux版本里快捷键和windows版本并不一样、不然也不用折腾vim了。

今天开始就正式进行网站前台的建设,视图渲染里要从前台索引index写起,在已经确认之后大方向之后先基本完成门脸的建设,接下来是数据库和控制器设置,这是学长跟我说的;话说不愧是框架程序吗,刚说到index结果发现预留出来index用的位置好多…嗯,首先,先重新把最外层的入口文件index.html写好,别的index后面慢慢来。

按照这次的行程规划,完成前台建设之后还有后端的管理员操作界面、逻辑上管理界面并不比前台工作量少,要问的问题估计也得攒一大堆,提前就头疼的有点想掉头发了。

路漫漫其修远兮啊。

2020年6月20日 星期六

好坑啊,Nginx的配置又又出了问题、这么多天了我连数据库表都还没有开始写一直在折腾Nginx兼容性的配置了,ThinkPHP官方的建议是使用apache服务器,我也在很认真的考虑要不要更换成httpd。

又加入了一个群,群名叫“php程序员互助群”,里面活跃度相对其它学习群比较高、而且大多数人也比较热情;现在学长在进行自己的学习任务和休息的时候可以通过这个群来问一些问题。

实习相关的文件从服务器里调试起来很麻烦,Linux里用vim一直分不清 :q和 :q! ,vim里“:wq!”指令是强制保存文件并退出vi.,而“:q!”应该是不保存文件并强制退出,“q”则是一个不“w”就不执行的中立指令,真的真的慎用“q!”,好几次编辑完代码之后忘了保存就直接给关掉了,搞得前面代码好像就都变成白码的一样,凭空增加了完全不必要的工作量(欲言又止)。

网站的html文件被我暂时存在了\App\Home\View中方便调试,最后等预留的login、sign、step三个模块所有的视图渲染文件都完成了之后再导入到\Home\View\Index0文件夹。

网站的首页建设参照了一些其它网站,而界面艺术风格的灵感来源对象反而是我见过的一个博客主题…哈哈哈谁都想不到吧我居然在正经网站界面仿一个博客软件的主题,主要还是博客接触的太多了而且人家的界面做的是真的漂亮啊,耍淘宝狗东并夕夕等大型电商界面舒适度好几条街、而且说实话好多博客主题的风格真的很不错,一个二手网站又不大、漂亮比较赏心悦目。

想起来这次的网站算是比较可惜的一点是moble视图可能来不及做了,这样的话手机流量网站就会变得非常不方便,有这个缺憾在的话恐怕网站即便做好了后期也根本没办法投入使用、实习项目也只是一个作业一样的只是用来应付公事的项目罢了,后面还是得找一个机会把移动版做出来、就算做不成webapp,单做出一个响应式也好啊。

2020年6月21日 星期日

在前辈的帮助下,项目已经推进到了设计数据库的阶段,前台的门脸已经做完了,现在登陆IP就能看到(当然功能都还是不能用的);顺便做完前台界面设计之后我感觉这个项目是不是其实该改一个名字比较好…

毕竟名字虽然叫做二手图书交易市场但是实际做出来看似乎什么都能卖啊… 叫图书市场是不是有点不对付?

算了不说那些,今天我发现一个连接上云服务器后有一定可视化界面直接可以运行FTP的免费软件:即经学长推荐来的FlashFXP4.4.2,这次终于不用心力憔悴的寻找找破解版,学长直接发过来了,当然给版本比较低(4.4.2是2013年的版本了)不过使用上并没有什么问题,登陆类型是直接基于密匙登陆,这下以后可以通过FTP协议把我从笔记本windows系统下敲好的文件直接上传到云服务器,终于不用每次担惊受怕编辑文本没有保存了!

用了FlashFXP之后瞬间有一种解放双手的错觉,现在也不用每次键入root密码登入、也不用ls、ll然后cd个没完,虽然指令还是需要通过Xshall配合着,但总归从心理上轻松了很多…至少找目录方便太多了不是?原来我上传博客的时候甚至要把每个配置目录通过小本本记下来、现在至少目录一览无余,跟ls之后看反馈的光标那体验完全不是一个级别的。

用着用着就感觉到…所以windows人家才是世界第一IT企业啊,可视化之后那感觉真是太不一样了好不好。话说为什么我这么久都不知道有这个东西啊,只是因为节省买的服务器的性能centOS没有装图形界面就硬生生盯了一年多的大黑屏幕… 不过想来也锻炼了一些基本Linux指令,算因祸得福?

2020年6月22日 星期一

把服务器换成apache了。

今天找到了平滑更换服务器的方法,终于不用再忍受Nginx配置遗留下的各种问题。其实本来框架推荐的就是通过apache服务器运行,前面由于一开始没有及时更换服务器并且我对自己nginx配置文件的各种独特更改导致项目出现了很多不必要的麻烦。

早晨我停掉了nginx的服务,备份配置并通过yum直接安装了centOS 7 内置的httpd,安装好的apache经测试已可以正常运行,apache服务器部署后目录地址在/usr/local/apache/,配置文件为/usr/local/apache/conf/下的 httpd.conf,更换服务器之后对默认端口等各项相应配置内容进行了修改。

话说回来上次用apache做主服务器还是在大二自学PHP的时候,当时配环境配了整整一下午最后还是下载了个XAMPP,window下配环境感觉一直都是比较吃力的一件事,单从这方面来讲Linux比windows更适合做编程平台、不过考虑到Adobe全家桶以及全应用的生态,windows其实也并不是没有优势,至少生态和可视化人性化程度远甩其它系统几条街。

下午补习了ThinkPHP控制器的高级特性部分的Action参数绑定和前置和后置操作,Action参数绑定的原理是把URL中的参数(不包括分组、模块和操作名)和控制器的操作方法中的参数(按变量名)进行绑定。之前发生的参数错误报错的原因很简单,因为在执行read操作方法的时候,id参数是必须传入参数的,但是方法无法从URL地址中获取正确的id参数信息。这种情况给id参数添加默认值之后就能解决;

顺便记一下前置和后置操作的方法名只需要在要执行的方法前面加 _before_和_after_,然而如果在操作方法里面使用了exit或者error方法的话就有可能不会再执行后置方法了。

2020年6月23日 星期二

数据库表大体上敲好了,说实话phpMyAdmin比直接敲命令简直方便的太多。虽然Navicat和SQLyog也同样非常好用,但是架不住phpMyAdmin是直接挂在服务器上的啊…浏览器键入就能直接使用,真香,改完还立马就能从网页看到成效;就是不知道对个人学习习惯的影响大不大,毕竟习惯了这种直接建立修改的工具之后,很难再重新对sql语句重新拾起兴趣。。

phpMyAdmin 的运行可以通过网络接口实现,是一种 PHP 语言编写的 MySQL 数据库管理程序。因此 Web 接口可以成为一个简单方法输入复杂 SQL 语法的简单方式,特别是在导入和导出数据的时候,使用 phpMyAdmin 可以方便的创建、修改、删除数据库及数据表。

今天才发现控制器的问题意外的多,在编写注册界面(sign.html)的时候发现跳转和重定向有一些细微的设置出现了错误,于是在手册中重新了解这一部分的内容;

ThinkPHP系统的Action类内置了两个页面跳转方法error和success,分别用于错误(提示)跳转和成功(提示)跳转。两个方法都会输出一个提示信息页面,然后自动跳转到指定的地址。

如果仅仅是想重定向要一个指定的URL地址,而不是到某个模块的操作方法,可以直接使用redirect函数重定向;而我出问题的就是redirect这一函数。解决方法是手动添加一个404地址、并在地址上设置返回信息。

另外说一下,总体来看今天项目进度推进的速度十分迅猛,乐观估计29号前就能进行项目前台的访问。

实在是一个非常不错的消息,感觉离开发出可以正常运行的网站这一目标又近了一步。

2020年6月24日 星期三

早上phpMyAdmin无法正常登录,提示:您的Session已过期,请再次登录。然后再次登录却依然报错显示,登陆不成功。

第一次出现这种情况,之前即便是隔夜没关phpMyAdmin也只是显示登陆超时、然而这次却显示Session已过期,查询之后发现给session持久化到数据库,还有session的默认时间应该该是半个小时;找到配置文件在/usr/local/php/etc/里的php.ini,把“session.auto_start = 0”这一行改成了“session.auto_start = 1”,回去之后发现数据库可以继续登陆了。不过听说这样也许会造成一点安全问题,看来以后有时间了还是要回来弄清楚然后认真改一改。

关于数据库的时间项time,今天表结构设计时忽然有些纠结继续用int类型存储还是用datetime类型进行存储,理论上Int占用4个字节,建立索引之后,查询速度快但是不能使用mysql提供的时间函数;而datetime占用8个字节,并且允许为空值,可以自定义值,系统不会自动修改其值,还能在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间,唯一的缺点就是比Int慢。去查了一下反倒是有很多人推荐timestamp类型进行存储。Timestamp的优势是值以UTC格式保存,数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,我只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间,这种感觉大多数情况只是对于跨时区的业务timestamp才更有优势。

最后烦恼之下的结论是决定先用datatime类型进行存储、之后如果有需要的话可以再换成Timestamp类型。

前端的控制器已经写好,静态路由设置完毕的情况下前台写好的功能理论上其实已经可以连接数据库了,期望后面真正运行时不会出其它故障。

2020年6月25日 星期四

在群友以及前辈的热心帮助下,系统前台终于写好了,现在网站代码至少在DW的调试环境下已经能够做到基本的显示。

自几天前换用FlashFXP之后就多了一个调试环节,调试完了之后直接用FTP协议上传到网站根目录,因为现在云服务器和自己笔记本在某种程度上互相都有图形化的文件夹界面,传输起来非常方便。

服务器中apache配置与自己win10系统电脑上的apache在调试和显示上并无什么不同,数据库的连接也可以直接用本地的NiveCat进行互联、严格来说我已经能从电脑上进行完整的调试。不过由于早期开发阶段在服务器中大量使用绝对地址的原因,恐怕把源码打包之后其它设备并不能正常运行吧。

这倒是提醒了我,如果实验报告需要交可执行源码呢?

登陆和注册功能都今天已经写好了,借鉴了学长提供的实验室登陆代码和设计、不同的是我直接把他们和认证模块一起放在视图中的Index文件夹,同目录下调用起来比较方便;本来准备做一个商品购物车啥的,但是看看时间估计也已经不够了…而且说到底在这种无遮拦网站上进行线上支付也根本就不太靠谱,即便到时候整个网站完整开发到投入使用阶段我也觉得只保留发布功能比较好。

关于重定向的一些笔记:重定向其实是两次request的过程;第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。请求转发是服务器内部把对一个request/response的处理权,移交给另外一个。对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。而转发只有一次请求:即发送请求 –>服务器运行–>进行请求的重新设置。

2020年6月26日 星期五

今天网站的前台终于可以在服务器运行了!

说实话这是我一开始没有想到的,仅仅用了12天,虽然有框架简单和有熟悉此道学长帮助的原因在、但中间也还经历了各种杂七杂八的事情,以我来看这种进度速度真可谓是神速了。

实际进行了一些测试、bug很多,基本上只有界面上的登陆模块可用,因为数据库和文件夹权限的原因从早上折腾了一上午才让发布功能堪堪可以正常进行,话说回来服务器现在并没有CDN加速(没办法,连域名都没有)、如果想要网站正常浏览的话图片得放的足够小才行,想解决这个算不上问题的问题以我现在的了解还是要购买注册域名然后上CDNSSL,一举能够解决网站的浏览速度和安全问题。

视图模块的开发进度已经基本到头了,剩下的就是一些些微细节的调控;ThinkPHP框架虽然名为MVC结构,但其实Model层并不需要填,现在前台界面唯一还需要关注的就是控制器层的问题;商品、用户和主页面(检索页面)各做了一个Controller,目前的情况是虽然有很多BUG,但至少在DW上是可以对除数据库以外的部分正常调用。

开发报告有所耽搁,而且在我所谓的开发报告草稿里大多数功能描述都是很草率的记录(例如附注一下这是我当时在设计注册界面时记在开发报告里的逻辑思路注册: 1.用户名、密码(重复输入)【N:用户名已存在、刷新界面】 → 2.邮箱、电话号码、QQ号码(step)【N:输入为空则提示错误信息 返回step界面】),那种纯字符讲述的东西从各种意义上都根本不能作为正常报告来提交。所以现在的当务之急是准备重写实验报告。

话说回来我这里还留有几份学习管理信息系统分析与设计时老师分享的论文可以当模板,看来还得找个时间咨询一下毕老师。

2020年6月27日 星期六

频繁更改数据库表的弊端出现了,我不知道从哪里设置的有问题,导致部分商品时间出现错误、一开始只是商品时间忽然出现错误,但是修改表结构之后忽然发现评论时间在内的全部时间项目的显示都变成了1970-1-1。

经排查之后发现是数据库表的时间栏存储方式上出现了混用datetimeint的情况,估计是创建表Comment表和goods表时操作失误造成的结果(话说回来前两天正好有段时间非常纠结datetime这块);明白问题原因之后当即把各个表结构中时间栏的存储方式全部改为datetime类型、结果网站刷新之后发现所有时间信息全部都变成1970年。

鉴于DW调试下没有出现此错误,于是怀疑是Linux里数据库的设置有问题、但排查测试之后发现服务器中mysql设置信息和本机基本一致,询问学长和上网搜索之后也没有得到能帮助我解决这个问题的可靠信息、总之十分抓瞎。

下午,尝试着把所有的datetime类型换成了int型、发现int型默认存储的数字全都变成了2020,这给我提供了一个思路,我忽然意识到,既然将date time类型转换回int之后它存在默认值,那会不会之前出错误时实际读取的一直是这个int里的默认值呢?然后我尝试着把2020改大、发现时间栏果然发生了变化。

此时此刻我的心情是激动的,赶忙在网上搜索datetimeint的方法;发现mysql中有一个unix_timestamp()函数可以实现将表中datetime数据整组查询为int类型数据。虽然遗憾的是依然不知道最终的问题出在哪里,但至少可以让时间栏正常显示了。

关于Datetimeint SQL查询方法的笔记:unix_timestamp()函数 sql语句:SELECT unix_timestamp( `时间列名` ) 【填写列名时不需要带单引号】

FROM 表名

2020年6月28日 星期日

今天发现一些功能出现了ThinkPHP报错“模板不存在”的问题。

这个问题其实之前一直都不能算是个问题,原因很简单、因为之前我压根就没有做出来模板而只是预留了相应的接口,出现这种“出现模板不存在”的情况简直太正常不过。

但是今天出现这个问题就证明真的有问题了,和之前完全不同的一点是,我已经完成了所有模板的制作并且甚至已经在DW上试运行了、和方法错误又不一样,调用模板并需要连接数据库,所以说我这里是完全不应该出现错误的。

注意到报错的功能许多都是从DW调试完之后上传过去的功能、在网上搜索了一下他们都说是文件大小写的问题、还有的说这个问题和文件路径和命名没有关系,而是一个tp3的bug,这个bug即是任何大写的文件路径都会被tp3解析成去找小写文件的地址,最后导致服务器无法寻找到正确地址;

于是我下午花费很大精力将命名空间和文件名全都改成了小写,结果还是报错模板文件不存在,上群里问之后有一个大佬跟我说:“模板不存在的解决方案就是确保你的文件路径和命名一致”——我没能理解什么意思。

组员询问我要不要交实习日志,然后我去问毕老师,结果毕老师问我实验报告写的有什么进度…本来这个问题要是换成其它项目进展应该很好答的,但是巧的是因为之前写的实验报告不能用、实验报告要重写,然后重写的实验报告现在还没有什么进度……

我又不好意思直接回复老师,于是就直接把实验报告发了过去。

……结果,老师人真好啊、直接给了我一份她带的学生做的毕业设计告诉我可以参照他的框架体系图表。而且虽然之前找到几份类似的论文报告但是图表都没这个全,真可谓是雪中送炭啊。

2020年6月29日 星期一

项目后台在今天登陆调试时忽然出现了查询条件错误,报错信息“错误的查询条件:[cc=>on]”,完全摸不到头脑的问题,甚至不知道排查工作应该从哪里做起。

仔细确认过其它文件都与本地调试成功上传上去的文件时间内容也都相同,完全不应该出现这样的问题。上网百度搜索之后找到了几个相似问题,都是查询条件的错误,如“错误的查询条件:[TypeId=>Array]”、“错误的查询条件:[p=>2]”,有人标注这是查询语句where报错;

报错的原因众说纷纭:有人说是命名范围的问题,即3.2在模型里定义方法,不能用D()实例化只能$a=new BaseNewsModel();前面还要加命名空间名$b=$a->getList($TypeId);dump($b);才能执行到定义的方法;也有人说是字段名相关,看看字段写的对不对,大小写弄错也会报这个错。不过根本原因好像是字段验证失败。

我依照其中一个人的方法,去掉Model.class.php的593行开始的新增的if(APP_DEBUG){ E(L(‘_ERROR_QUERY_EXPRESS_’).’:[‘.$key.’=>’.$val.’]’); }之后,系统的访问虽然恢复了正常,但是数据还是无法正常提交和保存、结论是这样改可能确实的能够规避验证失败的问题,但完全治标不治本。

下午偶然翻到一个人的评论,说是他碰到有一种情况会导致这个错误,就是他当时改了数据库字段(添加,修改),并且框架配置了生成表字段缓存就有可能导致这个问题……然后我忽然意识到我前两天确实在时间显示出现错误时大肆更改过数据库里的有关时间字段,看来问题可能就在这里了。

按那个人所说的,想要回复访问建议在Application/Runtime/Data/中删除对应修改的表缓存即可;

找到了/Runtime/Data文件夹中的表,问题是这里没错,网站故障排除,网站可以正常访问了。

2020年6月30日 星期二

项目前台的最后一组BUG已经修改完毕,现在所有已经做好的功能都能正常运转、至此重心现在已经完全转向了对实习报告的撰写。

另外前段时间那句“模板不存在的解决方案就是确保你的文件路径和命名一致”的意思我已经理解了,真的就是保持一致:缺什么你就补什么,不存在你就在目录下新建一个,即便完全是个没有内容的空文件也要创建之后把名字写上去。因为windows下文件虽然并不区分大小写,但是Linux重大小写是严格规范的;windows下两个命令调用的可能是同一个文件,但换做Linux却是两个不同的文件。

不得不说大清早解决了这个问题真是令人神清气爽。话说即便在本地调试的如此完好放到服务器依然有可能运行不成功,那把文件打包发过去之后老师那边就一定能运行了吗?

不过即使不考虑早期开发阶段在服务器中大量使用绝对地址的原因,恐怕把源码打包之后其它设备并不能正常运行吧。这倒是提醒了我,不是说实验报告需要交可执行源码吗?老师真的是想在自己的设备上运行起来这些代码?

今天剩余的时间都在搞实习报告的撰写,画用例图和逻辑图和结构图。虽然看起来十分复杂但其实画起来意外的并不困难,只是十分消耗时间;逻辑图和结构图也是,除了比较吃时间以及完全都是自己干所以非常的累之外倒也没什么实际上的困难。

不过非常羞愧的一点是我几乎已经把曾经学过的E-R图的绘制方法给忘光了,甚至连E-R图的概念也已经不甚清晰、向指导老师反映之后毕老师发来了几份有关数据模型和关系数据库设计的PPT,里面包含大量E-R图概念以及绘制方法的内容,感谢老师。

结合着从网上找来的教程和PPT中的内容边学怎么画边写系统设计部分的报告一直肝到了凌晨两三点。

2020年7月1日 星期三

E-R图姑且算是勉强画好了,然后网站崩了。

上午接到通知说实习日志周五之前就要交,然而我日志开始写的比较晚,算算时间应该正好是到周五当天才能恰好写完,也不知道所谓“周五之前交”是算不算上周五。(问过老师之后好像说当天是可以写的)

今天关闭调试模式后网站全线崩溃。

本来只是为了写实验报告时截图界面好看点,然而设置debug参数为false之后网站包括注册和登陆在内的所有功能瞬间全部无法访问,报错界面没有任何报错信息而且后台压根更是登陆都登不上了。

我只改了一行debug的代码啊,为什么会这样?

找问题吧,在度娘上查了很久,最后找到说,是因为解除调试后的部署模式下common/common/function.php文件中使用了相对路径包含其他文件,这个不支持,必须将 “require_once ‘Base.php’;” 改为:“ require_once APP_PATH.’Common/Common/Base.php’; ” 才能正常运行;

那改吧,结果刚改完之后就遇到第二个报错信息、搜索之后发现第二个错误的问题在于调试 CONTROLLER结果变了。原来的url对应关系是:/XZ/GoodsController.php => /XZ/Goods ;关闭Debug后对应关系变成了:/XZ/GoodsController.php => /xz/goods_ 。 站点的链接全乱了,又上度娘,翻手册,最终得到解决办法:common/conf/config.php 中加入 ‘URL_CASE_INSENSITIVE’=>false ,重新上传所有代码刷新界面。

虽然最终是勉强将问题解决了,但依然心有余悸。

想起来在最后快要百度到问题解决方法时看到论坛一个老哥说的话,我觉得有些必要记录下来:“最后还是建议大家自己写框架吧,别人的框架再好有时候也能将你折磨的欲仙欲死……一个url路由+数据库操作类,再挂个开源模板引擎……何不试一下呢?”

2020年7月2日 星期四

实习结束前的倒数第二天,一整天都在改实习报告。

报告还有不少内容需要写。前两天已经弄完了流程图图和E-R图,虽然效果很是不尽如人意,但姑且是规范的提交了系统设计的关卡内容;后面已经完成了一部分的项目实施以及附录部分的编写虽说工程量不小但其实基本都是一些琐碎的重复性劳动(脑壳疼),磨时间就能完成。

花了一上午的时间接着昨天继前台4.2中注册与登陆之后的部分一直写到后台的院校管理,一开始有仿照老师发过来毕设的意思全部把代码放到附录、结果写到后来越写越心惊,发现大写字母越排越多而功能代码的位置还是不够放;这时候忽然意识到我还有前台视图文件没放、我这项目的开发和微信小程序的开发并不是同一回事之后及时停止了这种没有头脑的罗列。

总而言之先把前台和后台管理的功能介绍写完了。

综合考虑之下最后决定先将比较重要的入口文件和代码长度较短的功能函数直接放到相应功能的下面,然后对附录的格式进行修改,把附录本身分成好几小部分、把每个相关功能在控制器中相应区域的功能函数代码一股脑放在附录中,最后再通过对注释内容的撰写特别标注出相应功能代码在哪一篇附录的哪一个方法下,这样就合理解决了各模块占用附录编号过多的问题;再在此基础上根据每个附录的特点,把相应前后台的视图显示代码放到附录中间,这样所有的代码就一一嵌写进去了。

下午找老师询问之后更改了整个文档的格式、添加了中英文摘要字段和参考资料引用字段、最后加上了感谢语。顺便知道了原来摘要字段是要填写关键词的。

花半个小时复制粘贴敲完了整个目录部分的内容,然后看格式要求文档百度什么是“采用“制表位”并加“前导符”方式”的时候发现目录是自动生成的。

2020年7月3日 星期五

今天是实习的最后一天。

在意识到这一点之后莫名有种全身放轻松的通透感,内心忽然还有点庆幸与不舍…今天就已经要结束实习了,这半个多月来每天熬夜写功能敲代码Debug,整个人早上起来脑子里想的第一件事就是还有哪些功能没有做、什么功能出了问题需要改,整个人沉浸在代码的世界里——这并不是什么美好的说辞,因为我debug的时候都快吐了。

现在是凌晨1点半,我在刚刚重新完成了项目报告目录的撰写并在没有借助搜索引擎的情况下解决了自动生成的目录中没有摘要和参考文献的问题…方法也很朴实,我先复制出一个目录中的字段修改并插入新的超链接,但是在将摘要和参考文件设置成标题之后超链接中依然没有参考文献和摘要的选项,于是我尝试把他们的样式换成了“标题1”,超链接选项它就出现了。

已经1点多了确实没什么困意;

忽然觉得这些天熬夜已经变成常态了。

这半个多月来其实每天的作息就是敲代码、熬夜、敲代码、熬夜,有时候早起来敲代码,有时候中午补觉一觉睡到下午6点。除了和父母回老家的那段时间之外基本没有闲着。虽然疲累,但也很充实。

忽然想到,实习结束之后做什么呢?

先把剩下的项目功能补完,然后再买个域名正式上线?虽然有心想说好好玩一玩、去放松一下啊好好睡个觉啥的,但是总觉得真到了那个时候会觉得有点空虚。那就先把剩下的项目功能补完吧,上不上线虽然是两说、但留着说不定搞毕业设计有一定借鉴意义,或者到时候找工作面视可能也能当成项目经验。

到时候再说吧。

如白驹过隙,恍惚之间这半个多月的实习生活已经接近尾声,这几十天来经历了很多事情也学到了一些教训,现在,正好趁着这实习结束之际就我这20天来的感悟和经历做一份总结。

首先我深切体会到的一点是:完整系统的开发是一个循序渐进的过程。只有按计划慢慢推进,不可能一蹴而就。

我接触编程已经挺久了,在之前还代表华信学院去秦皇岛参加过ICPC(国际大学生程序设计竞赛)的河北分赛(东秦的HBCPC),可以算是基础不错。

但我其实从来没有尝试完整开发过某个项目。我本身算是一个ACM爱好者,所以一般用到的语言都是C或者C++这种比较基础的编程语言,最多也就是java附带的方法跟C++的STL库;平时遇到要解决的问题也基本是计算机编程这个大类中比较偏向于理论的算法相关问题,诙谐点说的话,一般都是在用计算机解决各类小学奥数题。

那么问题来了,这类题目有一个特点,那就是基本都是短时间的突击。这些题目大多数有时间的要求,一般都规定在最短时间里解决某一问题、比赛时你的AC时间甚至会成为一个不容忽视的加分项;由于我习惯了这种急来急去的解决问题方式,所以在编写大型程序项目方面就很不适应。之前我做王冉老师留的两份数据结构作业用C语言编写贪吃蛇和学生管理系统的时候就曾感觉到过这种问题,当时我花了四整天的时间不眠不休的敲代码、最终调试bug的时候才意识到,如果在最开始能有一个计划的话有很多bug根本就不会出现而且完成的速度说不定也还会快上好多。

这次我编写二手交易系统的时候就提前注意到了这点,并意识到我应该花时间专门做一下这段时间的任务规划。

所谓吃到教训是,然而当编程工作实际真正开始进行的时候我并没有如自己所想的做好计划,而且功能需求的研究制定工作也是断断续续进行的,经常忽然一拍脑袋就想出一个新功能来,结果我网站早期版本的索引界面中因为此原因存在着大量废置不用的功能接口,花费大量时间在界面设计阶段,这最终导致了当时项目开发进度一度十分缓慢。

其次就是:永远不要高估你代码的移植能力。

你的代码在本机上跑的再好、异地环境再匹配,代码也可能出问题。可能是因为换了其它操作系统、可能是因为数据库版本不同、甚至可能只是你服务器的配置文件有一行算不上什么关键问题的配置和你windows下配置有差异,总之总有你意想不到的可能性会使你在自己笔记本上辛辛苦苦调试运行的代码放到服务器上完全宕机。

说实话,我在此之前从未关心过所谓代码是否能够移植在异地环境的问题,因为我只是在做一些无法应用的编程题,而且即便将代码上传至判题服务器,gcc的编译器大家都是一模一样的、java的虚拟机大家也都是一模一样的,之前的所有编程经验中我从未遇见过这种问题。直到这次开发网站项目频繁出错之后我在百度和qq群里问过才明白,原来这其实才是最正常、最常见的情况;C++和JAVA没有这种问题只是因为前者是所有可编程硬件的基础、而后者则是专门应对这个问题而被创造出来的,之前一直生活在别人设计好的世界中,理所当然的把个别情况认成了普遍规则。

开发过程中我因为没有认清这些,基本上把所有的雷都踩了一遍。再加上ThinkPHP框架本身存在的一些问题,搭配Linux严格区分文件名大小写的特性,实在是酸爽的不行。

说实话网站本身还有很多的不足,比如功能和数据库的设计太过简单、比如一开始设想的商品求购界面没有实施、比如注册和登陆界面响应过慢、比如商品图片上传时对图片大小要求过高、比如购物车功能迟迟没有实现…当然因为这个网站最开始的定为就是发布二手商品交易信息的网站所以本来支付功能就没有准备做的……

但在我心里,最后的结果是实际上已经是超额完成任务了。响应式最后也做出来了,虽然求购信息界面没来及做但是网站总体已经基本完成了不是?后台界面整个我已经全部做出来了不是?要知道最开始我想的可是只要最终前台能完成几个功能就很不错了的。

总而言之我对自己这些天的“实习生活”还算满意,虽然因为疫情特殊情况没有离开家门但是确确实实的增长了经验、学到了东西。虽然每天坐在电脑前从早到晚还要熬夜十分痛苦,但这段日子同时也带着一种疲劳的充实。

总结报告就到这里了,我说的是真的,这段日子虽然真的非常的累且痛苦但是却给人一种难以言喻的的十分充实的感受,恐怕这就是努力以及成就感所带来的感觉吧;我想我会怀念这段日子的。

(因为是数据库直接注入的数据,没有做格式规范,后期版本已改良)