前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何制作PharPHP(归档文件)及与composer的比较

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

作者头像
用户10002156
发布2023-12-19 16:31:55
3410
发布2023-12-19 16:31:55
举报
文章被收录于专栏:生活处处有BUG

背景

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^

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生活处处有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 实战
    • box.json
      • index.php
        • demo
          • 我有个大胆的想法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档