Comment PHP exploite les fichiers phar

php中世界最好的语言
Libérer: 2023-03-23 14:44:02
original
3831 Les gens l'ont consulté

Cette fois, je vais vous montrer comment exploiter les fichiers phar avec PHP. Quelles sont les précautions pour l'exploitation des fichiers phar en PHP Voici des cas pratiques, jetons un coup d'œil.

Cet article décrit 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 de pouvoir les concentrer dans un seul fichier à distribuer et à exécuter. Il existe de nombreux exemples, comme le programme d'installation sur le système d'exploitation Windows, une bibliothèque jquery, etc. . 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.

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

. 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. format d'archive phar.

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 Année réécrite en tant qu'extension en langage C pur, ajout d'ArrayAccess à l'aide de SPL Traversée d'objets 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, test unitaire : 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
Copier après la connexion

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

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

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

如果没有第二行,那么第三行的yunke()将提示未定义,所以可见require一个phar文件时并不是导入了里面所有的文件,而只是导入了入口执行文件而已,但在实际项目中往往在这个入口文件里导入其他需要使用的文件,在本例中入口执行文件为project/index.php

phar文件的提取还原:

我们有时候会好奇phar里面包含的文件源码,这个时候就需要将phar文件还原,如果只是看一看的话可以使用一些ide工具,比如phpstorm 10就能直接打开它,如果需要修改那么就需要提取操作了,为了演示,我们下载一个composer.phar放在服务器目录,在根目录建立一个get.php文件,内容如下:

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

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

补充:

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

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

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

设置别名后可以如下使用:

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

如果在制作phar文件时没有指定别名,也可以在存根文件里面使用Phar::mapPhar('yunke.phar');指定

3、归档文件中有一个存根文件,其实就是一段php执行代码,在制作归档时可以设置,直接执行归档文件时,其实就是执行它,所以它是启动文件;在脚本中包含归档文件时就像包含普通php文件一样包含它并运行,但直接以phar://的方式包含归档中某一个文件时不会执行存根代码, 往往在存根文件里面require包含要运行的其他文件,对存根文件的限制仅为以HALT_COMPILER();结束,默认的存根设计是为在没有phar扩展时能够运行,它提取phar文件内容到一个临时目录再执行,不过从php5.3开始该扩展默认内置启用了

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

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

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

如何用swoole与websocket开发一个聊天室

在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!

É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