43
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.jsからPHPのプロセスを呼び出す - JSONでやりとり編

Posted at

node.js側の実装

Node.jsのAPIだけでやってます。
PHPをコマンドラインで呼び出します。

icallyou.js
var util  = require('util');
var spawn = require('child_process').spawn;
var php   = spawn('php', ['callme.php']); // $ php callme.php と同じ意味

var data = {
	'foo': 'something',
	'bar': 'something',
};

php.stdin.write(JSON.stringify(data)); // 標準入力としてPHPに渡す
php.stdin.end(); // PHPさん、標準入力終わったよ

php.stdout.on('data', function (data) {
	console.log('stdout: ', JSON.parse(data));
});

php.stderr.on('data', function (data) {
	console.log('stderr: ', JSON.parse(data));
});

php.on('exit', function (code) {
	console.log('phpプロセスが終了しました: ステータスコード: ' + code);
});

// ↓エラーなパターン

var php2   = spawn('php', ['callme.php']);
var data = 'なんか変なデータ';

php2.stdin.write(JSON.stringify(data));
php2.stdin.end();

php2.stdout.on('data', function (data) {
	console.log('stdout: ', JSON.parse(data));
});

php2.stderr.on('data', function (data) {
	console.log('stderr: ', JSON.parse(data));
});

php2.on('exit', function (code) {
	console.log('php2プロセスが終了しました: ステータスコード: ' + code);
});

PHP側の実装

php://stdinで標準入力を取得できます。

callme.php
<?php

$stdin = file_get_contents('php://stdin');

$data = json_decode($stdin, true);

// var_dump($data);

if ( is_array($data) === false )
{
	echo json_encode(array(
		'status'  => 'error',
		'message' => 'フォーマットに誤りがあります。JSONの配列で送ってこいゴルァ',
	));
	exit(1);
}
else
{
	echo json_encode(array(
		'status'  => 'success',
		'message' => 'OKです',
	));
	exit(0);
}

実行してみる

$ node icallyou.js 
stdout:  { status: 'success', message: 'OKです' }
stdout:  { status: 'error',
  message: 'フォーマットに誤りがあります。JSONの配列で送ってこいゴルァ' }
phpプロセスが終了しました: ステータスコード: 0
php2プロセスが終了しました: ステータスコード: 1
43
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?