이미지 처리에 PHP를 사용할 때 imageCreatetRuecolor 함수는 종종 진정한 색상 블랭크 이미지를 만드는 데 사용됩니다. 이 기능은 지정된 너비와 높이를 가진 진정한 색상 이미지 리소스를 만드는 것입니다. 일반적으로,이 기능 자체는 문제를 일으키지 않지만 "헤더 이미 전송 된"오류가 발생하면 일반적으로 HTTP 헤더 정보가 미리 출력되기 때문입니다. 다음 으로이 오류의 원인과 해결 방법을 자세히 살펴 보겠습니다.
"헤더 이미 전송 된 헤더"오류는 일반적으로 컨텐츠를 출력하기 전에 HTTP 헤더를 보내려고 할 때 발생합니다. PHP는 콘텐츠 (예 : HTML, 이미지 또는 파일)를 브라우저로 전송하기 전에 컨텐츠 유형, 문자 인코딩, 캐시 제어 등과 같은 HTTP 헤더 정보를 보내야합니다. 스크립트가 컨텐츠를 출력하기 전에 헤더 정보를 전송하는 순서를 제대로 제어하지 않으면이 오류가 트리거됩니다.
imageCreateTrueColor를 사용하여 이미지를 생성 할 때 일반적으로 헤더 () 함수로 응답 헤더를 설정하여 브라우저에 HTML 페이지 대신 이미지를 출력한다고 알려줍니다. imageCreateTrecolor 가 호출되기 전에 HTML 컨텐츠 또는 기타 텍스트 정보가 출력되면 "헤더가 이미 전송 된"오류가 발생합니다.
일반적인 오류의 원인에는 다음이 포함됩니다.
공백 또는 신약 : 파일의 상단 또는 하단의 공간, 라인 브레이크, BOM (바이트 주문 마크) 등은 PHP 파싱 전에 브라우저에 보이지 않는 문자를 보냅니다.
HTML 출력 : imageCreateTrueColor를 호출하기 전에 스크립트에 출력 HTML 컨텐츠가있는 경우 PHP는 더 이상 HTTP 헤더 정보를 보낼 수 없습니다.
디버깅 출력 : 개발 프로세스 중에 Echo , Print_r 또는 Var_Dump 와 같은 디버깅 기능을 사용하여 출력 디버깅 정보를 미리 전송하여 오류가 발생합니다.
imageCreateTrueColor는 이미지의 MIME 유형을 지정하기 위해 Header () 와 함께 사용해야합니다. 예를 들어, 이미지 데이터를 보내기 전에 브라우저에 PNG 이미지라고 말해야합니다.
<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span></span>
imageCreateTrecolor 또는 ImagePNG를 호출하기 전에 출력 (예 : HTML, 공간 또는 신생)이 전송 된 경우 PHP는이 헤더를 다시 보낼 수 없으므로 "헤더가 이미 전송 된"오류가 발생합니다.
이 문제를 해결하려면 PHP 스크립트가 이미지를 출력하기 전에 아무것도 보내지 않도록해야합니다. 몇 가지 일반적인 솔루션은 다음과 같습니다.
PHP 파일의 상단과 하단에 공백, 라인 브레이크 또는 BOM이 없는지 확인하십시오. 특히 PHP가 태그를 시작한 후 태그 <? php 또는 태그 를 종료 한 후에는 추가 공백이나 신약이 없는지 확인하십시오. 파일을 열 때, 특히 편집기를 사용할 때는 보이지 않는 문자를 확인할 수 있습니다.
imageCreatetRueColor 및 Header () 함수를 호출하기 전에 다른 어떤 것도 브라우저에 출력되지 않도록하십시오. 이러한 기능을하기 전에 Echo , Var_dump 또는 Print_r 디버그 출력을 피하십시오. 디버그 정보를 출력 해야하는 경우 OB_START () 와 OB_END_FLUSH () 사이에 배치하여 출력을 일시적으로 버퍼링하십시오.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 출력 버퍼를 켭니다</span></span><span>
</span><span><span class="hljs-comment">// 당신의 코드</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 출력 버퍼를 종료하십시오</span></span><span>
</span></span>
imageCreateTrecolor를 호출하기 전에 파일에서 일부 출력을 수행 해야하는 경우 출력 버퍼링을 사용할 수 있습니다. OB_START () 함수를 사용하면 PHP는 모든 출력을 캐시하며 즉시 브라우저로 전송되지 않습니다. 즉, 이미지가 출력되기 전에 디버그 정보 또는 기타 컨텐츠를 자유롭게 출력 할 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 출력 버퍼링을 시작하십시오</span></span><span>
</span><span><span class="hljs-comment">// 코드 출력 부분</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">300</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>); </span><span><span class="hljs-comment">// 이미지 데이터를 보냅니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// 버퍼링을 제거하고 끕니다</span></span><span>
</span></span>
때로는 PHP 구성 파일의 output_buffering 옵션이 출력 버퍼의 동작에 영향을 줄 수 있습니다. 특히 더 크거나 동적으로 생성 된 이미지를 처리 할 때 활성화되거나 올바르게 구성되어 있는지 확인하십시오.
<span><span><span class="hljs-attr">output_buffering</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
</span></span>
"헤더가 이미 보낸 헤더"오류가 발생하면 키는 이미지를 보내거나 헤더 정보를 설정하기 전에 코드에 출력이 있는지 확인하는 것입니다. 이 문제는 일반적으로 불필요한 공백 문자를 제외하거나 디버그 정보를 출력하거나 출력 버퍼를 사용하여 해결됩니다. 올바른 방법은 불필요한 출력 간섭없이 이미지 데이터를 보내기 전에 모든 헤더 정보가 설정되도록하는 것입니다.
이 기사를 통해 imageCreateTrueColor를 사용할 때 발생할 수있는 "헤더 이미 보낸 헤더"오류를 이해하고 개발 중에 효과적으로 피할 수 있기를 바랍니다.