Maison  >  Article  >  développement back-end  >  Concept et utilisation du fichier phar au format d'archive de développement PHP (exemple)

Concept et utilisation du fichier phar au format d'archive de développement PHP (exemple)

墨辰丷
墨辰丷original
2018-05-17 11:13:121285parcourir

Cet article présente principalement le concept et l'utilisation des fichiers phar au format d'archive développés en PHP. Il analyse en détail la création, l'utilisation, le déballage, la restauration et l'extraction des fichiers phar au format d'archive avec des exemples et d'autres concepts et méthodes de mise en œuvre des opérations. dans le besoin Vous pouvez vous référer à ce qui suit

Cet article explique le concept et l'utilisation du fichier phar au format d'archive dans le développement PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Une application php est souvent composée de plusieurs fichiers. Il est très pratique qu'ils puissent être concentrés dans un seul fichier pour la distribution et le fonctionnement. include Il en existe de nombreux, comme le programme d'installation sur le système d'exploitation windows, une bibliothèque jquery, etc. Pour y parvenir, PHP utilise le format de fichier de document phar. Ce concept est dérivé du jar de java, mais il est principalement. conçu pour l'environnement Web de PHP Contrairement aux archives JAR, les archives Phar peuvent être traitées par PHP lui-même, il n'est donc pas nécessaire d'utiliser des outils supplémentaires pour les créer ou les utiliser, elles peuvent être créées ou extraites à l'aide de scripts PHP. phar est un mot composé composé de PHP et Archive. On peut voir qu'il signifie fichier d'archive PHP.

Pour la documentation du site officiel de phar, veuillez consulter http://php.net/manual/zh/book.phar.php Ce document peut être considéré comme complémentaire à la documentation du site officiel

<.>

Les fichiers d'archive Phar ont trois formats : l'archive tar, l'archive zip et l'archive phar Les deux premiers types d'exécution nécessitent que Phar installe le support de l'extension Phar et sont rarement utilisés ici. format d'archive phar.

Les fichiers d'archive au format Phar peuvent être exécutés directement. Sa génération repose sur l'extension Phar et est générée par un script php écrit par vous-même.

L'extension Phar n'est pas un concept nouveau pour PHP. Elle a été intégrée à PHP dans php5.3. Elle a été initialement écrite en PHP et nommée PHP_Archive, puis a été ajoutée à la bibliothèque PEAR en 2005. Étant donné que les solutions PHP pures à ce problème étaient très lentes en pratique, elles ont été réécrites en 2007 en tant qu'extension du langage C pur et la prise en charge de la traversée des archives Phar à l'aide des objets ArrayAccess de SPL a été ajoutée. Depuis, de nombreux travaux ont été réalisés pour améliorer les performances des archives Phar.

L'extension Phar s'appuie sur le wrapper de flux php. Pour cela, veuillez vous référer à l'article précédent PHP Streams, concepts de wrapper et exemples d'utilisation

De nombreuses applications php sont distribuées au format phar Et en cours d'exécution, la fameuse gestion des dépendances : composer, les tests unitaires : phpunit, voyons comment créer, exécuter, extraire et restaurer.

Création du fichier phar :

Modifiez d'abord l'option phar.readonly dans php.ini, supprimez le point-virgule précédent et changez la valeur en off pour des raisons de sécurité. la raison est que cette option est activée par défaut. Si elle est désactivée dans php.ini (la valeur est 0 ou désactivée), elle peut être activée ou désactivée dans le script utilisateur. Si elle est activée dans php.ini, le Le script utilisateur ne peut pas être désactivé, il est donc désactivé ici pour montrer l'exemple.

Créons un projet. Créons un dossier de projet dans le répertoire racine du serveur en tant que projet. La structure du répertoire est la suivante :

file
  -yunek.js
  -yunke.css
lib
  -lib_a.php
template
  -msg.html
index.php
Lib.php

.

Le dossier de fichiers contient deux fichiers js et css avec un contenu vide. Il démontre seulement que phar peut contenir plusieurs formats de fichiers

le contenu de lib_a.php est le suivant :

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:23
 */
function show(){
  echo "l am show()";
}

le contenu de msg.html est le suivant :

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>phar</title>
</head>
<body>
<?=$str; ?>
</body>
</html>

le contenu de index.php est le suivant :

<?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";

Le contenu de Lib.php est le suivant :

<?php
/**
 * Created by yunke.
 * User: yunke
 * Date: 2017/2/10
 * Time: 9:20
 */
function yunke()
{
  echo "l am yunke()";
}

Le projet Le fichier est prêt, commencez à créer, maintenant Créez un yunkeBuild.php dans le répertoire au même niveau que le dossier du projet pour générer un fichier au format phar avec le contenu suivant :

<?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;);

puis accédez-y dans le navigateur. Ce fichier yunkeBuild.php générera un fichier yunke.phar A ce moment, la structure du répertoire racine du serveur est la suivante :

project
yunkeBuild.php
yunke.phar

Il s'agit de générer un fichier d'archive phar. Le processus le plus simple, veuillez consulter le site officiel pour plus d'informations. Il convient de noter ici que si le projet n'a pas une seule entrée d'exécution, c'est le cas. n'est pas approprié d'utiliser les fichiers d'archive phar

Utilisation des fichiers d'archive phar :

Nous créons un fichier index.php dans le répertoire racine du serveur pour montrer comment utiliser le phar fichier créé ci-dessus. Le contenu est le suivant :

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

S'il n'y a que la première ligne dans le fichier index.php, alors ajoutez le code suivant. exactement comme lorsque vous n'utilisez pas de fichier d'archive :

require "project/index.php";

S'il n'y a pas de deuxième ligne, alors yunke() sur la troisième ligne le demandera il n'est pas défini, on peut donc voir que lorsqu'on demande un fichier phar, tous les fichiers qu'il contient ne sont pas importés, mais seul le fichier d'exécution d'entrée est importé. Cependant, dans les projets réels, ce fichier d'entrée est souvent importé d'autres fichiers qui en ont besoin. à utiliser. Dans ce cas, le fichier d'exécution de l'entrée est project/index.php

Extraire et restaurer le fichier phar :

On est parfois curieux de connaître la source du fichier. Le code contenu dans phar doit être restauré à ce moment-là. Si vous y jetez simplement un coup d'œil, vous pouvez utiliser certains outils IDE, tels que phpstorm 10, pour l'ouvrir directement. Si vous devez le modifier, vous devez l'extraire pour une démonstration. , Nous téléchargeons un composer.phar et le plaçons dans le répertoire du serveur, et créons un fichier get.php dans le répertoire racine avec le contenu suivant :

<?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); //另外再提取一份,和上行二选一即可

用浏览器访问这个文件,即可提取出来,以上列子展示了两种提取方式:第二行将建立一个composer目录,并将提取出来的内容放入,第三行将产生一个composer.zip文件,解压即可得到提取还原的项目文件。

补充:

1、在部署phar文件到生产服务器时需要调整服务器的配置,避免当访问时浏览器直接下载phar文件

2、可以为归档设置别名,别名保存在归档文件中永久保存,它可以用一个简短的名字引用归档,而不管归档文件在文件系统中存储在那里,设置别名:

$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://的方式包含归档中某一个文件时不会执行存根代码, 往往在存根文件里面require包含要运行的其他文件,对存根文件的限制仅为以__HALT_COMPILER();结束,默认的存根设计是为在没有phar扩展时能够运行,它提取phar文件内容到一个临时目录再执行,不过从php5.3开始该扩展默认内置启用了

4、制作的phar文件不能被改动,因此配置文件之类的文件需要另外放置在归档文件外面

5、mapPhar函数:这个函数只应该在stub存根代码中调用,在没有设置归档别名的时候可以用来设置别名,打开一个引用映射到phar流

相关推荐:

PHP如何操作phar文件

phar扩展来节省空间 的方法

PHP开发之归档格式phar文件概念与用法

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn