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

想了解PHP归档格式phar文件【创建、使用、解包、恢复、解压】的概念和使用细节?本文云客2009将为大家仔细讲解相关知识和一些PHP归档格式phar文件的代码示例,欢迎阅读指正,先画重点:PHP,归档格式,phar,一起学习.

本文介绍了PHP开发的归档格式phar文件的概念和用法。分享给大家,供大家参考,如下:

一个 php 应用程序通常由多个文件组成。如果它们可以分发并在一个文件中运行,那将非常方便。这方面的例子很多,例如操作系统上的安装程序和库。等等,为了实现这一点,PHP 使用了 Phar 文档文件格式。这个概念来源于java jar,但主要是为PHP web环境设计的。与JAR归档不同的是,Phar归档可以由PHP自己处理,所以不需要使用额外的工具来创建或使用,使用php脚本来创建或解压。 Phar 是由 PHP and 组成的复合词。可以看出是一个php存档文件。

Phar官网请看,本文档可作为官网的补充。

phar 归档文件共有三种格式:tar 归档、zip 归档和 phar 归档。前两次执行需要php来安装Phar扩展支持,使用较少。这里主要讲一下phar归档格式。

phar 格式的归档文件可以直接执行,它的生成依赖于 Phar 扩展名,它是由自己编写的 php 脚本生成的。

Phar 扩展对于 PHP 来说并不是一个新概念。 php5.3 已内置到 php 中。它最初是用 PHP 编写并命名的,然后在 2005 年添加到 PEAR 库中。在实践中,纯PHP解决这个问题的速度很慢,所以在2007年改写为纯C语言扩展,同时增加了对使用SPL的对象遍历Phar档案的支持。从那时起,人们做了很多工作来提高 Phar 档案的性能。

Phar 扩展依赖于 PHP 流包装器。关于这一点,请参考上一篇关于 PHP 流、包装器概念和使用示例的文章。

许多 php 应用程序以 phar 格式分发和运行。比较有名的就是依赖管理:、单元测试:,我们来看看如何创建、运行、提取和恢复。

phar文件的创建:

首先修改phar。 php.ini中的,去掉前面的分号,把值改为off。出于安全原因,此选项默认处于启用状态。如果在 php.ini 中禁用(值为 0 或关闭),则可以在用户脚本中开启或关闭,如果在 php.ini 中开启,则无法关闭用户脚本php文件格式还原,所以这里设置为关闭以显示示例。

让我们创建一个项目。在服务器根目录中创建一个项目文件夹。目录结构如下:

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

文件夹中有两个空的js和css文件,只是为了演示phar可以包含多种文件格式

lib_a.php 的内容如下:

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

msg.html的内容如下:




  
  phar





index.php 的内容如下:

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

Lib.php的内容如下:

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

项目文件准备好,开始创建,现在在文件夹的同级目录下创建一个.php,生成一个phar格式的文件php文件格式还原,内容如下:

buildFromDirectory(dirname(__FILE__) . '/project');
//设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php
$phar->setDefaultStub('index.php', 'index.php');

然后在浏览器中访问这个.php文件,就会生成一个yunke.phar文件。此时服务器根目录结构如下:

project
yunkeBuild.php
yunke.phar

这是生成 phar 存档文件的最简单的过程。欲了解更多信息,请参阅官方网站。这里需要注意的是,如果项目没有单独的执行入口,则不宜使用phar归档文件。

Phar 存档文件的使用:

我们在服务器根目录下创建一个index.php文件来演示如何使用上面创建的phar文件,内容如下:

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

如果index.php文件中只有第一行,则和没有使用归档文件时完全一样,添加如下代码:

require "project/index.php";

如果没有第二行,那么第三行的yunke()会提示,所以当可以看到一个phar文件没有导入里面的所有文件,而只导入了入口执行文件,但是在实际工程中,在这个入口文件中,经常会导入其他需要用到的文件到这个入口文件中。本例中,入口执行文件为/index.php

提取和恢复phar文件:

我们有时对 phar 中包含的文件的源代码感到好奇。这时候就需要恢复phar文件了。如果只是看一下,可以使用一些ide工具。比如10可以直接打开。如果需要修改,则需要 提取操作完成。为了演示,我们下载一个 .phar 并将其放在服务器目录中,并在根目录下创建一个 get.php 文件。内容如下:

extractTo('composer'); //提取一份原项目文件
$phar->convertToData(Phar::ZIP); //另外再提取一份,和上行二选一即可

使用浏览器访问此文件以提取它。上面的例子展示了两种提取方法:第二行将创建一个目录并将提取的内容放入,第三行将生成一个 .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::(‘yunke.phar’);在存根文件中指定。

3、 归档文件中有一个存根文件,它实际上是一段PHP执行代码,可以在归档时设置。存档文件直接执行的时候,是实际执行的,所以是启动文件;在脚本中包含归档文件时,像普通的php文件一样被包含和运行,但是当以phar://的方式直接包含归档中的文件时,不会执行存根代码,其他要运行的文件通常包含在存根文件中。对存根文件的限制仅以 (); 结尾。默认存根设计是在没有 phar 扩展的情况下运行。它将phar文件的内容提取到一个临时目录并执行,但是从php5.3开始​​,扩展默认是内置启用的

4、 制作的phar文件是无法修改的,所以配置文件等文件需要放在归档文件之外。

5、函数:这个函数应该只在存根存根代码中调用。可用于在未设置存档别名时设置别名,打开引用映射到phar流

希望这篇文章能对你的 PHP 编程有所帮助。

相关文章

文章来源:http://moon-script.com/article/329099.html

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享