Heim >Backend-Entwicklung >PHP-Tutorial >Konzept und Verwendung der Phar-Datei im PHP-Entwicklungsarchivformat (Beispiel)
Dieser Artikel stellt hauptsächlich das Konzept und die Verwendung von Phar-Dateien im Archivformat vor, die in PHP entwickelt wurden. Er analysiert die Erstellung, Verwendung, Entpackung, Wiederherstellung und Extraktion von Phar-Dateien im Archivformat anhand von Beispielen und anderen Konzepten und Methoden zur Betriebsimplementierung in Bedarf Sie können auf Folgendes verweisen
Dieser Artikel erläutert das Konzept und die Verwendung der Phar-Datei im Archivformat in der PHP-Entwicklung. Teilen Sie es als Referenz mit allen. Die Details sind wie folgt:
Eine PHP-Anwendung besteht oft aus mehreren Dateien. Es ist sehr praktisch, wenn sie zur Verteilung und zum Betrieb in einer Datei zusammengefasst werden können include Es gibt viele davon, wie zum Beispiel das Installationsprogramm auf dem Windows-Betriebssystem, eine JQuery-Bibliothek usw. Um dies zu erreichen, verwendet PHP das Phar-Dokumentdateiformat. Dieses Konzept ist vom JAR von Java abgeleitet, ist es aber hauptsächlich Im Gegensatz zu JAR-Archiven können Phar-Archive von PHP selbst verarbeitet werden, sodass keine zusätzlichen Tools zum Erstellen oder Verwenden erforderlich sind. Sie können sie mithilfe von PHP-Skripten erstellen oder extrahieren. phar ist ein zusammengesetztes Wort aus PHP und Archive. Es ist ersichtlich, dass es PHP-Archivdatei bedeutet.
Die offizielle Website-Dokumentation von phar finden Sie unter http://php.net/manual/zh/book.phar.php. Dieses Dokument kann als Ergänzung zur offiziellen Website-Dokumentation angesehen werden
Phar-Archivdateien haben drei Formate: TAR-Archiv, Zip-Archiv und Phar-Archiv Die ersten beiden Arten der Ausführung erfordern die Installation der Phar-Erweiterungsunterstützung und werden hier hauptsächlich verwendet Phar-Archivformat.
Archivdateien im Phar-Format können direkt ausgeführt werden. Die Generierung basiert auf der Phar-Erweiterung und wird durch ein von Ihnen selbst geschriebenes PHP-Skript generiert.
Die Phar-Erweiterung ist kein neues Konzept für PHP. Sie wurde ursprünglich in PHP geschrieben und hieß PHP_Archive und wurde dann 2005 zur PEAR-Bibliothek hinzugefügt. Da reine PHP-Lösungen für dieses Problem in der Praxis sehr langsam waren, wurde es 2007 als reine C-Spracherweiterung umgeschrieben und Unterstützung für das Durchlaufen von Phar-Archiven mithilfe der ArrayAccess-Objekte von SPL hinzugefügt. Seitdem wurde viel daran gearbeitet, die Leistung der Phar-Archive zu verbessern.
Phar-Erweiterung hängt vom PHP-Stream-Wrapper ab. Lesen Sie hierzu bitte den vorherigen Artikel PHP-Streams, Wrapper-Wrapper-Konzepte und Anwendungsbeispiele
Viele PHP-Anwendungen werden im Phar-Format verteilt und ausgeführt. das berühmte Abhängigkeitsmanagement: Composer, Unit-Tests: PHPUnit, schauen wir uns an, wie man erstellt, ausführt, extrahiert und wiederherstellt.
Erstellung der Phar-Datei:
Ändern Sie zunächst die Option phar.readonly in php.ini, entfernen Sie das vorangehende Semikolon und ändern Sie den Wert aus Sicherheitsgründen in „off“. Der Grund dafür ist, dass diese Option standardmäßig in php.ini deaktiviert ist (der Wert ist 0 oder aus), sie kann in Benutzerskripten aktiviert oder deaktiviert werden Skripte können nicht deaktiviert werden, daher ist sie hier deaktiviert, um das Beispiel zu zeigen.
Lassen Sie uns einen Projektordner im Stammverzeichnis des Servers als Projekt erstellen. Die Struktur im Verzeichnis ist wie folgt:
file -yunek.js -yunke.css lib -lib_a.php template -msg.html index.php Lib.php
wobei der Dateiordner zwei js- und css-Dateien mit leerem Inhalt enthält. Dies zeigt nur, dass phar mehrere Dateiformate enthalten kann.
lib_a.php-Inhalt lautet wie folgt:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:23 */ function show(){ echo "l am show()"; }
Der Inhalt von msg.html lautet wie folgt:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>phar</title> </head> <body> <?=$str; ?> </body> </html>
Der Inhalt von index.php lautet wie folgt:
<?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";
Der Inhalt von Lib.php lautet wie folgt:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/10 * Time: 9:20 */ function yunke() { echo "l am yunke()"; }
Die Projektdatei ist fertig, mit der Erstellung beginnen, jetzt erstellen Ein yunkeBuild im Verzeichnis auf derselben Ebene des Projektordners .php, der zum Generieren von Dateien im Phar-Format verwendet wird. Der Inhalt lautet wie folgt:
<?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');
Greifen Sie dann auf diesen yunkeBuild zu .php-Datei im Browser, eine yunke.phar-Datei wird generiert, die Server-Stammverzeichnisstruktur ist wie folgt:
project yunkeBuild.php yunke.phar
Dies ist der einfachste Vorgang Generieren Sie eine Phar-Archivdatei. Weitere Informationen finden Sie auf der offiziellen Website. Es ist zu beachten, dass die Verwendung von Phar-Archivdateien nicht geeignet ist, wenn das Projekt keinen einzigen Ausführungseintrag hat >Verwendung von Phar-Archivdateien:
Wir erstellen einen Index im Server-Stammverzeichnis, um zu demonstrieren, wie die oben erstellte Phar-Datei mit folgendem Inhalt verwendet wird:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/8 * Time: 9:33 */ require "yunke.phar"; require "phar://yunke.phar/Lib.php"; yunke();Wenn es nur die erste Zeile in der Datei index.php gibt, dann verwenden Sie keine Archivierung. Fügen Sie beim Hinzufügen der Datei genau den folgenden Code hinzu:
require "project/index.php";Wenn keine zweite Zeile vorhanden ist, zeigt yunke() in der dritten Zeile an, dass sie nicht definiert ist, sodass die Anforderung sichtbar ist. Eine Phar-Datei importiert nicht alle Dateien darin, aber nur die Eintragsausführungsdatei. In tatsächlichen Projekten werden jedoch häufig andere Dateien, die verwendet werden müssen, in diese Eintragsdatei importiert. In diesem Beispiel ist die Eintragsausführungsdatei project/index.php
Extrahierung und Wiederherstellung von Phar-Dateien:
Manchmal wundern wir uns über den Quellcode der in Phar enthaltenen Dateien. Wenn ja, müssen wir die Phar-Datei wiederherstellen Um einen Blick darauf zu werfen, können Sie es mit einigen IDE-Tools wie PHPstorm 10 direkt öffnen. Wenn Sie es ändern müssen, müssen Sie es extrahieren. Zur Demonstration laden wir eine Composer.phar herunter und legen sie auf dem Server ab Verzeichnis und erstellen Sie eine get-Datei im Stammverzeichnis. Der Inhalt lautet wie folgt:
<?php /** * Created by yunke. * User: yunke * Date: 2017/2/9 * Time: 19:02 */ $phar = new Phar('composer.phar'); $phar->extractTo('composer'); //提取一份原项目文件 $phar->convertToData(Phar::ZIP); //另外再提取一份,和上行二选一即可
用浏览器访问这个文件,即可提取出来,以上列子展示了两种提取方式:第二行将建立一个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流
相关推荐:
Das obige ist der detaillierte Inhalt vonKonzept und Verwendung der Phar-Datei im PHP-Entwicklungsarchivformat (Beispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!