@turox/node-phpfpm

1.0.4 • Public • Published

node-phpfpm

node.js run php scripts via phpfpm

NPM

npm install node-phpfpm

Usage

var PHPFPM = require('node-phpfpm');

var phpfpm = new PHPFPM(
{
	host: '127.0.0.1',
	port: 9000,
	documentRoot: __dirname
});

phpfpm.run('test.php', function(err, output, phpErrors)
{
	if (err == 99) console.error('PHPFPM server error');
	console.log(output);
	if (phpErrors) console.error(phpErrors);
});

Configuration

var phpfpm = new PHPFPM(configObject);

configObject may have the following keys:

  • documentRoot optional [string] the document root folder of PHP scripts. must end with /
  • host optional [string] the ip or host name of php-fpm server (default: 127.0.0.1)
  • port optional [int] the port of php-fpm server ( default: 9000 )
  • sockFile optional [string] use the unix sock file instead of 127.0.0.1:9000 to connect php-fpm server

APIs

run(options, callback)

available keys in options object

  • uri [string] path to your phpfile
  • url [string] alias of uri
  • method optional [string] GET or POST (default: GET)
  • form optional [object] form_data that will be sent with content-type: application/x-www-form-urlencoded
  • json optional [object] json data that will be sent with content-type: application/json
  • body optional [string] raw post body data
  • contentType optional [string] the content-type header
  • contentLength optional [string] the content-length header
  • server_addr optional [string] associated with PHP $_SERVER['REMOTE_ADDR'] var
  • server_port optional [string] associated with PHP $_SERVER['REMOTE_PORT'] var
  • server_name optional [string] associated with PHP $_SERVER['SERVER_NAME'] var
  • server_software optional [string] associated with PHP $_SERVER['SERVER_SOFTWARE'] var

if you send a string as options, it will be converted to:

{ uri: "the string value", method: 'GET' }

callback

function(err, output, phpErrors)
{
	// if err === 99, means php-fpm error 
	// it may be lost php-fpm connection or too many connections
	// otherwise it will always equal to false
	
	// output is the stdout of php scripts
	
	// phpErrors is the php errors detail string
	// php will output some errors, but that does not mean the request fails
	// if you turn on display_errors in your php.ini, the phpErrors content will also be found in the output string
	
	console.log(err, output, phpErrors); 
}

Demo

Simple php request with no parameters

phpfpm.run('test1.php', function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});

Send data via GET method

phpfpm.run('test.php?a=b&c=d&e[0]=1&e[1]=2', function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
print_r($_GET);
// Array
// (
//     [a] => b
//     [c] => d
//     [e] => Array
//         (
//             [0] => 1
//             [1] => 2
//         )
// )
?>

Send form data via POST method

phpfpm.run(
{
	uri: 'test.php',
	form: 
	{
		a:'a',
		b:'b'
	}
}, function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
print_r($_POST);
// Array
// (
//     [a] => a
//     [b] => b
// )
?>

Send json data with POST method

phpfpm.run(
{
	uri: 'test.php',
	json: 
	{
		a:'a',
		b:'b'
	}
}, function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
echo file_get_contents('php://input');
// {"a":"a","b":"b"}
?>

Send form data with GET method

phpfpm.run(
{
	uri: 'test2.php',
	method: 'GET',
	form: 
	{
		a:'a',
		b:'b'
	}
}, function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
print_r($_GET);
// Array
// (
//     [a] => a
//     [b] => b
// )
?>

Send form data and query string with GET method

phpfpm.run(
{
	uri: 'test2.php?c=cc',
	method: 'GET',
	form: 
	{
		a:'a',
		b:'b'
	}
}, function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
print_r($_GET);
// Array
// (
//     [c] => cc
//     [a] => a
//     [b] => b
// )
?>

Send raw body data with POST method

phpfpm.run(
{
	uri: 'test5.php',
	body: 'abc123'
}, function(err, output, phpErrors)
{
	console.log(err, output, phpErrors);
});
<?php
echo file_get_contents('php://input');
// abc123
?>

License

MIT

Thanks

This project is based on the great work of node-fastcgi-client written by LastLeaf. LastLeaf/node-fastcgi-client

Links

How to execute PHP scripts with Node.JS

Package Sidebar

Install

npm i @turox/node-phpfpm

Weekly Downloads

1

Version

1.0.4

License

MIT

Last publish

Collaborators

  • turox