在 MediaWiki 扩展中调用 NodeJS 程序
Call NodeJS program in a MediaWiki extension
我正在创建一个 MediaWiki 扩展以在我的 wiki 上启用对 Argdown (https://argdown.org/) 的支持。 Argdown 解析器是用 NodeJS 编写的;让我的扩展 PHP 文件 运行 成为 NodeJS 程序的最佳方式是什么?
我在网上看到一些例子说用 exec
来做,但我的系统管理员说这是个坏主意 - 他说 exec
会造成安全和性能问题。有没有更好的方法?
MediaWiki 有一个 shell framework 就是为了这个目的。把这些放在我的文件的顶部之后...
use MediaWiki\Shell\Shell;
use MediaWiki\Logger\LoggerFactory;
...这是我在 PHP 函数中输入的内容:
global $IP;
$result = Shell::command( "/usr/local/bin/node", "$IP/extensions/Argdown/helloWorld.js" )->execute();
$stdout = $result->getStdout();
$stderr = $result->getStderr();
$ret = "<p>Stdout: $stdout</p>";
$ret .= "<p>Stderr: $stderr</p>";
return $ret;
我应该可以只输入 "node"
而不是 "/usr/local/bin/node"
,但这不起作用,我还没有弄清楚为什么 - 在命令行上写 node
有效很好。
感谢MediaWiki Discord上的志愿者们的帮助!
我正在创建一个 MediaWiki 扩展以在我的 wiki 上启用对 Argdown (https://argdown.org/) 的支持。 Argdown 解析器是用 NodeJS 编写的;让我的扩展 PHP 文件 运行 成为 NodeJS 程序的最佳方式是什么?
我在网上看到一些例子说用 exec
来做,但我的系统管理员说这是个坏主意 - 他说 exec
会造成安全和性能问题。有没有更好的方法?
MediaWiki 有一个 shell framework 就是为了这个目的。把这些放在我的文件的顶部之后...
use MediaWiki\Shell\Shell;
use MediaWiki\Logger\LoggerFactory;
...这是我在 PHP 函数中输入的内容:
global $IP;
$result = Shell::command( "/usr/local/bin/node", "$IP/extensions/Argdown/helloWorld.js" )->execute();
$stdout = $result->getStdout();
$stderr = $result->getStderr();
$ret = "<p>Stdout: $stdout</p>";
$ret .= "<p>Stderr: $stderr</p>";
return $ret;
我应该可以只输入 "node"
而不是 "/usr/local/bin/node"
,但这不起作用,我还没有弄清楚为什么 - 在命令行上写 node
有效很好。
感谢MediaWiki Discord上的志愿者们的帮助!