为了账号安全,请及时绑定邮箱和手机立即绑定

如何在node.js中以字符串形式执行PHP程序?

如何在node.js中以字符串形式执行PHP程序?

PHP
九州编程 2023-03-11 16:38:29
我从前端获取了一个 PHP 字符串,我只想执行它并获取标准输出和标准错误。这是我试过的:const runner = require('child_process');runner.exec('php ' + phpString, (err, stdout, stderr) => {  // ...});但这要求 PHP 代码位于文件中,因为它需要将路径作为指向 PHP 文件的参数。但是将其写入phpString文件然后执行似乎没有必要,那么有没有办法可以直接执行字符串?
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以为此使用 cli-r标志。PHP


const runner = require('child_process');

const phpString = `'echo "hi";'`

runner.exec('php -r ' + phpString, (err, stdout, stderr) => {

     console.log(stdout) // hi

});

尽管我会改用execFile/spawn,以避免转义参数


const runner = require('child_process');

const phpString = `echo "hi";` // without <?php

runner.execFile('php', ['-r', phpString], (err, stdout, stderr) => {

   console.log(stdout) // hi

});

如果你想使用<?php标签,你应该使用spawn并写入stdin. 我认为这是最好的方法。


const php = runner.spawn('php');

const phpString = `<?php echo "hi";?>` // you can use <?php


// You can remove this if you want output as Buffer

php.stdout.setEncoding('utf8') 

php.stdout.on('data', console.log)

php.stderr.on('data', console.error)


php.stdin.write(phpString)

php.stdin.end()

请记住,不建议允许用户在您的服务器上执行代码。


查看完整回答
反对 回复 2023-03-11
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

Marcos 已经给出了有效且正确的答案,我想补充一点,您也可以将 -code 通过管道传递php给php-executable:


const { exec } = require('child_process');


const phpString = '<?php echo 1; ?>';


exec(`echo "${phpString}" | php`, (error, stdout, stderr) => {

  console.log(stdout); // prints "1"

});


查看完整回答
反对 回复 2023-03-11
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信