PHP exec节点动态脚本来自内存

时间:2016-10-13 01:37:16

标签: php node.js

我正在尝试通过PHP中的Node.js运行代码而不触及文件系统(磁盘)。这可能吗?

我正在做什么

<?php

function renderJs($script) {
  $path = __DIR__.'/'.md5($script).'.js';
  file_put_contents($path, $script);
  $rendered = `node $path`;
  unlink($path);

  return $rendered;
}

$val = renderJs('console.log(1+1)'); // 2

我想避免什么

  • 必须将文件保存到磁盘
  • 安装其他PHP扩展(例如V8js)

理想情况下,它就像是

$magicBlob = php_magic($script);
$rendered = `node $magicBlob`;

我不能像在

中那样评估它
$rendered = `node --eval "$script"`;

因为脚本可能有引号会破坏我的外引号。

1 个答案:

答案 0 :(得分:1)

使用escapeshellarg对我有用:

$js = <<<EOF

hello = function (name) {
    console.log('`Hello there '+name+"!!`");
}

hello('PHP');
EOF;

$rendered = system("node --eval ".escapeshellarg($js));

我不知道这个想法有多好,但是......