1、做项目遇到一个问题就是setcookie始终没法生效。怎么找都找不到原因。

网上有很多例子,说是 在setcookie之前不能有输出。检查了下确实没有输出。具体例子如下所示。

$res = setcookie('AUCSESSION308', '1234', 0, '/');
PubFileLog::writeDebugInfo('res4:'.$res);
$pub = new PubAuc();
$res = setcookie('AUCSESSION309', '1234', 0, '/');
var_dump($res);
PubFileLog::writeDebugInfo('res5:'.$res);

上面的例子,第1个setcookie有返回结果,结果是1。

但是第2个例子,setcookie就是没有结果,简直是。显然$pub = new PubAuc();这里出了问题,导致了异常。

对,然后,我用了一个极端的方式调试,将PubAuc类里的内容全部删除了只保留了如下定义,结果还是不行。这就奇怪了。

<?
class PubAuc {
}
然后在PubAuc.php同级目录下另外有个文件PubReCode.php。里面有个类是PubReCode。。我将上面的代码改为:

$res = setcookie('AUCSESSION308', '1234', 0, '/');
PubFileLog::writeDebugInfo('res4:'.$res);
$pub = new PubReCode();
$res = setcookie('AUCSESSION309', '1234', 0, '/');
var_dump($res);
PubFileLog::writeDebugInfo('res5:'.$res);
这样又可以了。然后我把PubReCode里的类定义改为 空的类,也是可以的。

既然代码内容一样,这到底是哪里出现问题了呢。

最后我在Beyond Compare上对比了下,发现两个文件有微小的差别。如下所示。



两个文件的差别,在于正常的没有 字节序标记,而不正常的有。所以赶紧上网查查这个到底是为啥。


PHP中utf-8编码格式之BOM引发的问题


二、对于此类问题,我们如何解决。

2.1、在windows\phpstorm上编写代码时保持良好的习惯。始终设置文件的格式为 LF\UTF-8的格式。

2.2、可以使用脚本对于上传到服务器的php代码文件,进行检查,如果遇到有字节序标记的文件,全部使用工具进行转码。

2.3、如果你们的项目组有使用Beyond Compare工具,使用该工具,就可以直接打开看到一个文件的编码,以及该文件是否有

字节序标记。

检查脚本链接:http://pan.baidu.com/s/1b5PHRC 密码:ts5o


更多相关文章

  1. 上传文件时通过AJAX更新列表
  2. 使用mod_rewrite将文件夹转换为查询字符串
  3. PHP上传文件 Error 6解决方法
  4. 使用.php文件生成一个MySQL转储文件。
  5. thinkPHP5下扩展encryptedData解密算法文件的注意事项
  6. 如何加载json文件?
  7. 使用AJAX将数据发送到.php文件,如何从中获取数据?
  8. 使用javascript将文件输入到php文件
  9. 迭代文件夹中的CSV文件,并使用PHP将数据加载到MySQL中

随机推荐

  1. C程序的完整开发过程包括哪几步
  2. c++ vector用法是什么
  3. c语言程序的基本单位是什么
  4. c语言规定在一个源程序中main函数的位置
  5. 如何用c语言编写动态烟花
  6. c程序的基本组成单位是什么?
  7. c语言中*是什么意思
  8. C++ 11新特性有哪些
  9. stdafx.h是什么头文件
  10. 可运行的c语言程序的扩展名为什么?