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()가 필요합니다.
php5.1에 __halt_compiler()가 도입되기 전 , gzdeplat()을 사용하여 압축된 파일에는 종종 PHP 인터프리터(파서)에서 읽을 수 없는 특수 ASCII 코드가 포함되어 오류가 발생합니다. 오류 발생을 방지하기 위해 gzdeflate()에서 생성된 데이터를 base64_encode()를 사용하여 인코딩하면 파일 크기가 약 33% 증가합니다. 이것은 메모리 낭비입니다.
__halt_compiler()를 사용하면 더 이상 base64_encode()를 사용하여 인코딩할 수 없지만 __halt_compiler() 뒤에 데이터를 직접 넣으면 컴파일되지 않고 오류가 발생합니다. 발생하다.$packed = base64_encode(gzdeflate('the old package')); //unpacked $unpacked = base64_decode(gzinflate($packed));로그인 후 복사// 打开脚本自身文件 $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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.