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

php中世界最好的语言
Libérer: 2023-03-18 07:40:01
original
1845 Les gens l'ont consulté

Laissez-moi vous présenter le concept et l'utilisation des fichiers phar développés par PHP. Nous savons qu'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. comme ça Il y en a beaucoup, mais ils sont principalement conçus 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. en utilisant un script PHP. phar est un mot composé composé de PHP et Archive. On peut voir qu'il signifie fichier d'archive PHP.

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.

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 dans la pratique, elles ont été réécrites en 2007 en tant qu'extension du langage C pur, tandis que la prise en charge d'ArrayAccess Traversée d'objets Les archives Phar utilisant SPL ont été ajoutées. 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 modifiez la valeur sur off. Pour des raisons de sécurité, cette option est activée. par défaut, s'il est désactivé dans php.ini (la valeur est 0 ou désactivé), alors il peut être activé ou désactivé dans le script utilisateur. S'il est activé dans php.ini, alors le script utilisateur ne peut pas être activé. off, il est donc réglé ici sur off pour montrer des exemples.

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
Copier après la connexion


. où fichier Le dossier 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()";
}
Copier après la connexion


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>
Copier après la connexion


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";
Copier après la connexion


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()";
}
Copier après la connexion


Le fichier du projet est prêt, commencez à créer un. yunkeBuild.php dans le répertoire de même niveau du 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;);
Copier après la connexion


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

project
yunkeBuild.php
yunke.phar
Copier après la connexion


C'est le processus le plus simple à générer. un fichier d'archive phar. Pour plus d'informations, veuillez consulter le site officiel. Ce qui doit être noté ici, c'est que si le projet n'a pas une seule entrée d'exécution, il n'est pas approprié d'utiliser des fichiers d'archive phar

Utiliser. 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 comme suit :

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


S'il n'y a que la première ligne dans le fichier index.php, alors ajouter le code suivant est exactement le même que lorsque le fichier archive n'est pas utilisé :

require "project/index.php";
Copier après la connexion


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 seulement Le fichier d'exécution d'entrée est simplement importé, mais dans les projets réels, d'autres fichiers qui doivent être utilisés sont souvent importés dans ce fichier d'entrée. Dans ce cas, le fichier d'exécution d'entrée est l'extraction et la restauration du projet/index.php.

fichier 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. nous pouvons utiliser certains outils IDE, comme phpstorm 10 pour l'ouvrir directement. Si nécessaire, la modification nécessite une opération d'extraction, 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. 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); //另外再提取一份,和上行二选一即可
Copier après la connexion


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. composer et y placer le contenu extrait, et la troisième ligne générera un fichier composer.zip, décompressé pour obtenir les fichiers de projet extraits et restaurés.

Supplément :

1. Lors du déploiement de fichiers 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 l'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 :

.
$phar = new Phar(&#39;lib/yunke.phar&#39;, 0);
$phar->setAlias ( "yun.phar");
Copier après la connexion


Après avoir défini l'alias, vous pouvez l'utiliser comme suit :

<?php
require "lib/yunke.phar";
require "phar://yun.phar/Lib.php"; //使用别名访问归档文件
require "phar://lib/yunke.phar/Lib.php"; //当然仍然可以使用这样的方式去引用
Copier après la connexion


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'); dans le fichier stub pour spécifier

3. Il existe un stub fichier dans le fichier d'archive. En fait, c'est un morceau de code d'exécution PHP qui peut être défini lors de la création d'une archive. Lorsque le fichier d'archive est exécuté directement, il s'agit donc d'un fichier de démarrage lorsque le fichier d'archive est exécuté. est inclus dans le script, il est inclus et exécuté comme un fichier PHP normal, mais lorsqu'un fichier de l'archive est directement inclus dans phar://, le code stub ne sera pas exécuté. Le fichier stub nécessite souvent d'autres fichiers. être exécuté. La restriction sur le fichier stub est uniquement de se terminer par HALT_COMPILER();, qui est la valeur par défaut. Le stub est conçu pour s'exécuter sans l'extension phar. Il extrait le contenu du fichier phar dans un répertoire temporaire, puis l'exécute. . Cependant, à 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 et peut être utilisée pour définir l'alias lorsque l'alias d'archive n'est pas défini, ouvrez une référence mappée au flux phar

.

Je pense que vous maîtrisez la méthode après avoir lu ces cas. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web PHP chinois !

Lecture connexe :

Comment PHP résout le problème du trafic important sur les sites Web et de la concurrence élevée

Principes AJAX et croisement CORS -méthodes de domaine

Explication détaillée des types de données javascript et du code d'utilisation de git

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!