この記事では、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 サイトの他の関連記事を参照してください。

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









