Search code examples
phpsessionutf-8byte-order-mark

Byte Order Mark causing session errors


I have an PHP app with houndreds of files. The problem is that one or several files apparently have a BOM in them, so including them causes error when creating the session... Is there a way how to reconfigure PHP or the server or how can I get rid of the BOM? Or at least identify the source? I would prefer a PHP solution if available


Solution

  • I have been able to identify the files that carried BOM inside them with this script, maybe it helps someone else with the same problem in the future. Works without eval().

    function fopen_utf8 ($filename) { 
        $file = @fopen($filename, "r"); 
        $bom = fread($file, 3); 
        if ($bom != b"\xEF\xBB\xBF") 
        { 
            return false; 
        } 
        else 
        { 
            return true; 
        } 
    } 
    
    function file_array($path, $exclude = ".|..|libraries", $recursive = true) { 
        $path = rtrim($path, "/") . "/"; 
        $folder_handle = opendir($path); 
        $exclude_array = explode("|", $exclude); 
        $result = array(); 
        while(false !== ($filename = readdir($folder_handle))) { 
            if(!in_array(strtolower($filename), $exclude_array)) { 
                if(is_dir($path . $filename . "/")) { 
                    // Need to include full "path" or it's an infinite loop 
                    if($recursive) $result[] = file_array($path . $filename . "/", $exclude, true); 
                } else { 
                    if ( fopen_utf8($path . $filename) ) 
                    { 
                        //$result[] = $filename; 
                        echo ($path . $filename . "<br>"); 
                    } 
                } 
            } 
        } 
        return $result; 
    } 
    
    $files = file_array(".");