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); } ?>这段不是我写的,不知道是哪位大神写的,忘了是在哪复制来的。想也不是没有公德心,哈哈,人家帮了我,应该第一时间感谢。或许我已经留了感激之语了。不过确实想不起来在哪翻到了。谢谢代码的原作者。
反馈给你们,希望能帮你们解决问题。我那会用了整整三天。你们懂的,头很大。要疯的感觉。