Liny_@NotePad

沉迷ACG中

PHP 销毁Session

之前用session_destroy()的方式销毁session,发现丢到服务器上无用,百度之得解:

● 如何删除session?

1、unset ($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。 session_unregister()在PHP5中不再使用,可将之打入冷宫。

unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量。

2、$_SESSION=array() 删除多个session

3、session_destroy()结束当前的会话,并清空会话中的所有资源。。该 函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。

返回值:布尔值。

功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true

session_unset() 如果使用了$_SESSION,则该函数不再起作用。由于PHP5必定要使用$_SESSION,所以此函数可以打入冷宫了。

PHP文件锁

由于没有application,只能用数据库、文件或共享内存来模拟,
但是数据库的话恐怕会并发,又找不到怎样加锁,共享内存在WINDOWS下仿佛不好用,
同事提到说可以用线程锁,查了下资料,需要服务器的管理权限,只得作罢,最后决定用文件锁来实现生成年月日-自动编号的主键。

由“COUNT 字段不正确”引来的种种..

测试刚写好的信息管理系统,发现短文章插入正常,长文章插入不正常,提示“COUNT 字段不正确”。
迷茫中以为仍旧是PHP调Access备注字段的问题,查了一些资料未果。

重新认真调试,按这个提示应该是字段不符合,我的文章中的确出现了单引号('),但是已经被自动转义了啊,PHP5增加了get_magic_quotes_gpc开关,默认为开,会自动为GET、POST等参数addlashes,即在前面加了斜杠。

于是echo SQL出来自己执行,发现的确是不行的o(╯□╰)o 于是百度了下,通过内置的htmlentites函数将字符串转换为HTML字符,在读取的时候通过html_entity_decode函数反向解析。

这下似乎解决了,数据也可以正常插入,但在显示的时候发现反斜杠仍在,继续百度,找到stripslashes函数,干掉了反斜杠,仿佛没什么问题了……

再来测试,发现中文字符也会被转码,这下字段长度大大不足,再次百度,原来有htmlspecialchars这个函数。。替换掉所有的htmlentites函数,终于搞定!

PHP时间差8小时的解决办法

最近写PHP的时候发现date('Y-m-d H:i:s')得到的小时数总是早8个小时,很迷茫,百度一下得解:位置对象

前几天发现一个问题 date("Y-m-d G:i T",time()) 取出来的时间和本地时间老差8个小时,可我的系统明明是中国标准时(GMT+8),最后终于找到了问题所在:
原来从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的
也就是显示的时间(无论用什么php命令)都是格林威治标准时间
和我们的时间(北京时间)差了正好8个小时,有以下3中方法可以恢复正常的时间。

1,最简单的方法就是不要用php5.1以上的版本
2,如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的
上面加上 date_default_timezone_set (XXX);
3,一劳永逸,仅限能修改php.ini。打开php.ini查找date.timezone 去掉前面的分号
= 后面加XXX,重启http服务(如apache2或iis等)即可

关于XXX,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore
老外好像把北京漏调了
其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC
PRC是什么?PRC是中华人民共和国啊-_-

PHP Hello World!

刚看了下W3CSchool的PHP教程,感觉比较好上手,于是写了个留言本HelloWorld巩固巩固。

功能很简单:安装、发表留言、管理登陆、管理员删除,没做什么安全处理,也没怎么美化,但既然是第一个php程序就蛮留念一下 :)。 

Cannot send session cookie..

同事玩php,这里的session必须在session_start()后才能使用。

然后调试的时候服务器提示说:
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

百度之,好像是session_start()前不能有其他输出,

于是将它放在第一行,结果依然是这个问题,当下囧。

继续百度,得解:我们使用的是UTF-8编码,默认带有Unicode签名(BOM),这厮偷偷藏在最前面,我们看不到 - -

如果有UltraEdit就可以手工修改二进制编码。。可是没有,

我们用DW打开,在页面属性->标题/编码->包括Unicode签名去掉,重新保存,再次运行,成功 = =。