>  기사  >  백엔드 개발  >  __halt_compiler의 일부 요약

__halt_compiler의 일부 요약

WBOY
WBOY원래의
2016-08-08 09:22:331455검색
  • __halt_compiler()는 이름에서 알 수 있듯이 컴파일러의 컴파일을 중지하는 함수입니다. 컴파일러가 이 지점을 실행하면 다음 부분을 더 이상 구문 분석하지 않습니다. 이 함수는 PHP 파일의 가장 바깥쪽 레이어에서 직접 사용해야 하며 함수 내에서는 사용할 수 없다는 점에 유의해야 합니다.

PHP 매뉴얼의 소개에 따르면 이 함수는 설치 파일과 유사하게 스크립트에 데이터를 삽입하는 데 일반적으로 사용됩니다. 즉, __halt_compiler(); 뒤에 바이너리 노이즈(클러터), 압축 파일 및 기타 유형의 파일과 같이 컴파일할 필요가 없는 일부 파일을 넣습니다. 예를 들어 다음 코드는

// open this file
$fp = fopen(__FILE__, 'r');
// seek file pointer to data
fseek($fp, __COMPILER_HALT_OFFSET__);
// and output it
var_dump(stream_get_contents($fp));
// the end of the script execution
__halt_compiler(); the installation data (eg. tar, gz, PHP, etc.)
팁: __COMPILER_HALT_OFFSET__ 상수를 사용하여 섹션의 시작 부분에서 데이터 단어를 얻습니다. 사용하려면 __halt_compiler()가 필요합니다.
  • 다음으로 PHP 설치 파일의 구체적인 예를 살펴보겠습니다.

php5.1에 __halt_compiler()가 도입되기 전 , gzdeplat()을 사용하여 압축된 파일에는 종종 PHP 인터프리터(파서)에서 읽을 수 없는 특수 ASCII 코드가 포함되어 오류가 발생합니다. 오류 발생을 방지하기 위해 gzdeflate()에서 생성된 데이터를 base64_encode()를 사용하여 인코딩하면 파일 크기가 약 33% 증가합니다. 이것은 메모리 낭비입니다.

$packed = base64_encode(gzdeflate('the old package'));
//unpacked
$unpacked = base64_decode(gzinflate($packed));
__halt_compiler()를 사용하면 더 이상 base64_encode()를 사용하여 인코딩할 수 없지만 __halt_compiler() 뒤에 데이터를 직접 넣으면 컴파일되지 않고 오류가 발생합니다. 발생하다.
// 打开脚本自身文件
$fp = fopen(__FILE__, 'rb');
// 找到数据在文件中的指针
//__COMPILER_HALT_OFFSET__ 将会返回
//__halt_compiler();之后的指针
fseek($fp, __COMPILER_HALT_OFFSET__);
// 输出文件
$unpacked = gzinflate(stream_get_contents($fp));
__halt_compiler();
//now here... all the binary gzdeflate already items!!!

위 내용은 내용의 측면을 포함하여 __halt_compiler의 일부 요약을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:세션 원칙다음 기사:세션 원칙