Skip to content


Repository files navigation

grunt-php2html Build Status

Frontend HTML generation with PHP

Getting Started

This plugin requires Grunt ~0.4.1 and php-cgi

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-php2html --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:


To make this work you need the php-cgi binaray in your PATH.

Installing php-cgi


The php-cgi binary can be installed via Homebrew by tapping the homebrew-php repository:

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew install php56

The php-cgi binary can be installed via XAMPP. Here is how you can add the binary to your PATH: Link

sudo apt-get install php5-cgi

The "php2html" task


Use this grunt plugin to compile php files to static html. In your project's Gruntfile, add a section named php2html to the data object passed into grunt.initConfig().

  php2html: {
    options: {
      // Task-specific options go here.  
    your_target: {
      // Target-specific file lists and/or options go here.


  // relative links should be renamed from .php to .html
  processLinks: true,
  // some function to process the output 
  process: function(response,callback) {
  htmlhint: {},
  htmlhintrc: .htmlhintrc,
  docroot: <mydocroot relative to Gruntfile.js>
  getData: {'key': 'value'}


Type: String Default value: undefined

Use a router script.


Type: Boolean Default value: true

Convert links pointing to .php pages to the .html equivalent.


Type: Function Params: String Response text, Function Callback function Default value: undefined

Implement your own response parser and return the processed response back to the task


Type: Object

Pass a list of rules for linting the compiled HTML.

If rules is undefined, it will use default ruleset:

    'tagname-lowercase': true,
    'attr-lowercase': true,
    'attr-value-double-quotes': true,
    'doctype-first': true,
    'tag-pair': true,
    'spec-char-escape': true,
    'id-unique': true,
    'src-not-empty': true


Type: String Default value: null

If this filename is specified, options and globals defined therein will be used. Task and target options override the options within the htmlhintrc file. The htmlhintrc file must be valid JSON and looks something like this:

  "tag-pair": true,


Type: String Default value: process.cwd()

Specify a docroot for the php Server. All php files will be served relative to this directory.


Type: Int Default value: 8888

Specify a port for the php Server.


Type: Object Default value: {}

Pass data to php file using $_GET.


Type: Boolean Default value: true

Set to false to write dest html files on error. Usefull for debugging.


Type: String Default value: undefined

Use this option to tweak the request host passed to the .php script as SERVER_NAME and SERVER_PORT.

Usage Examples

  php2html: {
    default: {
	  options: {
	    // tweak $_SERVER['SERVER_NAME'] & $_SERVER['SERVER_HOST'] 
	    requestHost: '',
		// relative links should be renamed from .php to .html
		processLinks: false,
		process: function(response,callback) {
		  // do some funy stuff with the reponse text
		  var parsedResponse = ...
		  // send it back to the task
	  files: [
		{expand: true, cwd: 'app/', src: ['*.php'], dest: 'build', ext: '.html' }

Release History

  • 2014-25-04   v0.1.10  Added getData option to pass variables to php script
  • 2013-11-09   v0.1.7   Added docroot option
  • 2013-11-07   v0.1.6   Fixed some path issues on windows
  • 2013-11-04   v0.1.5   Added HTMLHint support
  • 2013-08-09   v0.1.4   First release