放寒假回到家没事干,就接了一个电力系网站做一些小修改的项目。项目是学长写的,用的是PHP,我也是抱着学习的心态接了这个项目。
一开始我就简单看了看PHP的语法,因为之前学过JS,所以看PHP接受度挺高的,更细节的东西就等上手的时候慢慢学,然后就去了解了一下xampp。不得不说xampp对PHP入门的人来说是极其友好的:集成了数据库系统mysql、服务器程序apache以及PHP模块。
这里提一下,因为我之前是学.NET/C#出身的,用的都是微软那一套东西,就像是与外界隔绝一样。微软的东西有一个缺点就是跨平台性较差,虽然用着舒服,但是所有的程序都只能运行在自己的生态下,不过.NETCore已经开始解决这个问题了,相信以后.NET也可以跨平台了。
1·配置php
安装了xampp7.4后因为没有将集成的PHP文件及时添加到环境变量中,导致我一度认为xampp自带的php模块是不完整的,所以还自己下载了PHP8,准备加载到xampp里,照着网上的配置一步一步配置后出现了错误:在httpd.conf文件中写入关于加载自己下载的PHP8的语句后,Apache打不开了,XAMPP里面报错了。一开始我以为是端口冲突,改了之后也没有效果,查来查去终于看到一条提示:PHP8的兼容性不好,xampp7是不行的,只有xampp8可以调用。这样写入配置后肯定要出错,而这时我也明白了xampp里自带的PHP的用法,加入到环境变量之后,
在cmd[管理员模式]中执行php -v 后,会显示有关PHP的版本信息就说明成功了,这是后点击xampp里面Apache的admin,也会在浏览器中显示关于xampp的页面(无法访问或出现的是IIS的欢迎界面时把端口号加上试试看)。
2·配置mysql
一开始我的xampp并不是安装在C盘的,而是安装在D盘的,点击运行xampp里面mysql后,试着在shell中进行相关配置,这时候又出了错:输入mysql后显示什么Access Denied的,意思就是接入失败;后来在网上查的安装了一个mysqld:在mysql的bin下打开cmd,输入mysqld -install ,安装成功后在shell中mysql -u root -p后进入了MariaDB,当时查了一下两个差不多就没管,然后就点击xampp面板里面mysql后的admin准备进入phpmyadmin对数据库进行相关配置。
打开网站后提示输入mysql的账号密码,怎么输入都不对,显示服务器积极拒绝,用户配置不对,还照着网上修改了config.inc.php,也没有用,一气之下重装了,结果mysql就无法启动了,在xampp中报了错。在shell中用mysqld -console查看之后显示的是Cann't connect Server,在windows服务中启动Mysql,也是无法启动(1047)。这时候通过网上各种查资料,我学会了使用windows的事件查看器来查看错误信息:
可以清楚的发现MariaDB的报错是三个一组,【消息】里说的是这个服务正在启动,【警告】里说出了错误的原因,【错误】中给出的是Aborting,意思是中断。注意:这时候我的xampp是安装在D盘下的,而程序是想在C盘下创建文件,可是我的C盘根本没有这个路径,所以我首先想到的是在my.ini中是不是有什么关于C盘的东西;然而我搜索了一遍,并没有。这时候我又想到了另外一个可能的影响因素,就是注册表,但是查看注册表相关信息后也是没有问题的。而我突然想起来,去年的寒假,我也装过xampp,那时候是安装在C盘下的。所以我猜测,应该是那时候遗留下来的某些注册信息(可能就是注册表)没有清理干净,现在被误读了。问题分析到这里,怎么解决呢?我试着在C盘下创建了【警告】中那个需要的文件夹,果然,报的是另外一堆错误:缺少文件;这就更加证实了我的猜想:应该就是历史遗留问题。但是出于自知之明,我选择了重装xampp到C盘,文件夹的名字和【警告】里保持一致,结果一切正常。
3·克隆文件
这件事本来没什么难的,网站源文件在阿里云服务器(windows实例)的xampp-htdocs下,只要想办法把它拿出来就OK。问题就是:用VNC不知道怎么连云服务器;用windows远程桌面时,一开始报了一个CredSSP的错误,搞了半天没搞成,后来试着切换用户,结果又是凭据无效了。最后也是想了一个土但是有用的办法:给云服务器下载了一个QQ,登上了自己的小号,才解决了文件传输的问题。在这里给大家推荐一个windows下批量远程管理的工具:IIS7.0远服务器管理工具www.iis7.net。这是一个国产的软件,支持远程桌面、vnc、ssh和ftp,可以多平台,主要是免费而且很快很稳定,赞一下。至于自带的远程桌面,还是妥协用其他软件吧,毕竟windows不开源,很多配置文件你是无法看到的。
4·mysql与mysqli使我哭泣
把克隆出来的文件修改好数据库等信息部署到apache后,打开网站报了错,是关于mysql的。放在VSCode里面看了一下源码:Undefined function 'mysql_query'。一查后发现问题所在:PHP6以及6以后以及完全摒弃了mysql模块,而选择了mysqli模块;二者的本质区别就是mysql是过程化查询,而mysqli是对象化查询兼容过程化查询。这好办:Ctrl+H全部文件替换mysql为mysqli,网站终于打开了,但是点啥啥报错,意思还是关于mysql的,这其实是有个比较容易忽视的问题:在我们的惯性思维中,一个模块或者方法升级后,升级后的方法如果需要和升级前的方法一样的参数,那么起码参数的顺序不会变。但是mysql升级后的mysqli的参数列表中把数据库连接对象由第二位放在了第一位,导致方法的参数失效导致报错。改正之后,完美运行。
总结
此次网站改造项目的上半场——克隆网站运行到本地算是完美收场了,虽然还是有很多问题没有彻底解决,但是通过各种"曲线救国"的方式,总算拿下来了。我发现自己特别享受那种解决问题之后的快感。但是路还长呢,让我们期待下半场的表现吧!(写得累了哈哈哈)