Have you tried Composer Scripts? You DO not need Phing.

Have you tried Composer Scripts? You may not need Phing.” is a nice blog post showing how to use Composer scripts to solve simple build and deployment automation.  There’s plenty of good advice in there.

However I have one issue with it.  It’s the “You may not need Phing.” part.  Irrelevant of your use of Composer scripts, you DON’T need Phing.  Phing had its time.  It was one of the first build and deployment tools for PHP and it was better than all the alternatives at the time (manual builds, custom shell scripts, or tools from other programming languages).

Those days are long gone and we have better tools now.  If you are still using (or even considering using Phing), I beg you to look another way.  Check out Deployer.  Check out Robo.li.  Check other alternatives.  Don’t use Phing.

What’s wrong with Phing? Well, I can sum it up in one and one reason only.  It’s XML-based.  Yeah, that’s right.  Phing routes come from Apache Ant, which is a very common build tool for the Java world.  And Java world is full of XML.

In the year of 2018, we’ve figured out better ways.  Both JSON and YAML are better alternatives to XML for both humans and machines.  JSON and YAML are easier to read and generate.

Furthermore, even XML is not the most appropriate format for what Phing is working with.  Sure, as long as you can stick with the basic configuration of existing tasks and options – it doesn’t make much difference.  But at some point, you’ll need to extend and customize your build and deployment process.  And you’ll eventually end up writing PHP code using XML syntax.  And trust me, there is no fun in that at all.

Use PHP to write PHP code.  Use PHP tools for your PHP projects.  We have these now and they are great.  At work we are using Robo.li very extensively and it works amazing!  You don’t have to use it.  Pick whatever works for you.  But if Phing works for you, you’re probably doing something wrong.

Oh, and yes, Composer scripts are awesome too.  Try them out, if you haven’t already.

phing fatal error after upgrade to 2.4.13

If you are using phing for building and deploying projects (and you should), and using Remi repository for PHP 5.3 and related tools for CentOs and RedHat, be prepared to see a problem with phing and build.xml files that use conditions in If.   Here is a sample snippet from the build.xml:

<!-- Directory separator based on the current file system -->
<property name="ds" value="\" />
<if>
  <equals arg1="${host.fstype}" arg2="UNIX" />
  <then>
    <property name="ds" value="/" override="yes" />
  </then>
</if>

and here is the error:

Error reading project file [wrapped: build.xml:39:20: Error initializing nested element <equals> [wrapped: equals (unknown) doesn't support the 'arg1' attribute.]]

The bug #943 has already been filed in assigned in phing trac, and after a brief chat with devs in IRC channel, it seems like it will be fixed soon (by 2.4.14 release). The best cause of action for now though is reverting back phing 2.4.12.