php网站设计与部署问题总结
本文是本来在部署一套服装类网站时遇到的问题,这些问题涉及到了php程序设计问题和php各个版本之间的差别引起的问题。特此做了个总结,希望能够对比人有所帮助,避免不必要的为问题。
1.本人遇到的第一个问题是session问题。一不细心真会让人掉入陷阱里,摸索个老半天。
本人写了个my_session_start($lifetime),除了启动一个会话外,它还完成了两个功能,一个是设定生存时间,也就是函数引入的lifetime变量;另一个是设定一个会话id,我们知道session_start()已经可以自动恢复旧的会话id了,但如果一个一个用户的cookie删除了,会话就无法恢复了,本文里是通过会员数据库里保存的session_id重新恢复到当前会话里。
问题就出在了保存my_session_start($lifetime)这个公共函数的文件里。本人的服务器上是没有php编辑器的,由于测试过程中要修改一个参数,直接使用了记事本修改这个文件。修改完之后原先没有什么问题的程序,突然一直报错了,数值改回去仍然报错,图片如下(另外再模拟的一个文件):
而且通过输出session_id(),会发现session_id不断的更改。cookie的值一都为空。PHPSESSID值无法送到客户端。我们知道session_start();这个函数在启动一个会话前会操作cookie的读取或写入,当发现cookie里保存有PHPSESSID(本人的session_name,视个人配置有所不同),就读取并恢复,如果没有,就新建一个会话id然后传送到cookie保存。图片的错误信息很明确,就是说session_start()执行前,已经有输出内容了,导致无法输出phpsessid到cookie里。但我仔细查看了my_session_start($lifetime)函数所在文件,无任何空行,无任何输出,到底是怎么回事呢。网络上找了老半天,试了很多方法都不行,最找到原因了。原来是编码搞的鬼。utf-8编码格式有分 无BOM 和 带BOM信息的,而PHP是不识别BOM头得,utf-8的bom信息是为了兼容utf-16等之后的版本的,微软自带的记事本是支持bom头得,当我用记事本修改该php文件的时候,php文件自动就添加了bom头信息,这个头信息是隐藏的,所以程序才一直提示会话启动时无法发送cookie到客户端。使用uedit将该文件转换为utf-8(无BOM)格式后问题解决。一切都是BOM头惹的祸啊。
2.跟php版本相关的问题
本人的服务器php版本是5.2版本,本人实际写程序的时候使用的是5.4版本,归根结底太追时髦了,有不认真研究php各个版本之间的差别。
首先是__DIR__常量,本人碰到的错误如下图所示,
本人的程序很多地方都有所使用这个常量,以绝对路径引用一个文件,有时候只有这样才能满足要求,本人习惯于使用这个常量,偏偏这次碰见一个php5.2的服务器,经查__DIR__魔术常量是php5.3版本才引入的,其实还有其他很多方法可以取代它,如dirname()/$_SERVER[DOCUMENT_ROOT]等等,没则只能是一个个的重改喽。
其次,session_status(),php5.4才引入的,1 代表session_write_close()调用过,代表关闭session写入,这在带框架的页面有时可以提高加载速度。
总结这次问题,php版本上不可太追时髦,尽量使用主流的版本和功能。很多时候,服务器不是我们能控制的;另外不要随便使用记事本来修改php程序。
本文源自三合网络:http://www.7wa7.com,A5首发,转载请注明出处,谢谢!