在php中调用node.js(nightmarejs)脚本

时间:2016-10-07 11:42:57

标签: php node.js nightmare

我的问题很平静,我从nodejs / nightmarejs开始,我需要在我的php脚本中调用这个js脚本来从中检索答案。

我使用Wamp,我的脚本都在同一个文件夹中:

C:\wamp64\www\nightmare\index.php
C:\wamp64\www\nightmare\index.js

index.js:

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true })

nightmare
  .goto('http://yahoo.com')
  .type('form[action*="/search"] [name=p]', 'nightmare github')
  .click('form[action*="/search"] [type=submit]')
  .wait('#main')
  .evaluate(function () {
    return document.querySelector('#main .searchCenterMiddle li a').href
  })
  .end()
  .then(function (result) {
    console.log(result)
  })
  .catch(function (error) {
    console.error('Search failed:', error);
  });

index.php:

<?php

    exec("index.js", $jsOutput);
    var_dump($jsOutput);

?>

我在其他一些帖子中看到,如果我使用exec()我应该给它整个命令行让它正常运行,例如:

exec("node index.js", $jsOutput);

我想我必须给nodejs的整个路径?但我没有找到任何方法从我当前的文件夹中检索nodejs的路径。 如果有人有任何灯,我们将不胜感激。 非常感谢

2 个答案:

答案 0 :(得分:1)

要在Windows中搜索文件,您可以使用 where 命令:

<?php
    exec('where node', $nodePath);

    if ($nodePath && $nodePath[0]) {

        exec('"' . $nodePath[0] . '" index.js', $jsOutput);

        var_dump($jsOutput);
    }
    else {
        echo 'node not found.';
    }

在Linux下,您可以找到 找到命令。

答案 1 :(得分:0)

嗯,我想这是一个常见的错误。 我安装了node.js之后忘记重新启动计算机,并且必须这样做才能应用在windows环境变量中完成的更改,这样你就可以在commant提示符中调用节点......