如何制作PharPHP(归档文件)及与composer的比较

2023-12-19 16:31:55 浏览数 (2)

背景

Phar 是 PHP 的一种打包格式,它将整个 PHP 应用程序及其依赖打包为一个单独的可执行文件。Composer 是 PHP 的一个依赖管理工具,它可以自动下载和管理 PHP 项目的依赖。

就性能而言,Phar 和 Composer 有不同的应用场景和优势。

Phar 的性能更好主要体现在应用部署和执行方面。由于整个应用被打包成一个单独的文件,Phar 在部署时可以减少文件的数量和复制过程,提高了应用的部署效率。同时,在运行时,Phar 也可以以模块化的方式加载应用程序,减少了文件的读取和加载时间,从而提供更快的执行速度。

Composer 的性能更好主要体现在依赖管理和项目维护方面。Composer 可以根据项目的 composer.json 文件自动下载和安装依赖库,确保项目的依赖关系得到满足。这样可以提高开发者的工作效率,减少手动管理依赖的麻烦。同时,Composer 还可以通过缓存机制,避免重复下载已安装的依赖包,进一步提高了性能。

总的来说,Phar 更适合将整个应用程序打包成一个可执行文件,提供快速的部署和执行性能;而 Composer 更适合管理项目的依赖关系,提供便捷的依赖管理和维护功能。具体选择哪种工具,应根据具体的需求和场景来决定。

实战

Laravel 中,你可以使用 box 工具来封装你的应用程序为 Phar(PHP 归档文件)。

以下是封装 Laravel 应用程序为 Phar 的步骤:

1. 首先,确保你已经在本地安装了 Composer 和 Box 工具。你可以使用以下命令确认:

代码语言:javascript复制
composer --version
box --version

安装 box 工具: composer global require humbug/box 编辑 ~/.bashrc export PATH="

1. 在你的 Laravel 项目根目录下,创建一个 box.json 文件。这个文件用于配置打包的参数和设置。例如,你可以使用以下命令创建一个基本的 box.json 文件:

代码语言:javascript复制
box init

这将创建一个包含默认配置的 box.json 文件,在文件中你可以进一步自定义配置。

2. 打开 box.json 文件,并配置以下参数:

  • "main": "public/index.php":指定你的 Laravel 应用程序的入口文件。
  • "output": "your-app.phar":指定生成的 Phar 文件的名称。
  • "directories""finder":用于配置需要包含在 Phar 文件中的目录和文件。

3. 运行以下命令来生成 Phar 文件:

代码语言:javascript复制
box build

这将根据你在 box.json 文件中配置的参数,将你的 Laravel 应用程序打包为 Phar 文件。

4. 生成的 Phar 文件将保存在当前目录下,你可以将它移动到你想要的位置,例如将其放置在项目根目录之外的某个目录中。

现在,你已经成功地将 Laravel 应用程序封装为 Phar 文件。你可以通过运行 Phar 文件来启动你的应用程序,就像执行一个普通的 PHP 脚本一样。

box.json

代码语言:javascript复制
{
  "directories": ["vendor"],
  "files": [
    "index.php"
  ],
  "stub": false
  "output": "league-csv.phar",
  "compression": "BZ2"
}

index.php

代码语言:javascript复制
<?php

include __DIR__ . '/vendor/autoload.php';

demo

在一个空目录下

代码语言:javascript复制
composer require league/csv

box.json

代码语言:javascript复制
{
  "directories": ["vendor"],
  "files": [
    "index.php"
  ],
  "stub": false,
  "output": "league-csv.phar",
  "compression": "BZ2"
}

index.php

代码语言:javascript复制
<?php

include __DIR__ . '/vendor/autoload.php';
代码语言:javascript复制
box compile # 注意:box build 命令已被弃用,建议使用 box compile 命令来代替。

cp league-csv.phar /var/www/html/mars.cn/app/Phar/

我有个大胆的想法

小伙伴在平常有没有遇到以下这种情况:遇到技术难题时,网上教程一堆堆,优秀的很多,但也有很多是过时的,或者是copy来copy去,甚至错别字都没改。

我公众号的技术文章,都是亲自校验过的。至少可以保证在发文的一段时间,不会过时。如果你在实操过程中,有遇到问题,可以在同名公众号留言,免费解答,相互学习,相互成长^v^

0 人点赞