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

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

小云云
小云云original
2018-01-02 11:25:551495parcourir

Une application PHP est souvent composée de plusieurs fichiers. Il est très pratique de pouvoir les concentrer dans un seul fichier pour les distribuer et les exécuter. Il existe de nombreux exemples de ce type, 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 Géré de manière native, aucun outil supplémentaire n'est nécessaire pour le créer ou l'utiliser, utilisez simplement un script php pour le créer ou l'extraire. phar est un mot composé composé de PHP et Composition de l'archive, vous pouvez voir que cela signifie un fichier d'archive php.

Il existe trois formats de fichiers d'archive phar : 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.

Le fichier d'archive au format phar peut être exécuté 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 en php5.3. Elle a été initialement écrite en PHP et nommée. PHP_Archive a ensuite été ajouté à la bibliothèque PEAR en 2005. Puisque les solutions PHP pures à ce problème sont très lentes en pratique, 2007 Réécrit en tant qu'extension de langage C pur et ajout de la traversée d'objets ArrayAccess à l'aide de SPL Phar Prise en charge de l'archivage. Depuis, de nombreux travaux ont été réalisés pour améliorer les performances des archives Phar.

L'extension Phar dépend du wrapper de flux php. Pour cela, veuillez vous référer à l'article précédent Flux PHP et concepts de wrapper et exemples d'utilisation

. De nombreuses applications PHP sont distribuées et exécutées au format phar. Les plus connues incluent la gestion des dépendances : composer et 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 modifiez la valeur sur off. Pour des raisons de sécurité, cette option est activée par défaut si elle est désactivée dans php.ini (la valeur est 0 ou off). ), alors il peut être activé ou désactivé dans le script utilisateur. S'il est activé dans php.ini, le script utilisateur ne peut pas être désactivé, il est donc désactivé ici pour montrer l'exemple.

Créons un projet. Créez 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. Cela 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 fichier projet est prêt et a commencé à être créé. Créez maintenant un yunkeBuild.php dans le même répertoire que le dossier du projet pour générer un fichier au format phar. Le contenu est le 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__) . '/project');
//设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php
$phar->setDefaultStub('index.php', 'index.php');

. Accédez ensuite à ce fichier yunkeBuild.php dans le navigateur, un fichier yunke.phar sera généré. A ce moment, la structure du répertoire racine du serveur est la suivante :

project
yunkeBuild.php
yunke.phar

. Il s'agit du processus le plus simple pour générer un fichier d'archive phar. Pour plus d'informations, veuillez consulter le site officiel. Il convient de noter ici que si le projet n'a pas une seule entrée d'exécution, il n'est pas approprié d'utiliser le fichier 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 fichier phar 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 de la même manière que 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 indiquera qu'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, il s'agit souvent d'importer d'autres fichiers qui doivent être utilisés dans ce fichier d'entrée. Dans cet exemple, le fichier d'exécution de l'entrée est project/index.php

. Extraction et restauration des fichiers phar :

Parfois, nous sommes curieux de connaître le code source des fichiers contenus dans le phar. À ce stade, nous devons restaurer le fichier phar. Si nous y jetons juste un coup d'œil, nous pouvons utiliser certains outils IDE, tels que phpstorm. 10, vous pouvez l'ouvrir directement. Si vous devez le modifier, vous devez l'extraire pour la 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('composer'); //提取一份原项目文件
$phar->convertToData(Phar::ZIP); //另外再提取一份,和上行二选一即可
Utilisez un navigateur pour accéder à ce fichier afin de l'extraire. L'exemple ci-dessus montre deux méthodes d'extraction : la deuxième ligne créera un répertoire composer et y placera le contenu extrait. La troisième ligne générera un fichier composer.zip, qui pourra être décompressé. Les fichiers de projet extraits et restaurés sont disponibles.

Supplément :

1. Lors du déploiement du fichier phar sur le serveur de production, vous devez ajuster la configuration du serveur pour éviter que le navigateur télécharge directement le fichier phar lors de son accès

2. Vous pouvez définir un alias pour l'archive. L'alias est enregistré de manière permanente dans le fichier d'archive. Il peut faire référence à l'archive avec un nom court, quel que soit l'endroit où le fichier d'archive est stocké dans le système de fichiers :

Après avoir défini l'alias, vous pouvez l'utiliser comme suit :
$phar = new Phar('lib/yunke.phar', 0);
$phar->setAlias ( "yun.phar");

Si vous ne spécifiez pas d'alias lors de la création d'un fichier phar, vous pouvez également utiliser Phar::mapPhar('yunke.phar'); pour spécifier
<?php
require "lib/yunke.phar";
require "phar://yun.phar/Lib.php"; //使用别名访问归档文件
require "phar://lib/yunke.phar/Lib.php"; //当然仍然可以使用这样的方式去引用
dans le fichier stub.

3. Il y a un fichier stub dans le fichier d'archive, qui est en fait un morceau de code d'exécution PHP. Il peut être défini lors de la création de l'archive. Lorsque le fichier d'archive est exécuté directement, il est réellement exécuté, il s'agit donc d'un fichier de démarrage. ; lorsque le fichier d'archive est inclus dans le script, c'est comme l'inclure et l'exécuter comme un fichier php normal, mais le code stub ne sera pas exécuté lorsque vous incluez directement un fichier dans l'archive en utilisant phar://. Le fichier stub nécessite souvent l'exécution d'autres fichiers. La restriction sur le fichier stub est uniquement de se terminer par __HALT_COMPILER();. Le stub par défaut est conçu pour s'exécuter sans l'extension phar. Il extrait le contenu du fichier phar dans un fichier temporaire. Répertoire puis exécuter, mais à partir de php5.3, l'extension est activée par défaut

4. Le fichier phar créé ne peut pas être modifié, les fichiers tels que les fichiers de configuration doivent donc être placés en dehors du fichier d'archive

5. Fonction mapPhar : cette fonction ne doit être appelée que dans le code stub. Lorsque l'alias d'archive n'est pas défini, elle peut être utilisée pour définir l'alias et ouvrir une référence mappée sur le flux phar.

Recommandations associées :

Comment utiliser le format d'archive phar pour le développement PHP

Comment utiliser le package phar en PHP

Tutoriel détaillé sur l'utilisation du package phar en php

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