
기본적으로 Windows용 LAMP 설정인 Xampp을 실행하고 있습니다. 저는 수년간 아무 문제 없이 사용해왔는데 갑자기 PHP 세션을 사용하는 모든 사이트 페이지에서 다음과 같은 오류가 발생합니다...
경고: session_start() [function.session-start]: 세션 캐시 제한기를 보낼 수 없습니다. 헤더가 이미 C:\webserver\htdocs\friendproject2\labs\2.php:1에서 C:\webserver\htdocs로 전송되었습니다. 3행의 \friendproject2\labs\2.php
나는 이것이 일반적으로 2가지 중 1가지에서 발생한다는 것을 알고 있습니다.
- session_start() 함수가 호출되기 전에 화면에 공백이 인쇄되면 때때로 이런 일이 발생할 수 있습니다.
- session_start()가 호출되기 전에 화면/브라우저에 인쇄된 내용이 있는 경우.
이제 내 문제는 다릅니다. 오늘 밤 이전에는 세션을 사용하는 수백 개의 파일이 있었는데 그 중 어느 것도 이러한 오류를 표시하지 않았습니다. 사용자 오류를 간과한 것은 단지 하나의 파일이 아니라 모든 파일에 영향을 미치기 시작한 것입니다. 나는 오늘 밤이나 최근에 내 컴퓨터를 변경한 적이 없으며 기억합니다.
이 문제의 원인은 무엇입니까? 그것은 나를 미치게 만들고 있으며 왜 이런 일이 일어나기 시작했는지 아무도 모르는 것 같습니다. 서버 관련인거 같은데
파일을 만들어 내 서버 웹의 폴더에 넣고 이 bvelow와 같은 간단한 파일로 만들 수도 있지만 위에 표시된 오류가 계속 발생합니다....
<?PHP
session_start();
$_SESSION['test'] = 'test value';
echo $_SESSION['test'];
?>
답변1
모든 파일이 UTF-8 인코딩으로 저장되었는지 확인하세요. UTF-8로 인코딩된 파일에는 빅 엔디안/리틀 엔디안 바이트 순서의 차이를 알려주는 BOM(바이트 순서 표시)이 포함될 수 있습니다. PHP는 BOM을 이해하지 못하며 파일 시작 부분에 도달하면 데이터를 처리한다고 가정하고 전송합니다. 그때쯤이면 헤더를 수정하기에는 너무 늦습니다.
해결책은 파일을 ANSI로 저장하는 것입니다. IDE/편집기를 구성하십시오.
도움이 되길 바랍니다.
편집하다:
이 경우 변환해야 할 파일이 많을 것입니다. iconv를 사용하는 이 bash 쉘 코드를 사용해 볼 수 있습니다(다음에서 수정됨:https://stackoverflow.com/questions/1182037/osx-change-file-encoding-iconv-recursive)
for files in /mydisk/myfolder/*.php
do
iconv -f UTF-8 -t ISO-8859-1 "$files" "${files%.php}"
done