ホームページ >バックエンド開発 >PHPチュートリアル >PHP開発にアーカイブ形式pharを使用する方法

PHP開発にアーカイブ形式pharを使用する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2017-12-20 18:01:521868ブラウズ

PHP で開発された phar ファイルの概念と使い方を紹介します。PHP アプリケーションは複数のファイルで構成されていることがよくありますが、それらを 1 つのファイルにまとめて配布できれば非常に便利です。ただし、JAR アーカイブとは異なり、Phar アーカイブは PHP 自体で処理できるため、作成または使用するために追加のツールを使用する必要はありません。PHP スクリプトを使用して作成または抽出できます。 pharはPHPとArchiveからなる合成語で、PHPのアーカイブファイルを意味することがわかります。

Phar アーカイブ ファイルには、tar アーカイブ、zip アーカイブ、および phar アーカイブの 3 つの形式があります。最初の 2 種類の実行では、Phar が Phar 拡張機能のサポートをインストールする必要がありますが、ここでは主に phar アーカイブ形式について説明します。

phar 形式のアーカイブ ファイルは、Phar 拡張機能に依存して直接実行でき、自分で作成した php スクリプトによって生成されます。

Phar 拡張機能は PHP にとって新しい概念ではなく、php5.3 で php に組み込まれており、元々は PHP で書かれて PHP_Archive という名前で、2005 年に PEAR ライブラリに追加されました。この問題に対する純粋な PHP ソリューションは実際には非常に遅かったため、2007 年に純粋な C 言語拡張機能として書き直され、同時に SPL オブジェクト トラバーサル Phar アーカイブを使用した ArrayAccess のサポートが追加されました。それ以来、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


ファイルフォルダーには、デモ用に 2 つの空の js ファイルと css ファイルがあります。さまざまなファイル形式を含めることができます

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(&#39;yunke.phar&#39;, 0, &#39;yunke.phar&#39;);
// 添加project里面的所有文件到yunke.phar归档文件
$phar->buildFromDirectory(dirname(FILE) . &#39;/project&#39;);
//设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php
$phar->setDefaultStub(&#39;index.php&#39;, &#39;index.php&#39;);


次に、ブラウザでこの yunkeBuild.php ファイルにアクセスすると、yunke.phar ファイルが生成されます。この時点で、サーバーのルート ディレクトリ構造は次のとおりです。

project
yunkeBuild.php
yunke.phar


これは最も単純なプロセスです。詳細については、公式 Web サイトを参照してください。ここで注意する必要があるのは、プロジェクトに単一の実行エントリがない場合、phar アーカイブ ファイルの使用は適切ではないということです。 phar アーカイブ ファイル:

上記で作成した phar ファイルの使用方法を示すために、サーバーのルート ディレクトリにindex.php ファイルを作成します。内容は次のとおりです:

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/8
 * Time: 9:33
 */
require "yunke.phar";
require "phar://yunke.phar/Lib.php";
yunke();

インデックスに最初の行しかない場合.php ファイルを開き、アーカイブ ファイルを使用しない場合とまったく同じ次のコードを追加します。

require "project/index.php";

2 行目がない場合、3 行目の yunke() は未定義であることを示すプロンプトを表示します。 phar ファイルが必要な場合、そのファイル内のすべてのファイルがインポートされるわけではなく、エントリ実行ファイルのみがインポートされることがわかります。ただし、実際のプロジェクトでは、使用する必要がある他のファイルがこのエントリ ファイルにインポートされることがよくあります。この場合、エントリの実行ファイルは project/index.php です

phar ファイルを抽出して復元します。

phar に含まれるファイルのソース コードが気になることがあります。このとき、phar ファイルを復元する必要があります。その場合は、phpstorm 10 などの IDE ツールを使用して直接開くことができます。変更する必要がある場合は、デモンストレーションのために、composer.phar をダウンロードして配置します。サーバー ディレクトリに get.php ファイルを作成します。内容は次のとおりです。

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/9
 * Time: 19:02
 */
$phar = new Phar(&#39;composer.phar&#39;);
$phar->extractTo(&#39;composer&#39;); //提取一份原项目文件
$phar->convertToData(Phar::ZIP); //另外再提取一份,和上行二选一即可

上の例では、2 つの抽出方法を示しています。 2 行目は、composer ディレクトリを作成し、抽出したコンテンツをそこに置きます。3 行目は、composer.zip ファイルを生成し、それを解凍して、抽出および復元されたプロジェクト ファイルを取得します。


追加:

1. phar ファイルを実稼働サーバーにデプロイする場合、アクセス時にブラウザーが phar ファイルを直接ダウンロードしないようにサーバー構成を調整する必要があります。エイリアスはアーカイブ ファイルに永続的に保存され、アーカイブがファイル システムのどこに保存されているかに関係なく、短い名前でアーカイブを参照できます。

$phar = new Phar(&#39;lib/yunke.phar&#39;, 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:// を直接使用します。アーカイブ内のファイルがインクルードされている場合、スタブ コードは実行されません。多くの場合、スタブ ファイルには他のファイルを実行する必要があります。スタブ ファイルは HALT_COMPILER(); で終わるだけです。デフォルトのスタブ設計は、phar 拡張子が使用されている場合に実行できます。phar ファイルの内容を一時ディレクトリに抽出して実行します。ただし、php5.3 からは、拡張機能が組み込まれており、デフォルトで有効になります

4. 生成された phar ファイルは変更できないため、設定ファイルなどのファイルは、アーカイブ ファイルの外に配置される必要があります

5. mapPhar 関数: この関数は、アーカイブ エイリアスが設定されていない場合にのみ、エイリアスを設定し、phar ストリームにマップされた参照を開くために使用できます


これらの事例を読んだ後は、その方法を習得したことになります。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。

関連書籍:

大規模な Web サイトのトラフィックと高い同時実行性の問題を PHP がどのように解決するか

AJAX の原則と CORS クロスドメイン メソッド

JavaScript データ型と git 使用法コードの詳細な説明

以上がPHP開発にアーカイブ形式pharを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。