__halt_compiler の概要

WBOY
リリース: 2016-08-08 09:22:33
オリジナル
1505 人が閲覧しました
  • __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() が導入される前は、gzde flat() を使用して圧縮されたファイルには、多くの場合、これでは解析できないファイルが含まれていました。 PHP インタプリタ (parser) が特別な ASCII コードを読み取るため、エラーが発生します。エラーを防ぐために、base64_encode() を使用して gzdeflate() によって生成されたデータをエンコードします。これにより、ファイル サイズが約 33% 増加します。これはメモリの無駄遣いです。

$packed = base64_encode(gzdeflate('the old package'));
//unpacked
$unpacked = base64_decode(gzinflate($packed));
ログイン後にコピー

__halt_compiler() では、base64_encode() を使用してエンコードすることができなくなり、データを __halt_compiler() の後に直接配置するため、コンパイルされず、結果が間違ってしまいます。りー
上記は、内容の側面も含めて __halt_compiler の概要をいくつか紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート