1. phar是何方神圣?
我们知道C#可以把代码打包成dll文件,java可以打包成jar,
而phar就是php的打包工具,可以将多个php文件打包成一个文件。
首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,include是默认开启的。
phar.readonly => On ---> 找到phar.readonly 把它设置为off
示例:
新建文件 xx.xx(有无后缀都随意)创建一个phar压缩包
$phar = new Phar('test.phar'); //创建test.phar包
$phar->buildFromDirectory(__DIR__.'/file', '/\.php$/');
$phar->compressFiles(Phar::GZ);
$phar->stopBuffering();
$phar->setStub($phar->createDefaultStub('index.php')); //入口文件
在xx.xx同级目录的file文件中创建 index.php 和 test.php
执行 php xx.xx
发现报错 ,提示php.ini的设置off没起作用,
我想是否用的wamp集成环境,造成cgi模式和cli模式用的不是同一个php.ini?
执行如下命令查看开启状态及php.ini路径
php -i | findstr /i "phar.readonly"
php -i | find /i "php.ini"
于是修改影响phar.readonly设置的php.ini 重启, 再次执行 php xx.xx 正常生成test.phar文件
执行 test.phar 却没有得到输出?继续如下操作...
创建 test.bat文件 写入
@php test.phar
再次执行 test 成功输出index.php内容。
经过上面对phar的使用,composer的原理也就大致明白了。
附:
win-cmd环境下载安装 composer:
cd php >bin 目录
php -r "readfile('https://getcomposer.org/installer');" | php
注意: 如果收到 readfile 错误提示,请使用 http 链接或者在 php.ini 中开启 php_openssl.dll 。
php -r "readfile('http://getcomposer.org/installer');" | php -- --disable-tls
然后在 composer.phar 同级目录下新建文件 composer.bat :
C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat
关闭当前的命令行窗口,打开新的命令行窗口进行测试:
composer -v