PHP アプリケーションは複数のファイルで構成されることが多く、それらを 1 つのファイルにまとめて配布して実行できると非常に便利です。Windows オペレーティング システム上のインストール プログラム、JQuery ライブラリなど、そのような例は数多くあります。これを実現するために、PHP は phar ドキュメント ファイル形式を使用します。この概念は Java の jar から派生したものですが、主に のために設計されています。 PHP の Web 環境では、JAR アーカイブとは異なり、Phar アーカイブは ネイティブに処理されるため、作成または使用するために追加のツールは必要ありません。PHP スクリプトを使用して作成または抽出するだけです。 pharはPHPと アーカイブ構成とは、php アーカイブ ファイルを意味することがわかります。
phar の公式 Web サイトのドキュメントについては、http://php.net/manual/zh/book.phar.php を参照してください。このドキュメントは、公式 Web サイトのドキュメントを補完するものと見なされます
。 Phar アーカイブ ファイルには、tar アーカイブ、zip アーカイブ、および phar アーカイブの 3 つの形式があります。最初の 2 つのタイプの実行では、Phar が Phar 拡張機能サポートをインストールする必要がありますが、ここでは主に phar アーカイブ形式について説明します。
phar 形式のアーカイブ ファイルは、Phar 拡張機能に依存して直接実行でき、自分で作成した php スクリプトによって生成されます。
Phar 拡張機能は PHP にとって新しい概念ではなく、PHP5.3 で PHP に組み込まれました。元々は PHP で作成され、名前が付けられました。 その後、2005 年に PHP_Archive が PEAR ライブラリに追加されました。この問題に対する純粋な PHP ソリューションは実際には非常に遅いため、2007 純粋な C 言語拡張機能として書き直され、SPL Phar を使用した ArrayAccess オブジェクト トラバーサルが追加されました。 アーカイブのサポート。それ以来、Phar アーカイブのパフォーマンスを向上させるために多くの作業が行われてきました。
Phar 拡張機能は PHP ストリーム ラッパーに依存します。これについては、PHP ストリームとラッパー ラッパーの概念と使用例の詳細な説明については、前の記事を参照してください。 多くの PHP アプリケーションは phar 形式で配布され、実行されます。有名なものとしては、依存関係管理 (composer) や単体テスト (phpunit) の作成、実行、抽出、復元の方法を見てみましょう。
pharファイルの作成:
まず、php.ini の phar.readonly オプションを変更し、先行するセミコロンを削除し、値を off に変更します。php.ini で無効になっている場合、このオプションはデフォルトで on になります (値は 0 または off)。 ) を使用すると、php.ini でオンまたはオフにできます。そのため、ここでは例を示すためにオフに設定します。
プロジェクトを作成しましょう。 サーバーのルートディレクトリにプロジェクトフォルダーを作成します。 ディレクトリ内の構造は次のとおりです。 ファイルフォルダーには、中身が空の 2 つの js ファイルと css ファイルがあります。これは、phar に複数のファイル形式を含めることができることを示しているだけです
。 lib_a.php の内容は次のとおりです:
file -yunek.js -yunke.css lib -lib_a.php template -msg.html index.php Lib.php
msg.html の内容は次のとおりです:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:23 */ function show(){ echo "l am show()"; }
Index.php の内容は以下の通りです:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>phar</title> </head> <body> <?=$str; ?> </body> </html>
Lib.phpの内容は以下の通りです:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:17 */ require "lib/lib_a.php"; show(); $str = isset($_GET["str"]) ? $_GET["str"] : "hello world"; include "template/msg.html";
プロジェクト ファイルの準備ができたので、作成を開始します。 プロジェクト フォルダーと同じディレクトリに、phar 形式のファイルを生成するために使用される yunkeBuild.php を作成します。内容は次のとおりです。
次に、ブラウザでこの yunkeBuild.php ファイルにアクセスすると、yunke.phar ファイルが生成されます。このとき、サーバーのルート ディレクトリ構造は次のようになります。
これは、phar アーカイブ ファイルを生成する最も簡単なプロセスです。詳細については、公式 Web サイトを参照してください。プロジェクトに単一の実行エントリがない場合、phar アーカイブ ファイルの使用は適切ではないことに注意してください。
上記で作成した phar ファイルの使用方法を示すために、サーバーのルート ディレクトリにindex.php ファイルを作成します。内容は次のとおりです。
Index.php ファイルに最初の行しかない場合は、アーカイブ ファイルを使用しない場合とまったく同じように、次のコードを追加します。
2 行目がない場合、3 行目の yunke() は未定義であることを示すプロンプトを表示します。そのため、phar ファイルが必要な場合、そのファイル内のすべてのファイルがインポートされるわけではなく、エントリの実行ファイルのみがインポートされることがわかります。ただし、実際のプロジェクトでは、このエントリ ファイルで使用する必要がある他のファイルをインポートすることがよくあります。この例では、エントリの実行ファイルは project/index.php
phar ファイルの抽出と復元:
phar に含まれるファイルのソース コードが気になる場合があります。このとき、phpstorm などの IDE ツールを使用して、phar ファイルを復元することができます。 10 で直接開くことができます。変更する必要がある場合は、デモンストレーションのために、composer.phar をダウンロードしてサーバー ディレクトリに置き、ルート ディレクトリに get.php ファイルを作成します。以下の内容:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:20 */ function yunke() { echo "l am yunke()"; }
用浏览器访问这个文件,即可提取出来,以上列子展示了两种提取方式:第二行将建立一个composer目录,并将提取出来的内容放入,第三行将产生一个composer.zip文件,解压即可得到提取还原的项目文件。
补充:
1、在部署phar文件到生产服务器时需要调整服务器的配置,避免当访问时浏览器直接下载phar文件
2、可以为归档设置别名,别名保存在归档文件中永久保存,它可以用一个简短的名字引用归档,而不管归档文件在文件系统中存储在那里,设置别名:
$phar = new Phar('lib/yunke.phar', 0); $phar->setAlias ( "yun.phar");
设置别名后可以如下使用:
<?php require "lib/yunke.phar"; require "phar://yun.phar/Lib.php"; //使用别名访问归档文件 require "phar://lib/yunke.phar/Lib.php"; //当然仍然可以使用这样的方式去引用
如果在制作phar文件时没有指定别名,也可以在存根文件里面使用Phar::mapPhar('yunke.phar');
指定
3、归档文件中有一个存根文件,其实就是一段php执行代码,在制作归档时可以设置,直接执行归档文件时,其实就是执行它,所以它是启动文件;在脚本中包含归档文件时就像包含普通php文件一样包含它并运行,但直接以phar://的方式包含归档中某一个文件时不会执行存根代码,
往往在存根文件里面require包含要运行的其他文件,对存根文件的限制仅为以__HALT_COMPILER();
结束,默认的存根设计是为在没有phar扩展时能够运行,它提取phar文件内容到一个临时目录再执行,不过从php5.3开始该扩展默认内置启用了
4、制作的phar文件不能被改动,因此配置文件之类的文件需要另外放置在归档文件外面
5、mapPhar函数:这个函数只应该在stub存根代码中调用,在没有设置归档别名的时候可以用来设置别名,打开一个引用映射到phar流。
大家学会了吗?
相关推荐:
以上がPHP開発用のアーカイブ形式pharファイルの概念と使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。