mamp pro4.1 写入浏览器的cookie失败原因可能是bom头

在使用MAMP Pro 4.1进行本地PHP开发时,遇到Cookie无法通过AJAX正确写入的问题。经过排查,发现是由于文件含有BOM头导致的。清理所有文件的BOM头后,Cookie写入恢复正常。本文分享了这一解决经验,希望帮助遇到类似问题的开发者。
摘要由CSDN通过智能技术生成

mac,mamp,php,setcookie,cookie读不出,写不住,写入失败,读出失败,失效。等的问题。可能的解决办法。

前一段时间,有朋友让我帮他改php的一个项目。本人小白一个,在本地运行的时候,碰到用ajax调用写入setcookie失败。一般的代码在服务器上运行正常。

到处搜索,未果。

有人说setcookie前不能有输入,解决 :把setcookie之前的程序检查一下,是否在PHP代码<?php 之前有回车或者空格。或者:在程序的最开头执行一次 ob_start();

我检查了一遍,没看到问题。

问朋友,他说可能是本地host需要修改。我用的是mamp环境,按理是傻瓜式的,根本就不用在环境搭建上废脑的。后来还是设置了一个两个字母的域名,还是不行。

(注:mac系统下,host的修改路径是双击Macintosh HD,找到.etc文件夹,就看到host了。)

浏览器端也看到没有限制cookie写入。

还是说重点吧,没有写过博客,不擅长写文章。

是文件头bom引起的,我把整站都刷了一遍。去除了所有文件的bom头,然后,然后,就好了。

<?php

$auto = 1;
checkdir('项目地址');
function checkdir($basedir){
if ($dh = opendir($basedir)) {
  while (($file = readdir($dh)) !== false) {
   if($file{0} == '.')
   {
    continue;
   }
   if ($file != '.' && $file != '..'){
    if (!is_dir($basedir."/".$file)) {
     echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
    }else{

     $dirname = $basedir."/".$file;
     checkdir($dirname);
    }
   }
  }
closedir($dh);
}
}
function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  if ($auto == 1) {
   $rest = substr($contents, 3);
   rewrite ($filename, $rest);
   return ("<font color=red>BOM found, automatically removed.</font>");
  } else {
   return ("<font color=red>BOM found.</font>");
  }
}
else return ("BOM Not Found.");
}
function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>


这段不是我写的,不知道是哪位大神写的,忘了是在哪复制来的。想也不是没有公德心,哈哈,人家帮了我,应该第一时间感谢。或许我已经留了感激之语了。不过确实想不起来在哪翻到了。谢谢代码的原作者。

反馈给你们,希望能帮你们解决问题。我那会用了整整三天。你们懂的,头很大。要疯的感觉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值