到今天为止第一个php写的网站已经快要见亮了,中午后台部分全部功能完成意味着以后做别的站可以拿来就用,不用再费太多精力编写了,现在就简单写写学习php的这一个月我遇到的主要问题。
问题1:环境搭配
php最经典的组合当然是LAMP(Linux+Apache+MySQL+PHP)了,不过我没有条件和精力弄Linux所以用Windows 2003代替Linux了,自己调试用,又不是做服务器,所以不要求性能足够用了。
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)本身我的机器是Win2003+IIS+Framework环境能跑起来ASP和.net,并且装有jdk+tomcat+oracle还能跑起来jsp,本打算不破坏这些环境再安装apache和mysql,不过困难重重啊。。
于是放弃jsp环境,并且用ghost备份了asp环境,删掉IIS后重新安装PHP环境,环境还是很好搭的,在百度上轻易的找到教程照着安装就可以Apache+PHP+MySQL+PHPMyAdmin,没有安装Zend,以后深入学习的时候再说吧,没有研究明白多个网站的时候怎么存在不同的路径运行在不同端口,也先不管了,现在80端口跑吧,环境调试好了以后备份了一个ghost,算是php环境成功搭起来了。
问题2:对utf-8编码文件的标记BOM导致的页面空行
这个问题以前在学习xhtml+css的时候遇到过,那时候是因为文档声明类型前面加别的代码了或者没有写文档声明类型xhtml1.0却用w3c 的标准做页面导致的,起初我以为也是把require写在文档声明前面出的问题呢,后来反复调试发现不是这么简单,后来上百度搜索了很多关于 require引起空行的问题,有一个牛人提到了要在dreamweaver里面ctrl+j把utf-8编码的BOM去掉,当时也不懂BOM是啥,说去掉就去掉吧,确实解决问题了,这算是把这一关过去了,不过后面还有utf-8的问题呢,也是跟这个有关系。
问题3:php下checkbox的取值问题
这是我发现php唯一一个不方便的地方,不像asp那样,所有同名的checkbox的值存成一个集合,php只能取同名里最后一个 checkbox的值,在做多数据where in (aa,bb,cc,dd)查询的时候很不方便,只能用js+一个hidden input的方法实现,虽然有点小麻烦,不过不是大问题,很容易就解决了,上网查了一下也确实只有这么才能解决!
问题4:Access库转到MySQL的问题
毕竟数据库已经设计好了,再在PHPMyAdmin中建一次表也很麻烦,索性找个软件来直接转库,还不错让我找到各爆好用的软件,不过全英文界面,名字没记住,明天去公司看看再发上来,库很轻松的转过来了,但是我手很贱,看到MySQL里面的data文件夹下有和我建的数据库一样名字的文件夹,我以为有这个文件夹就不用建库倒库了,一时兴起把没用的都删掉了,问题来了PHPMyAdmin连不上库了,这个倒是好解决,重装了一次MySQL解决问题,可是我没备份就换回ASP环境,再换回来的时候MySQL出大问题了,重装都不管用了,上百度一顿神搜,最终csdn的牛人给了答案把 libmysql.dll和php5ts.dll考到system32下,解决问题。
问题5:NTFS权限问题。
这个问题ASP上也出现过,不过换在PHP环境就没多一份心往这方面想,所以足足憋了我一上午,发现这个问题是在朋友的服务器上,前一天喝酒正好认识一个哥们儿遇到php建站的问题了,接着酒劲我就装了一把,说我php多牛多牛啊,知道的我才学2星期,哈哈哈,第二天就给人家解决问题吧,牛都吹出去了也不能不管人家,连上服务器一看原来是安装phpcms的时候遇到了MySQL问题安装无法继续进行了,百度上一顿神搜找到问题关键了是NTFS权限问题,这就好解决了,加个Internet来宾用户就解决了,估计自己以后也会遇到这问题,所以早遇到比晚遇到强,关键时候知道怎么回事儿!
问题6:Cookies读写问题。
这个问题应该不是很大的问题,只不过当天马上下班了,没有来得及解决,第二天很轻易的就搞定了,刚开始学习肯定语句掌握的不多,以为$ _COOKIE["xxx"]既可以读也可以写呢,用到这儿的时候才发现部对路子,上网随便一搜php cookies 写入答案就来了,setcookie即可,真简单啊。
问题7:php分页。
用ASP的时候SQL语句也没深入研究,根本就不知道limit这回事儿,我说以前看淘宝、百度的分页上有0 20、20 20这样的参数传递呢,都是干分页用的,稍补了一堂SQL课程问题迎刃而解,页数判断那里原理都一样就没当成问题,一路绿灯解决战斗!
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)问题8:创建utf-8文件写入中文乱码问题,问题2的后续问题。
一开始就把这个功能做好了,只不过没用中文测试,后来做到有中文的地方发现这里不灵了,哎呀那个头疼啊,这个问题收拾了我好几天,一直没解决,为了不被这个问题困扰,所以就先用英文写入把这里条过去了,昨天必须得解决这里了,所以就硬下头皮整吧,还是BOM的签名问题,以下均为我自己理解,不知道对不对,Windows环境识别UTF-8与ANSI文件靠的是UTF-8文件前的一个叫做BOM签名的东西,这个东西普通的文本编辑器是看不到的 xEF xBF xEE好像是这三个16进制字符,反正是三个东西,问题2里毛病也是他们三个整出来的,UTF-8在Windows下虽然要用这三个家伙区分,在php下确实没有用的东西,要不问题2里面为啥要去掉BOM签名呢,怪就怪我在做ASP的时候遇到过同样的UTF-8文件写入中文乱码问题,所以就留了个心眼,先在网上艘了一个UTF-8文件在php写入的函数,里面就把那三个讨厌的东西加进去了,哎呀我去,这就是聪明反被聪明误,这顿调试就是不行啊,后来我也是恍然大悟,把这三个家伙去掉了,问题解决了,那个畅快啊。
还有很多小问题就不细说了,比如$的转义符是chr(36)啊,SQL中的关键词from啊(在asp中不是关键词),时间函数的使用(巨方便,比ASP的用着舒服)。
经过将近一个月时间的学习发现php确实很强大,而且很好学,前提是有一门web服务器端语言基础,感觉有很多ASP上需要重点考虑的问题在php 上已经不是问题了,都替你想好了,而且php速度很快,没有用Zend我就能感觉出比ASP+Access要快很多了,jsp和.net在速度上根本不能比的,代码也很简捷,除了我说的checkbox稍微麻烦一些,其他地方代码都要比asp精简,好多地方都很灵活,比如变量的定义,$开头的变量让命名少了很多约束,很多要用连字符把字符串和变量连起来使用的地方因为有$的存在都不用连字符了,因为$代表变量,所以不用特别强调,总之php是很好很强大,真的很适合做网站呢。
下一步学习在熟悉语句语法的同时,要加强自己面向对象的思想,php真正的强大还在后面呢!