看板 PHP 關於我們 聯絡資訊
※ 引述《Mal9 (馬英九)》之銘言: : 在寫PHP的時候 突然都會在session_start()出現error : 因為問題有點簡單 所以不太敢po板 找了才發現是要放在第一行 : 結果即使是放在第一行也是爆炸 : 找了很久才發現是BOM的問題 不知道為啥那時的NOTEPAD++突然變成有BOM : 浪費了好大一段時間才DE出這個BUG : BOM信息是文件開頭的一串隱藏的字符,用於讓某些編輯器識別這是個UTF-8編碼的文件。 : 但PHP在讀取文件時會把這些字符讀出,從而形成了文件開頭含有一些無法識別的字符的 : 問題。 : 不知道為啥現在還要這個BOM功能? 還是有板友也被這個問題打敗的XD : 感謝 關於BOM,可以用下面的程式,把全部檔案含有BOM的字元的清除 if (isset($_GET['dir'])){ $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { 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); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.36.11