亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在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 關注
  • 157 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號