PHPはサーバーで実行される前にバイトコードにコンパイルされ、そのバイトコードをキャッシュできるので、すべてのWebアクセスでスクリプト全体を再解釈する必要がありません。
しかし、PHPコードを「コンパイル」して、バイナリコードのファイルをアップロードできます。これは、バイトコードインタープリターによって実行されます。
PHPはサーバーで実行される前にバイトコードにコンパイルされ、そのバイトコードをキャッシュできるので、すべてのWebアクセスでスクリプト全体を再解釈する必要がありません。
しかし、PHPコードを「コンパイル」して、バイナリコードのファイルをアップロードできます。これは、バイトコードインタープリターによって実行されます。
回答:
この質問がなされた後、FacebookはHipHop for PHPをリリースしました。これは、おそらくこれまでで最もテストされたPHPコンパイラです(世界で10の最大のWebサイトの1つを実行していたため)。しかしFacebookは、コンパイラーではなく仮想マシンであるHHVMを支持してそれを中止しました。
それ以上に、グーグルPHP compiler
は多くのサードパーティソリューションを生み出します。
bcompiler_write_exe_footer()
マニュアルを参照)短い答えは「いいえ」です。
PHPの現在の実装は、インタプリタ言語の実装です。どの言語も技術的に解釈またはコンパイルできるという事実の理論的側面を主張できますが、現状では、現在の実装ではPHPコードの実行にインタープリターが必要であり、インタープリターが実行環境を管理しています。
コンパイル済みのPHPバイトコードのアップロードに関する質問に答えるには、おそらく可能ですが、PHPインタープリターがそのようなファイルを読み取って操作する方法を実装する必要があります。既存のオペコードキャッシュはすでに存在しているため、多くの報酬を得るタスクのようには見えません。
include
およびで正しく動作しrequire
ますか?たとえば、PHPスクリプトが通常含まれている場合、include( 'controller/' . $controller_name . '.php' )
これは自動的にHipHopで動作しますか?歓声
The short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
理論的なことは何もありません。多くのインタプリタ言語にはコンパイラがあります。つまり、AutoIt / AutoHotkey、またはBASICまでさかのぼります。それらで書かれたプログラムがたくさんあり、スタンドアロンプログラムとして一般に使用するためにコンパイルされています。PHPがコンパイルできないようにする特別なことは何もありません。そのため、多くのコンパイラが存在しますが、AHKとは異なり、テスト済みの公式なコンパイラはありません。ZendGuardはそれほど重要ではありません。
質問が最初に出されてから、その答えは「ノー」から「カインド」に変わった。
http://github.com/facebook/hiphop-php/wiki
PHPのHip Hopは、PHPコードを取得して高度に最適化されたC ++に変換したコンパイラーでした。明らかに、一部の関数はサポートされていません(たとえば、 'explode')。
HipHopの実装方法に関する詳細情報を探しているときにこの質問を見つけ、私は発言すると思いました:)
ただし、2013年以降Facebookはこれを使用せず、コンパイラではないHHVMのために廃止されました:https : //en.wikipedia.org/wiki/HipHop_for_PHP
pre-analyze
PHPコードを使用できます。その結果、バイナリキャッシュファイルを取得します。このファイルと正しいHHVM構成を使用すると、バイトコードのみでWebページを実行でき、ソースファイルは不要になります;)<br>正しく理解できたと思います。
もあります
目指している
- 独自のPHPアプリケーションでスクリプト全体をエンコードするには
- 独自のPHPアプリケーションでいくつかのクラスや関数をエンコードするには
- php.exeを使用せずに、クライアントデスクトップで使用できるphp-gtkアプリケーションの生成を有効にする。
- PHP to Cコンバーターの実現可能性調査を行うには
拡張機能はPECLから入手できます。
PHPスクリプトからバイナリ実行可能ファイルを作成するだけの場合は、質問を非常に正確にしようとしないでください。必要なものが正確にわかっているように見えるためです。その上、ほとんどのPHP開発者は、バイトコードが何であるかについてまったく手掛かりをまったく持っていません。
そうは言っても、答えはYESです。PHPスクリプトをバイナリにコンパイルしたところです。バイナリだけではありません。私はCDEアプリケーション(Wayback Machineへのリンク、元のリンクは今は壊れています)を使用して、すべての依存関係で配布して問題なく実行できるポータブルバイナリに変換しました。
ええと、誰かがZend Guardについて聞いたことがあります。これはまさにこの人が求めていることを実行します。PHPコードを「マシンコード」にエンコード/難読化します。
統合されたOPcacheモジュールを備えた5.5.xを参照してください。共有メモリで揮発性であり、はるかに高いパフォーマンスとphpのダイナミズムの原則はそのままです。
php 7には、特定のフォルダーにバイトコードを保存するphp iniオプションopcache.file_cacheがあります。「コンパイル」され、最適化された再利用のために特定のフォルダーに保存されるphp cliスクリプトで役立ちます。
Opcacheはコンパイルされていませんが、似ています。
多くのプログラムのように、PHPは実際にはコンパイルされません。ただし、Zendのエンコーダーを使用して、読みにくくすることができます。
実際のネイティブバイナリの実行が許可されている場合、これはコンパイラです。
https://github.com/ircmaxell/php-compiler
PHPコンパイラです 書かれです。
PHPコードを独自のVMコードにコンパイルします。このVMコードは、独自のインタープリター(PHPでも作成されていますが、クレイジーではありませんか)で解釈することも、ビットコードに変換することもできます。そして、LLVMコンパイラフレームワーク(clang
およびco)を使用して、このビットコードは、LLVMがサポートする任意のプラットフォーム(今日重要なほとんどすべてのプラットフォーム)のネイティブバイナリにコンパイルできます。静的に実行するか、コードを実行する直前に実行するかを選択できます(JITスタイル)。したがって、このコンパイラーがシステムで動作するための2つの要件は、インストールされているPHPインタープリターとインストールされているclang
コンパイラーのみです。
ネイティブバイナリの実行が許可されていない場合は、上記のコンパイラをインタープリタとして使用して独自のVMコードを解釈させることができますが、PHPエンジンで実行されているPHPインタープリタを実行しているため、これは遅くなります。あなたは「二重解釈」を持っています。