为什么Composer命令可以不依赖类PHP命令而直接运行?

如果 composer.phar 是一个包,那么正常使用 composer 应该全部是 php composer.phar ** 这样的形式,为什么我们在日常使用中却可以

comoser install

这样的形式来使用呢?
想弄明白为什么,我们先从 composer 的安装开始过程开始研究

curl -sS https://getcomposer.org/installer | php

从命令上我们可以看出,这个安装命令其实就是从网上下载了installer 的PHP文件,然后在本地执行。这个执行过程就类似于打包 phar 包。最终生成了composer.phar 文件。

Linux系统中全局安装,其原理就是: linux系统中文件后缀名并不代表可执行类型,所以将 composer.phar 移动到 bin 目录后修改文件名就可以

mv composer.phar /usr/local/bin/composer

Windows系统中composer setup.exe 通过bat文件来实现调用composer.phar bat 文件类似于

@echo off php53\php %D:\phpStudy\tools\composer.phar %*

在这里有个疑问,就是为什么Linux的composer.phar文件就可以直接执行,难道comopser.phar是一个可执行的二进制文件不需要PHP解释器吗? 这个问题思考了许久,后来从网上偶然看到一些人在解压缩phar文件,所以我尝试用文本编辑工具打开composer.phar ,就找到了答案

原来在composer.phar的文件头部,内嵌了一段shell代码。至此了解了composer的运行前的必要知识。