当前位置:首页 > PHP百科 > 正文

什么是phar?phar打包使用教程及注意事项

什么是phar?

phar是类似与jar包的东西,即将php文件打包在一起的压缩包。

打包phar步骤

php已经使用Composer来管理包了,为什么还要去研究phar打包呢? 为了方便代码的复用。源码复杂比较麻烦,如果源码有多个项目中使用,而因源码功能扩展、bug修复等问题,就会复制许多源码,容易造成错乱。

步骤:

1.创建项目结构

library|
 src|
     xxx.php
     xxx.php
 build.php

2.编写打包脚本(build.php)

<?php
 $phar=new Phar("library.phar",0,"library.phar");
 $phar->buildFromDirectory(dirname(__FILE__)."/src");
 $phar->setDefaultStub("index.php","index.php");
?>

3.执行打包 直接使用php命令来执行打包脚本即可。当然也可以通过浏览器来访问这个php脚本来执行打包。

/usr/local/php/bin/php -c /usr/local/php/etc/ build.php

执行打包的时候可能遇到如下错误,提示php.ini setting phar.readonly,这个需要把php.ini配置文件中phar.readonly="Off"即可。

client@pc:~/workspace/php/upload/library$ /usr/local/php/bin/php -c /usr/local/php/etc/ upload.php 
PHP Fatal error:  Uncaught UnexpectedValueException: creating archive "library.phar" disabled by the php.ini setting phar.readonly in /home/client/workspace/php/upload/library/upload.php:2
Stack trace:
#0 /home/client/workspace/php/upload/library/upload.php(2): Phar->__construct()
#1 {main}
  thrown in /home/client/workspace/php/upload/library/upload.php on line 2

phar打包使用教程及注意事项.png

使用phar

使用phar文件中的哪个php文件,直接使用phar://xxx.phar/xxxx.php来引用即可。

<?php
    require_once "phar://library.phar/Application.php";
?>

phar需要注意的问题

phar不能与php文件一样放到web目录下,因为它会被当成文件直接下载

参考:

  1. https://www.webhek.com/post/packaging-your-php-apps-with-phar.html

  2. https://www.php20.cn/article/179