phar是类似与jar包的东西,即将php文件打包在一起的压缩包。
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文件中的哪个php文件,直接使用phar://xxx.phar/xxxx.php来引用即可。
<?php require_once "phar://library.phar/Application.php"; ?>
phar不能与php文件一样放到web目录下,因为它会被当成文件直接下载
。
参考: