PHP开发之归档格式phar文件概念与用法详解【创建
本文将深入PHP开发中的归档格式phar文件的概念与用法。通过结合实例,我们将详细phar文件的创建、使用、解包还原提取等操作流程。对于对PHP开发和phar文件感兴趣的朋友们,本文是一个很好的参考。
在PHP开发中,一个应用程序往往由多个文件构成。为了方便分发和运行,我们可以将这些文件集中为一个单独的文件,即phar文件。这种归档格式的概念源自Java的jar文件,但在设计之初,phar文件主要面向PHP的Web环境。与JAR归档不同,Phar归档可以由PHP本身处理,无需额外的工具进行创建或使用。Phar是一个由PHP和Archive组成的合成词,意味着它是PHP的归档文件。
关于phar文件的更多详细信息,可以参考官方网站提供的文档。而本文的主要目的是为读者们提供一种与官网文档互为补充的学习资源。
在讲述phar归档文件之前,我们需要了解它的三种格式:tar归档、zip归档和phar归档。前两种格式的执行需要php安装Phar扩展支持,日常生活中使用频率较低。本文将重点介绍phar归档格式。
phar格式归档文件可以直接执行,它的产生依赖于Phar扩展,可以由我们自行编写的php脚本生成。值得一提的是,Phar扩展并不是PHP的新概念。在php5.3版本中,它已内建于php中,最初使用PHP编写并命名为PHP_Archive。后来,由于纯PHP解决方案在实际中运行缓慢,它在2007年被重新编写为纯C语言扩展。从那时起,人们投入了大量努力来改善Phar归档的性能。
为了使用Phar归档文件,我们需要依赖于php流包装器。关于这一点,您可以参考之前提到的一篇文章以获取更详细的信息。在实际应用中,许多PHP应用程序都是以phar格式进行分发和运行的,例如依赖管理工具poser和单元测试工具phpunit等。接下来,我们将展示如何创建、运行和提取还原phar文件。
构建项目文件夹: Phar 归档文件的魅力
在服务器根目录中,我们创建了一个名为 "project" 的项目文件夹。这个文件夹内的结构如下:
文件夹分布:
file:包含两个空文件,yunek.js 和 yunke.css,主要展示 Phar 文件可以包含多种文件格式。
lib:包含 lib_a.php 文件,这是我们的 PHP 脚本文件。
template:包含 msg.html 文件,一个 HTML 模板文件。
index.php 和 Lib.php 是我们的项目主要 PHP 文件。
让我们仔细看看这些文件的内容:
lib_a.php 文件包含一个名为 show() 的函数,它打印出 "l am show()"。而 msg.html 是一个简单的 HTML 文件,包含一个 PHP 变量 $str 的值。index.php 文件则引入了 lib_a.php 文件,调用其 show() 函数,并设置了一个 GET 参数 "str"。Lib.php 文件则定义了一个名为 yunke() 的函数,打印出 "l am yunke()"。
接下来,我们的任务是创建一个 Phar 归档文件。在 project 文件夹同级目录创建一个名为 yunkeBuild.php 的文件,用于生成 Phar 格式的文件。这个文件的内容主要是使用 Phar 类来构建一个名为 yunke.phar 的归档文件,并将 project 文件夹内的所有文件添加到这个归档文件中。同时设置了执行时的入口文件为 index.php。
在浏览器中访问这个 yunkeBuild.php 文件后,将生成一个 yunke.phar 文件,此时服务器根目录结构如上所述。
这就是创建 Phar 归档文件的基本过程。关于 Phar 归档文件的使用,我们在服务器根目录创建一个 index.php 文件来演示如何使用上面创建的 Phar 文件。这个文件首先引入 yunke.phar,然后引入其中的 Lib.php 文件,并调用其定义的 yunke() 函数。值得注意的是,只引入 Phar 文件并不会导入其中所有的文件,而只是导入了入口执行文件。在本例中,入口执行文件为 project/index.php。
有时候我们可能需要提取 Phar 文件的内容以查看或修改。这可以通过使用 PHP 的 Phar 类来完成。在服务器根目录创建一个 get.php 文件,用于提取 poser.phar 文件的内容。这个文件首先创建一个 Phar 对象来代表 poser.phar 文件,然后使用 extractTo() 方法将其内容提取到一个名为 poser 的目录中。我们还可以使用 convertToData() 方法将 Phar 文件转换为 ZIP 格式进行解压。
部署phar文件到生产服务器时的小贴士
亲爱的开发者们,当你们将phar文件部署到生产服务器时,记得调整服务器配置,以避免浏览器直接下载该文件。想象一下,当用户访问网站时,如果浏览器直接下载phar文件而不是执行它,那么你的应用程序将无法正常运行。这是一个关键的步骤,不可忽视。
为归档文件设置别名是一个聪明的做法。这个别名会永久保存在归档文件中,无论归档文件在文件系统中的位置如何变化。给归档文件起一个简短的名字,如“yun.phar”,这样无论归档文件在哪里,你都可以轻松引用它。设置别名后,你可以像下面这样使用它:
require "lib/yunke.phar"; // 引入基础文件
require "phar://yun.phar/Lib.php"; // 使用别名访问归档文件
// 你仍然可以使用这种方式引用归档文件:require "phar://lib/yunke.phar/Lib.php";
如果你在制作phar文件时没有指定别名,也可以在存根文件中使用Phar::mapPhar('yunke.phar')来指定。存根文件是启动文件,它是一段php执行代码。当你直接执行归档文件时,实际上是执行存根文件。在脚本中包含归档文件时,就像包含普通的php文件一样包含并运行它。当你以phar://的方式直接包含归档中的某个文件时,存根代码不会执行。通常,存根文件会包含要运行的其他文件的require语句。存根文件的唯一限制是以__HALT_COMPILER();结束。从php5.3开始,该扩展默认内置启用。
请注意,制作的phar文件是不可修改的。任何配置文件之类的文件都需要放在归档文件的外部。mapPhar函数只应在存根代码中调用。在没有设置归档别名的情况下,它可以用来设置别名并打开一个引用映射到phar流。
亲爱的PHP爱好者们,希望这篇文章能对你有所启发和帮助。如果你对PHP还有其他感兴趣的主题,可以查看我们站点的专题系列,包括《PHP框架详解》、《PHP性能优化实战》等。我们相信,这篇文章将对你编写更出色的PHP程序有所帮助。
Cambrian.render('body')
网络推广网站
- PHP开发之归档格式phar文件概念与用法详解【创建
- JavaScript实现通过select标签跳转网页的方法
- 基于javascript实现的购物商城商品倒计时实例
- 使用socket.io实现简单聊天室案例
- JS实现支持多选的遍历下拉列表代码
- 浅谈vue.use()方法从源码到使用
- thinkPHP5.0框架应用请求生命周期分析
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- 基于Vue开发数字输入框组件
- [J2SE]Java中3DES加密解密调用示例
- asp 多字段模糊搜索的函数
- MySQL如何查看元数据锁阻塞在哪里
- SQL Server数据库开发的二十一条法则
- ajax动态获取数据库中的数据方法
- SHA-安全散列算法简析 附实例
- JS闭包原理与应用经典示例