ホームページ >バックエンド開発 >PHPチュートリアル >PHP開発アーカイブ形式pharファイルの概念と使い方(例)
この記事では、PHP で開発されたアーカイブ形式の phar ファイルの概念と使用法を主に紹介し、例やその他の概念と操作の実装方法を使用して、アーカイブ形式の phar ファイルの作成、使用、解凍、復元、抽出を詳細に分析します。次へ
この記事の例では、PHP 開発におけるアーカイブ形式の phar ファイルの概念と使用方法について説明します。参考までに皆さんに共有してください。詳細は以下の通りです。
php アプリケーションは複数のファイルで構成されることが多く、それらを 1 つのファイルにまとめて配布して実行できると非常に便利です。これを実現するために、PHP は phar ドキュメント ファイル形式を使用します。この概念は Java の jar から派生していますが、主に Web 環境向けに設計されています。 JAR アーカイブとは異なる PHP の優れた点は、Phar アーカイブは PHP 自体で処理できるため、作成または使用するために追加のツールを使用する必要がなく、PHP スクリプトを使用して作成または抽出するだけです。 pharはPHPとArchiveからなる合成語で、PHPのアーカイブファイルを意味することがわかります。
phar の公式 Web サイトのドキュメントについては、http://php.net/manual/zh/book.phar.php を参照してください。このドキュメントは、
Phar アーカイブ ファイルを補完するものと見なされます。 3 つの形式: tar アーカイブ、zip アーカイブ、phar アーカイブ、最初の 2 つのタイプの実行には Phar 拡張機能サポートをインストールする必要があり、ここでは主に phar アーカイブ形式について説明します。
phar 形式のアーカイブ ファイルは、Phar 拡張機能に依存して直接実行でき、自分で作成した php スクリプトによって生成されます。
Phar 拡張機能は PHP にとって新しい概念ではなく、php5.3 で php に組み込まれており、元々は PHP で書かれて PHP_Archive という名前で、2005 年に PEAR ライブラリに追加されました。この問題に対する純粋な PHP ソリューションは実際には非常に遅かったため、2007 年に純粋な C 言語拡張機能として書き直され、SPL の ArrayAccess オブジェクトを使用した Phar アーカイブの走査のサポートが追加されました。それ以来、Phar アーカイブのパフォーマンスを向上させるために多くの作業が行われてきました。
Phar 拡張子は php ストリーム ラッパーに依存します。これについては、前の記事「PHP ストリーム、ラッパー ラッパーの概念と使用例」を参照してください。
多くの php アプリケーションは、phar 形式で配布され、依存関係を持っています。 Composer、単体テスト: phpunit を作成、実行、抽出、復元する方法を見てみましょう。
phar ファイルの作成:
まず、php.ini の phar.readonly オプションを変更し、先行するセミコロンを削除し、セキュリティ上の理由から、このオプションがデフォルトでオンになっているように変更します。 php.ini で無効 (値が 0 またはオフ) の場合、ユーザー スクリプトでオンまたはオフにすることができます。php.ini でオンになっている場合、ユーザー スクリプトをオフにすることはできません。ここでは例を示すためにオフに設定します。
プロジェクトを作成しましょう。プロジェクトとしてサーバーのルートディレクトリにプロジェクトフォルダーを作成します。ディレクトリ内の構造は次のとおりです。
file -yunek.js -yunke.css lib -lib_a.php template -msg.html index.php Lib.php
ファイルフォルダーには、デモのpharだけが含まれています。さまざまなファイル形式を含めることができます
lib_a.php の内容は次のとおりです:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:23 */ function show(){ echo "l am show()"; }
msg.html の内容は次のとおりです:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>phar</title> </head> <body> <?=$str; ?> </body> </html>
index.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";
Lib .php の内容は以下の通りです:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:20 */ function yunke() { echo "l am yunke()"; }
プロジェクトファイルの作成を開始します。プロジェクトフォルダーと同じディレクトリに yunkeBuild.php を作成して、phar 形式のファイルを生成します。内容は次のとおりです。
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:36 */ //产生一个yunke.phar文件 $phar = new Phar('yunke.phar', 0, 'yunke.phar'); // 添加project里面的所有文件到yunke.phar归档文件 $phar->buildFromDirectory(dirname(__FILE__) . '/project'); //设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php $phar->setDefaultStub('index.php', 'index.php');
次に、ブラウザでこの yunkeBuild.php ファイルにアクセスすると、yunke.phar ファイルが生成されます。 このとき、サーバーのルート ディレクトリ構造は次のとおりです。
これは、phar アーカイブ ファイルを生成する最も簡単なプロセスです。詳細については、公式 Web サイトを参照してください。プロジェクトに単一の実行エントリがない場合、phar アーカイブ ファイルの使用は適切ではないことに注意してください。
phar アーカイブ ファイルの使用法:上記で作成した phar ファイルの使用方法を示すために、サーバーのルート ディレクトリにindex.php ファイルを作成します。内容は次のとおりです。は、index.php ファイルの最初の行のみである場合は、アーカイブ ファイルを使用しない場合とまったく同じように、次のコードを追加します。未定義であることを示すプロンプトが表示されるため、phar ファイルが必要な場合、そのファイル内のすべてのファイルがインポートされるわけではなく、エントリの実行ファイルのみがインポートされることがわかります。ただし、実際のプロジェクトでは、他のファイルをインポートすることがよくあります。この場合、エントリの実行ファイルは project/index.php です
phar ファイルを抽出して復元します:phar に含まれるファイルのソース コードについて疑問に思うことがあります。このとき、phar ファイルを復元する必要があります。確認するだけであれば、phpstorm 10 などの IDE ツールを使用して直接開くことができます。デモンストレーションでは、composer.phar をダウンロードして Server ディレクトリに置き、ルート ディレクトリに次の内容の get.php ファイルを作成します:
project yunkeBuild.php yunke.phar
用浏览器访问这个文件,即可提取出来,以上列子展示了两种提取方式:第二行将建立一个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 サイトの他の関連記事を参照してください。