12月24, 2013

要注意的php问题

在用php写项目过程中碰到几点问题,特此记录:

关于register_shutdown_function的工作目录

在写一个跟日志相关的功能,用到了register_shutdown_function函数,这个函数作用是在脚本执行完成后要执行的代码。我在这个函数内部有一行是往当前目录的一个文件写入记录的log信息。执行后我发现当前目前没有找到生成的文件。经过代码调试后还是找不到原因,最终还是阅读php文档在其函数的说明找到了原因:

Note:

Working directory of the script can change inside the shutdown function under some web servers, e.g. Apache.

以上文字说明在这个函数内工作目录可能已经改变了。在shutdown函数内输出getcwd()即可说明问题。

解决办法就是把log文件路径改成绝对路径或者chdir到当前目录。

关于5.2+ serialize表单数据包含单引号的问题

序列化表单数据的时候要注意php5.2/5.3对魔术引号的影响。否则会导致unserialize序列数据的失败。 解决办法:对serialize前的数据 将'替换成",或者判断get_magic_quotes_gpc的值为on进行stripslashes,off则进行addslashes

注册__autolaod对class_exists的影响

如果在程序中向php注册了类自动加载,要注意的是 class_exists在判断类的存在 默认会使用自动加载规则来判断。如果不想使用自动加载规则,可以在class_exists第二个参数设置为false。

完。