Windows 8: .phar files, how do you want to open

You have to set php.exe as your default application for phar files.


.phar stands for PHP Archive

Usually .phars take some arguments, so they are intended to be run from command prompt. Linux/BSD/OS X shell or Windows command prompt.

Linux .phar use case scenarios assume .phars are copied to some /bin and renamed to be without .phar extension, so you can use a php archive as if you would use any other linux command. So I recommend following way of doing the same thing with Windows:

  1. Put all your .phar files to one directory like C:\php\phars
  2. Add C:\php\phars to system environment variables (right-click my Computer -> Properties -> Advanced System Settings -> Environment variables)
  3. Start the elevated command prompt (find command prompt in start menu then right-click and select Run as Administrator)
  4. Type the following commands, replacing the path C:\phpdev\php\php542\php.exe with full path to your PHP executable:
ftype PHARFile=C:\phpdev\php\php542\php.exe "%1" %*
assoc .phar=PHARFile
set PATHEXT=%PATHEXT%;.PHAR

Next time your should be able just to run Windows console (keyboard Win+R and type cmd.exe) and type any of your .phar's like apigen.phar followed by any command and it will work

C:\Users\acosonic>apigen.phar help
Usage:
...

Arguments:
 command        The command to execute
 command_name   The command name (default: "help")

Options:
 --xml          To output help as XML
 --format       To output help in other formats (default: "txt")
 --raw          To output raw command help
 --help (-h)    Display this help message.
 --quiet (-q)   Do not output any message.
 --version (-V) Display this application version.

Help:
 The help command displays help for a given command:

   php C:\phpdev\phars\apigen.phar help list

 You can also output the help in other formats by using the --format option:

   php C:\phpdev\phars\apigen.phar help --format=xml list

 To display the list of available commands, please use the list command.

C:\Users\acosonic>

So this way lets you run .phar archives in a directory where you need to work, for example generating documentation in C:\myproject\controller without specifying full path to .phar as if you would if it's run without adding it to Windows path.

To explain what commands in step 4 did:

  1. Created mapping HKCR.phar → HKCR\PHARFile
  2. Created HKCR\PHARFile\shell\open\command = 'php.exe "%1" %*' [REG_EXPAND_SZ]
  3. Extended HKCU\Environment\PATHEXT = '%PATHEXT%;.PHAR' [REG_EXPAND_SZ]

*.phar gets treated like binary/script, and *.phar execution works as long as a *.phar file is located anywhere in %PATH%.


One can wrap php *.phar with *.bat, then the filename will be the name of the CLI command:

@ECHO OFF
php "C:/Program Files/PHAR/phpDocumentor.phar" %*

One can also use such a wrap to pass along default arguments; eg. wp.bat:

@ECHO OFF
php "C:/Program Files/PHAR/wp-cli.phar" --path="D:/SDK/wordpress" %*

Where pattern %* will capture and forward CLI arguments, as it is supposed to.
Alike this one can run phar alike any other CLI command, in a terminal window.