PHPはサーバー上で実行される前にバイトコードにコンパイルされ、そのバイトコードはキャッシュされるため、スクリプト全体をすべてのWebアクセスで再解釈する必要はありません。
しかし、phpを「コンパイル」してバイナリ風のファイルをアップロードすることはできますか。これは単にバイトコードインタプリタによって実行されます。
この質問が行われた後、FacebookはHipHop for PHPを立ち上げました。これはおそらくこれまでで最もテストされたPHPコンパイラです世界の10大Webサイトの1つを運営していました)。しかし、FacebookはHHVMを支持して中止しました。HHVMはコンパイラではなく仮想マシンです。
それを超えて、googling PHP compiler
はサードパーティーの解決策を多数生み出します。
bcompiler_write_exe_footer()
manual を参照)。短い答えは「いいえ」です。
PHPの現在の実装は、インタプリタ言語の実装です。どんな言語でも技術的に解釈またはコンパイルできるという事実の理論的側面を議論することができますが、現状では、現在の実装はPHPコードの実行にインタープリタを必要とし、インタープリタは実行を管理します。環境。
プリコンパイルされたPHPバイトコードのアップロードについてのあなたの質問に答えるには、おそらく可能ですが、あなたはPHPインタプリタがそのようなファイルを読み込んで作業する方法を実装する必要がありますそれ。既存のオペコードはすでにキャッシュされているので、多くの報酬を得ることができるタスクのようには見えません。
その質問が最初に尋ねられて以来、その答えは一定の「いいえ」から「一種の」に変更されました。
http://github.com/facebook/hiphop-php/wiki
Hip Hop for PHPは、PHPコードを使用して高度に最適化されたC++に変換したコンパイラです。明らかに、いくつかの機能はサポートされていません(たとえば 'explode')。
HipHopを実装する方法についてのより多くの情報を探している間、私はこの質問を見つけました、そして、私は私が話したいと思いました:)
2013年以来、Facebookはもはやそれを使用していません、そしてそれはコンパイラではないHHVMを支持して廃止されました: https://en.wikipedia.org/wiki/HipHop_for_PHP
もあります
どちらが目的
- 独自のPHPアプリケーションでスクリプト全体をエンコードするには
- 独自のPHPアプリケーションでクラスや関数をエンコードする
- Php.exeを必要とせずに、クライアントデスクトップで使用できるphp-gtkアプリケーションの作成を可能にする。
- PHPからCへのコンバータのフィージビリティスタディを行うには
この拡張子はPECLから入手できます。
PHPスクリプトからバイナリ実行可能ファイルを生成することだけを考えているのであれば、質問が非常に正確になるようにしないでください。そのうえ、ほとんどのPHP開発者はバイトコードが何であるかについての手がかりを全く持たない。
そうは言っても、答えはYESです。 PHPスクリプトをバイナリにコンパイルしました。そしてバイナリだけではありません。 CDEアプリケーション (Wayback Machineへのリンク、 元のリンク は現在壊れています)を使用して、すべての依存関係とともに配布して実行できるポータブルバイナリにしました。何の問題もなく…そしてそれは美しく働きます。
必要なのは phc を使うことだけです。
phc を使用すると、PHPプログラムをサーバーにアップロードできる共有ライブラリにコンパイルできます。 PHPプログラムはバイナリにコンパイルされます。これはeval
s、include
s、およびPHP標準ライブラリ全体をサポートするように行われます。
ええと、誰もが Zend Guard について聞いたことがありますが、これはまさにこの人が求めていることです。 PHPコードを "machine code"にエンコード/難読化します。
PHPコードの "コンパイラ"がいくつかあります。それらのほとんどはPHP機能のすべてをサポートするわけではありません。これらは単に実行時に解釈されなければならないからです。
私たちはPhalangerを使用しています--- http://www.php-compiler.net/ - それはそれらの汚いPHP動的機能でさえもサポートしており、そしてまだそれらをコンパイルすることができます。 NETアセンブリ。スタンドアロンDLLとして配布できます。
Php 7にはphp iniオプション opcache.file_cache があります。これはバイトコードを特定のフォルダに保存します。で最適化された再利用のために "コンパイル"され、特定のフォルダに保存されているPHPのCLIスクリプトに便利かもしれません。
Opcacheそれはコンパイルされていませんが似たようなものです。
共有メモリに揮発性の、統合されたOPcacheモジュールを含む5.5.xを参照してください。はるかに高いパフォーマンスとphpのダイナミズムの原則はそのままです。
PHPは、多くのプログラムのように実際にはコンパイルされません。あなたはそれを読めなくするためにZendのエンコーダーを使うことができます。