공식 PHP 문서에는 마지막에 ?> 닫는 태그를 추가하지 않는 것이 가장 좋다고 지적되어 있습니다. 하지만 우리의 프로그래밍 습관과 우리가 사용하는 IDE는
?>에 대한 PHP 닫는 태그를 자동으로 생성합니다. 이 표시의 사용은 정상적인 상황에서 프로그램의 작동에 영향을 미치지 않습니다. 특히 초기 PHP4에서는 이
태그를 잘못 사용해도 최종 출력에 영향을 미치지 않습니다. 그런데 최근 PHP 스크립트의 종료 태그를 페이지에 표시할 수 없는 문제가 발생했습니다.
우선 wap의 최종 출력은 xml 파일입니다. xml 파일 형식에 문제가 있으면 결과가 표시되지 않습니다. 여러 번 출력을 확인한 결과
문제는 없었고, 다른 테스트 머신에서도 동일한 코드가 문제 없이 출력된 것으로 나타났습니다. Firebug를 통해 보면 최종 출력
주된 이유는 Firebug 분석을 통해 이전에 빈 줄이 나타나는 것을 알 수 있기 때문입니다. xml이 출력됩니다. xml로 빈 줄이 출력되는 것은 모든 원본 파일을 검색해도 빈 줄이나 유사한 기능 설명이 출력되지 않습니다. ob_clean을 사용하여 한 줄씩 디버깅한 결과, 파일 중 하나가 로드된 후 출력에 빈 줄이 나타나는 것으로 나타났습니다. 마지막으로 PHP 파일 끝의 ?> 뒤에 두 개의 빈 줄이 있는 것으로 나타났습니다. . 빈 줄을 제거하면 문제가 해결되고 정상적으로 출력됩니다.
이유를 알아보기 위해 인터넷에서 관련 정보를 찾아보니, codeIgniter 개발 사양에는 다음과 같은 설명이 나와 있습니다.
PHP 닫는 태그 "?>" PHP 분석기는 PHP에서 선택 사항입니다. 그러나 닫는 태그를 사용하는 경우 개발자, 사용자 또는 FTP 응용 프로그램이 닫는 태그 뒤에 공백을 삽입하면 중복 출력, PHP 오류, 표시할 수 없는 후속 출력 및 빈 페이지가 발생할 수 있습니다. 따라서 모든 PHP 파일에서는 PHP 닫는 태그를 생략하고 이것이 파일의 맨 아래임을 나타내는 주석을 삽입하고 애플리케이션과 관련하여 파일을 찾아야 합니다. 이렇게 하면 파일이 종료되었고 삭제되지 않았는지 확인하는 데 도움이 됩니다.
// 错误的写法 INCORRECT <?php echo "Here's my code!"; ?> // 正确的写法 CORRECT: <?php echo "Here's my code!";
데모:
test.php <?php header("Content-type:text/xml"); include_once('sys_common.php'); echo'<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title><![CDATA[测试]]></title> <link><![CDATA[http://baidu.com]]></link> <description><![CDATA[测试空行输出]]></description> <language><![CDATA[zh-CN]]></language> <pubDate><![CDATA[18.11.2016 14:54:02]]></pubDate> <lastBuildDate><![CDATA[18.11.2016 14:54:02]]></lastBuildDate> </channel> </rss>'; // exit;
가져와야 하는 시스템 파일 sys_common.php
<?php // do someing // 注意:后边这个闭合标签需要去掉,这样上边引入的时候输出xml就不会出错了。 // ?>
좋아, 가져온 파일을 찾아서 닫는 파일을 제거하세요. 태그하면 괜찮습니다!